Our xdg_shell implementation has received some fixes that are also
applicable to wl_shell. Qt still uses wl_shell, so we do have a test
case, and do need to keep it up to date.
This copies some window attributes, clamping logic, and diagnostic prints
from the xdg_shell implementation.
On window hide the focus out callback is triggering and causing a new
timer to be set up. This timer fires when the window no longer exists.
Remove the focus_out callback when we hide the window.
When running as a wayland compositor connected to another wayland
compositor, we don't want to advertise dmabuf capabilities if the
parent compositor doesn't support them.
If it does, we'll want to proxy dmabuf requests to it instead of handling
them ourselves.
Expose this as new bools in e_comp_wl.
this guarantees a crash any time the default sink gets removed since it will
always re-set the about-to-be-deleted default sink as the default sink
fix T3277 probably
When in the config dialog a new set of layouts is created, this set has
to be told to the displayserver. Like at the startup of e, so calling
e_xkb_reconfig().
fix T3072
Small patch to disable selecting Application themed mouse pointers
when running in wayland as this option is currently broken when
running in wayland (gives no mouse cursor at all)
e_pointer calls _e_pointer_x11_setup (from _e_pointer_type_set) which
only sets the cursor via ecore_x_cursor_shape_get calls...
essentially you end up with no mouse cursor because e_pointer is
missing codepaths to lookup system mouse cursor images when running in
wayland.
ref T3585
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
- remove (wrong) global variables which tracked client-specific resources
- start ping upon creating a shell surface
- track client-specific shell resources on a per-client basis
this allows different display protocols to start their applications at
different times to ensure that any initialization has completed prior to
starting anything requiring a window
fix T3475
Summary:
There is an edge case that results in SIGFAULT in Enlightenment when
"Keyboard Settings" dialog is closed prior to "Add New Configuration"
dialog and "OK" button is pressed in the latter one.
This makes sure that closing the dialogs follows the parent/child logic.
@fix
Test Plan:
1. Go to Settings -> All -> Input -> Keyboard and press "Add"
2. Observe that "Add New Configuration" dialog is opened
3. Select/highlight any new layout
4. Go back to "Keyboard Settings" dialog and close it
5. Press "OK" in "Keyboard Settings" dialog
6. Observe that Enlightenment sigfaults
Reviewers: zmike, raster
Subscribers: cedric, seoz
Differential Revision: https://phab.enlightenment.org/D3901
while it technically wuld work, this memcpy here is fragile and the
moment some struct members changed it'd fall apart and have fields all
misaligned etc. in fact using offsetof means it might over-copy a bit
extra due to alignment of the connect_cb vs method in Connman_Service.
so manually aissgne the fields in the func instead to be far safer.
if anything this should become a sub-struct with a type that can then
be properly copied even if things change.
@fix
for the case the default sink was removed the gadget will get a new
default sink again, for the case of pa there is the possibility that
at this time the sink is still the default one, but the sink gets
removed. so we better set the default index to -1 and return just some
sink for the case the default is deleted.
maximize is client-initiated and compositor-enforced in wayland, meaning that a
maximize should only be acted upon in the compositor after the client has
acknowledged that it has transitioned into the maximized state (likely removing
part of its csd region) and has resized itself to match the expected maximize
size
fix T3297
Including certain headers in the wrong order can cause problems if
we're configured to use beta api (right now wayland forces this).
In most cases we should just be including e.h and not the individual
EFL headers anyway. This fixes some of that.
fix T3426, T3428
xdg shell configure states (maximize, fullscreen) return a client ack when the
client has applied the state. the ack, followed by the next surface commit,
indicates that the surface is ready to be transitioned into the configured state
this ensures that notification text reaching the module can be considered
"usable" without forcing multiple escape passes onto the same notification
fix T2757
wayland clients were previously set as ignored until they obtained
a shell surface in order to avoid early execution of things like placement.
this had no effect.
the ignore must last until the first commit, at which point surfaces have been
sized and can be placed accurately without needing to move the surface around
a lot of times due to resize/frame adjust/birthdays
for the case e_xkb gets initialized, we need to init it before ecore_drm
is called, otherwise ecore_drm will create his own context and keymap,
which will be overriden a few moment later when e_xkb is initializied.
So by calling e_comp_wl_input_keymap_set before ecore_drm_init the
correct context and keymap is set and no useless elements are created.
The mainproblem is that the comp_type is set when the compositor is
already running, so we have to pass the type at the init to the e_xkb
to tell for which kind of compositor we are running.
this does not trigger any efreet cache rebuilds and will result in the user
being forced to sit through the full duration of the wait timer: currently 7.0s
this gets triggered multiple times throughout the wizard.
embarrassing.jpg
this is a default feature of enlightenment which is not obvious to all new
users and, with the default modifier being Alt, may interfere with some
application behavior. this informs users of the feature's existence and
allows for easily changing the modifier(s)
==22088== Invalid read of size 1
==22088== at 0x2C9FE7B1: _evry_cb_show (evry.c:3046)
==22088== by 0x5BE9918: _eo_evas_object_cb (evas_callbacks.c:65)
==22088== by 0x69A16F4: _eo_base_event_callback_call (eo_base_class.c:715)
==22088== by 0x69A3041: eo_event_callback_call (in /usr/lib/libeo.so.1.17.99)
==22088== by 0x5BEA0B3: evas_object_event_callback_call (evas_callbacks.c:240)
==22088== by 0x5C2577C: evas_object_inform_call_show (evas_object_inform.c:12)
==22088== by 0x5C1ED24: _show (evas_object_main.c:1360)
==22088== by 0x5C1EADA: _evas_object_efl_gfx_base_visible_set (evas_object_main.c:1313)
==22088== by 0x575D80A: efl_gfx_visible_set (in /usr/lib/libefl.so.1.17.99)
==22088== by 0x5C1EA58: evas_object_show (evas_object_main.c:1291)
==22088== by 0x479FCF: _e_comp_intercept_show_helper (e_comp_object.c:1616)
==22088== by 0x47A02A: _e_comp_intercept_show (e_comp_object.c:1630)
==22088== Address 0x17621591 is 81 bytes inside a block of size 120 free'd
==22088== at 0x4C2AE6B: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==22088== by 0x2C9F95A8: _evry_window_free (evry.c:993)
==22088== by 0x2C9F8065: evry_hide (evry.c:366)
==22088== by 0x2C9FB9A2: _evry_cb_key_down (evry.c:1926)
==22088== by 0x8F6ED4A: _ecore_call_handler_cb (ecore_private.h:316)
==22088== by 0x8F6FC92: _ecore_event_call (ecore_events.c:518)
==22088== by 0x8F7A15A: _ecore_main_loop_iterate_internal (ecore_main.c:2339)
==22088== by 0x8F784A8: ecore_main_loop_begin (ecore_main.c:1284)
==22088== by 0x4403F6: main (e_main.c:1087)
==22088== Block was alloc'd at
==22088== at 0x4C2BBD5: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==22088== by 0x2C9F8D7D: _evry_window_new (evry.c:758)
==22088== by 0x2C9F772D: evry_show (evry.c:177)
==22088== by 0x2C9F711C: _e_mod_run_defer_cb (e_mod_main.c:537)
==22088== by 0x8F75267: _ecore_call_task_cb (ecore_private.h:282)
==22088== by 0x8F7574E: _ecore_idle_enterer_call (ecore_idle_enterer.c:174)
==22088== by 0x8F7A05B: _ecore_main_loop_iterate_internal (ecore_main.c:2261)
==22088== by 0x8F784A8: ecore_main_loop_begin (ecore_main.c:1284)
==22088== by 0x4403F6: main (e_main.c:1087)
we free the instance layout even though tthis is never duplicated but
jhust set to point to the current_layout. don't free it as this causes
a double-free. this fixes a crash here.
@fix
the current security policy for this is based on two points:
1) don't add gadgets to your lockscreen that you don't want on your lockscreen
2) see #1
future improvements here will probably add gadget info to show what risks a gadget
may incur when placed on the lockscreen
If our efl version is not >= 1.18, then the rotations and orient
variables here end up being unused. This patch just moves those
variables (and their usage) inside the 1.18 version check
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
_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