This happens when vt-switching away from the compositor (drm) or
giving keyboard focus to a different X window. Release the modifiers
so we don't get stuck modifiers. We'll update with the new keys down
when we come back.
We don't gain anything from taking a wl_shell_surface in
desktop_surface.set_background, except making wl_shell_surface
gratuitously dependent on wl_shell. In shell.c we can also handle
backgrounds in their own background_configure function which simplifies
the mapping and placement logic.
It seems we used to rely on the repaint scheduled by the cursor motion.
But if there's no cursor, there's no cursor motion, so we need to schedule
our own repaint.
When moving moving back to a workspace or resuming a locked desktop the
keyboard focus state information was lost. By pushing the state to the
workspace when navigating away from a workspace, or locking a desktop,
we can restore it when navigating back, or resuming.
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
A workspace is a list of top level surfaces visible at a time. New
toplevel surfaces are added to the current workspace. Default
keybindings (modifier - Up, modifier - Down, modifier - F1 up to F6) are
used for navigating between workspaces. By default a single workspace is
created.
Surfaces of inactive workspaces have their outputs NULL:ed so that frame
callbacks gets queued instead of emitted. When workspace gets visible
again surface's outputs are assigned.
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
$ abs_builddir=$PWD/tests gdb -args ./src/weston --module=$PWD/tests/.libs/event-test.so
(gdb) run
Starting program: /home/pq/git/wayland-demos/src/weston --module=/home/pq/git/wayland-demos/tests/.libs/event-test.so
[Thread debugging using libthread_db enabled]
Mesa: Initializing x86-64 optimizations
launching /home/pq/git/wayland-demos/tests/test-client
created output global 0x608f50
test-client: got create-surface
got surface 5 from client
got surface id 5
Program received signal SIGSEGV, Segmentation fault.
Mesa: Initializing x86-64 optimizations
0x00007fffeff72c7c in handle_pointer_focus (listener=0x74f5c0, data=0x6faa40) at shell.c:492
492 if (shsurf->unresponsive) {
(gdb) bt
#0 0x00007fffeff72c7c in handle_pointer_focus (listener=0x74f5c0, data=0x6faa40) at shell.c:492
#1 0x00007ffff5ed8b87 in wl_signal_emit (data=0x6faa40, signal=0x6faa88) at wayland-server.h:166
#2 wl_pointer_set_focus (pointer=0x6faa40, surface=<optimized out>, sx=12800, sy=12800) at wayland-server.c:752
#3 0x0000000000407d92 in weston_device_repick (seat=0x6fa930) at compositor.c:633
#4 0x0000000000407e49 in weston_compositor_repick (compositor=0x61c510) at compositor.c:656
#5 0x00000000004092e1 in weston_output_repaint (output=0x7b85b0, msecs=-1046834186) at compositor.c:1059
#6 0x00000000004094b4 in weston_output_finish_frame (output=0x7b85b0, msecs=-1046834186) at compositor.c:1092
#7 0x00007ffff211e3c1 in finish_frame_handler (data=0x7b85b0) at compositor-x11.c:284
#8 0x00007ffff5eda603 in wl_event_source_timer_dispatch (source=0x79ee50, ep=<optimized out>) at event-loop.c:173
#9 0x00007ffff5edaca0 in wl_event_loop_dispatch (loop=0x61b940, timeout=<optimized out>) at event-loop.c:410
#10 0x00007ffff5ed8dbd in wl_display_run (display=0x61b8f0) at wayland-server.c:1025
#11 0x000000000040ecb1 in main (argc=1, argv=0x7fffffffdd98) at compositor.c:3225
(gdb) print shsurf
$1 = (struct shell_surface *) 0x0
Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
Rather than using a single hardcoded seat to activate new windows within
a compositor, reset the focus for all seats.
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Instead of using a uint32_t for state everywhere (except on the wire,
where that's still the call signature), use the new
wl_keyboard_key_state enum, and explicit comparisons.
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Instead of using a uint32_t for state everywhere (except on the wire,
where that's still the call signature), use the new
wl_pointer_button_state enum, and explicit comparisons.
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
This event lets the compositor inform clients of the canonical keyboard
modifier/group state. Make sure we send it at appropriate moments from
the compositor, and listen for it in clients as well.
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Here we create a new client/compositor interface in weston to allow
clients to report their x/y cursor position to the compositor. These
values are then used to center the zoom area on this point. This
is useful for everyone, especially people who are visually impaired.
Inactive surfaces doesn't set keyboard focus, so it can be used for tooltips,
toolbars and some other type of windows.
This requires protocol side changes.
Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
Fixes crash with a backtrace like this:
==2418== Invalid read of size 8
==2418== at 0x8AC5B70: unresponsive_fade_frame (shell.c:374)
==2418== by 0x409FE0: weston_output_finish_frame (compositor.c:1060)
==2418== by 0x567043B: wl_event_loop_dispatch (event-loop.c:389)
==2418== by 0x566E84C: wl_display_run (wayland-server.c:1003)
==2418== by 0x4055EB: main (compositor.c:2937)
==2418== Address 0x8aba650 is 80 bytes inside a block of size 656 free'd
==2418== at 0x4A0662E: free (vg_replace_malloc.c:366)
==2418== by 0x566D93B: wl_resource_destroy (wayland-server.c:408)
==2418== by 0x566D30E: destroy_resource (wayland-server.h:166)
==2418== by 0x566D93B: wl_resource_destroy (wayland-server.c:408)
==2418== by 0x34ECE05D63: ffi_call_unix64 (unix64.S:75)
==2418== by 0x34ECE05784: ffi_call (ffi64.c:486)
==2418== by 0x5671AAE: wl_closure_invoke (connection.c:770)
==2418== by 0x566DBAA: wl_client_connection_data (wayland-server.c:255)
==2418== by 0x5670497: wl_event_loop_dispatch (event-loop.c:410)
==2418== by 0x566E84C: wl_display_run (wayland-server.c:1003)
==2418== by 0x4055EB: main (compositor.c:2937)a
and
==2418== Invalid read of size 8
==2418== at 0x34F1E180E1: pixman_region32_union (pixman-region.c:1405)
==2418== by 0x407F66: weston_surface_damage (compositor.c:551)
==2418== by 0x409FE0: weston_output_finish_frame (compositor.c:1060)
==2418== by 0x567043B: wl_event_loop_dispatch (event-loop.c:389)
==2418== by 0x566E84C: wl_display_run (wayland-server.c:1003)
==2418== by 0x4055EB: main (compositor.c:2937)
==2418== Address 0x851dfe8 is 136 bytes inside a block of size 680 free'd
==2418== at 0x4A0662E: free (vg_replace_malloc.c:366)
==2418== by 0x566D93B: wl_resource_destroy (wayland-server.c:408)
==2418== by 0x34ECE05D63: ffi_call_unix64 (unix64.S:75)
==2418== by 0x34ECE05784: ffi_call (ffi64.c:486)
==2418== by 0x5671AAE: wl_closure_invoke (connection.c:770)
==2418== by 0x566DBAA: wl_client_connection_data (wayland-server.c:255)
==2418== by 0x5670497: wl_event_loop_dispatch (event-loop.c:410)
==2418== by 0x566E84C: wl_display_run (wayland-server.c:1003)
==2418== by 0x4055EB: main (compositor.c:2937)