284
284
EXPECT_FALSE(dispatcher.dispatch(*keyboard.press()));
287
TEST_F(SurfaceInputDispatcher, inconsistent_key_events_dropped)
289
auto surface = scene.add_surface();
291
EXPECT_CALL(*surface, consume(_)).Times(0);
295
dispatcher.set_focus(surface);
297
FakeKeyboard keyboard;
298
EXPECT_FALSE(dispatcher.dispatch(*keyboard.release()));
301
TEST_F(SurfaceInputDispatcher, key_state_is_consistent_per_client)
303
auto surface_1 = scene.add_surface();
304
auto surface_2 = scene.add_surface();
306
FakeKeyboard keyboard;
307
auto down_event = keyboard.press();
308
auto up_event = keyboard.release();
310
EXPECT_CALL(*surface_1, consume(mt::MirKeyboardEventMatches(ByRef(*down_event)))).Times(1);
311
EXPECT_CALL(*surface_2, consume(_)).Times(0);
315
dispatcher.set_focus(surface_1);
316
EXPECT_TRUE(dispatcher.dispatch(*down_event));
317
dispatcher.set_focus(surface_2);
318
EXPECT_FALSE(dispatcher.dispatch(*up_event));
321
TEST_F(SurfaceInputDispatcher, inconsistent_key_down_dropped)
323
auto surface = scene.add_surface();
325
FakeKeyboard keyboard;
326
auto event = keyboard.press();
329
EXPECT_CALL(*surface, consume(mt::MirKeyboardEventMatches(ByRef(*event)))).Times(1);
333
dispatcher.set_focus(surface);
334
EXPECT_TRUE(dispatcher.dispatch(*event));
335
EXPECT_FALSE(dispatcher.dispatch(*event));
336
EXPECT_FALSE(dispatcher.dispatch(*event));
339
TEST_F(SurfaceInputDispatcher, device_reset_resets_key_state_consistency)
341
auto surface = scene.add_surface();
343
auto device_id = MirInputDeviceId{1};
344
FakeKeyboard keyboard(device_id);
345
auto down_event = keyboard.press(11);
346
auto release_event = keyboard.release(11);
350
dispatcher.set_focus(surface);
351
EXPECT_TRUE(dispatcher.dispatch(*down_event));
352
EXPECT_TRUE(dispatcher.dispatch(
353
*mev::make_event(mir_input_configuration_action_device_reset, device_id, std::chrono::nanoseconds{1})));
354
EXPECT_FALSE(dispatcher.dispatch(*release_event));
357
TEST_F(SurfaceInputDispatcher, key_input_target_may_disappear_and_things_remain_quote_a_unquote_ok)
359
auto surface_2 = scene.add_surface();
360
auto surface_1 = scene.add_surface();
362
EXPECT_CALL(*surface_1, consume(_)).Times(AnyNumber());
363
EXPECT_CALL(*surface_2, consume(_)).Times(AnyNumber());
366
auto an_ev = k.press(11);
367
auto another_ev = k.press(12);
370
dispatcher.set_focus(surface_1);
371
EXPECT_TRUE(dispatcher.dispatch(*an_ev));
372
scene.remove_surface(surface_1);
373
EXPECT_FALSE(dispatcher.dispatch(*another_ev));
374
dispatcher.set_focus(surface_2);
375
EXPECT_TRUE(dispatcher.dispatch(*another_ev));
378
287
TEST_F(SurfaceInputDispatcher, pointer_motion_delivered_to_client_under_pointer)
380
289
auto surface = scene.add_surface({{0, 0}, {5, 5}});