18
18
* Alexandros Frantzis <alexandros.frantzis@canonical.com>
21
#define MIR_INCLUDE_DEPRECATED_EVENT_HEADER
21
#include "mir/events/event_private.h"
23
22
#include "mir/shell/shell_wrapper.h"
24
23
#include "mir/scene/surface_creation_parameters.h"
25
24
#include "mir/scene/surface.h"
91
90
surface = mir_surface_create_sync(spec);
92
91
mir_surface_spec_release(spec);
94
MirEventDelegate const event_delegate { handle_input, this };
95
mir_surface_set_event_handler(surface, &event_delegate);
96
mir_surface_swap_buffers_sync(surface);
93
mir_surface_set_event_handler(surface, handle_input, this);
94
mir_buffer_stream_swap_buffers_sync(
95
mir_surface_get_buffer_stream(surface));
98
97
wait_for_surface_to_become_focused_and_exposed();
623
622
session->default_surface()->consume(key_event);
626
TEST_F(TestClientInput, clients_receive_keymap_change_events)
628
using namespace testing;
630
mt::WaitCondition first_event_received;
631
InputClient client{new_connection(), test_client_name_1};
633
xkb_rule_names names;
634
names.rules = "evdev";
635
names.model = "pc105";
636
names.layout = "dvorak";
641
EXPECT_CALL(client.handler, handle_input(
642
mt::KeymapEventWithRules(names)))
643
.Times(1).WillOnce(mt::WakeUp(&client.all_events_received));
647
server_config().the_session_container()->for_each(
648
[names] (std::shared_ptr<ms::Session> const& session) -> void
650
session->default_surface()->set_keymap(names);
655
TEST_F(TestClientInput, keymap_changes_change_keycode_received)
657
using namespace testing;
659
xkb_rule_names names;
660
names.rules = "evdev";
661
names.model = "pc105";
663
names.variant = "dvorak";
666
mt::WaitCondition first_event_received,
667
client_sees_keymap_change;
668
InputClient client{new_connection(), test_client_name_1};
671
EXPECT_CALL(client.handler, handle_input(AllOf(
672
mt::KeyDownEvent(), mt::KeyOfSymbol(XKB_KEY_n)))).Times(1);
673
EXPECT_CALL(client.handler, handle_input(mt::KeyUpEvent()))
674
.Times(1).WillOnce(mt::WakeUp(&first_event_received));
675
EXPECT_CALL(client.handler, handle_input(
676
mt::KeymapEventWithRules(names)))
677
.Times(1).WillOnce(mt::WakeUp(&client_sees_keymap_change));
678
EXPECT_CALL(client.handler, handle_input(AllOf(
679
mt::KeyDownEvent(), mt::KeyOfSymbol(XKB_KEY_b)))).Times(1);
680
EXPECT_CALL(client.handler, handle_input(mt::KeyUpEvent()))
681
.Times(1).WillOnce(mt::WakeUp(&client.all_events_received));
685
fake_event_hub()->synthesize_event(
686
mis::a_key_down_event().of_scancode(KEY_N));
687
fake_event_hub()->synthesize_event(
688
mis::a_key_up_event().of_scancode(KEY_N));
690
first_event_received.wait_for_at_most_seconds(60);
692
server_config().the_session_container()->for_each(
693
[&names] (std::shared_ptr<ms::Session> const& session) -> void
695
session->default_surface()->set_keymap(names);
698
client_sees_keymap_change.wait_for_at_most_seconds(60);
700
fake_event_hub()->synthesize_event(
701
mis::a_key_down_event().of_scancode(KEY_N));
702
fake_event_hub()->synthesize_event(
703
mis::a_key_up_event().of_scancode(KEY_N));