Commit b6e3cbe5 authored by yhanada's avatar yhanada Committed by Commit bot

exo: Produce an error if get_keyboard_device_configuration is called with a...

exo: Produce an error if get_keyboard_device_configuration is called with a keyboard object that already is associated with a device configuration object.

BUG=670247

Review-Url: https://codereview.chromium.org/2567903003
Cr-Commit-Position: refs/heads/master@{#438106}
parent 1dc57917
......@@ -114,6 +114,10 @@ Keyboard::~Keyboard() {
helper->RemoveInputDeviceEventObserver(this);
}
bool Keyboard::HasDeviceConfigurationDelegate() const {
return !!device_configuration_delegate_;
}
void Keyboard::SetDeviceConfigurationDelegate(
KeyboardDeviceConfigurationDelegate* delegate) {
device_configuration_delegate_ = delegate;
......
......@@ -33,6 +33,7 @@ class Keyboard : public ui::EventHandler,
explicit Keyboard(KeyboardDelegate* delegate);
~Keyboard() override;
bool HasDeviceConfigurationDelegate() const;
void SetDeviceConfigurationDelegate(
KeyboardDeviceConfigurationDelegate* delegate);
......
......@@ -3058,7 +3058,16 @@ void keyboard_configuration_get_keyboard_device_configuration(
wl_resource* resource,
uint32_t id,
wl_resource* keyboard_resource) {
// TODO(yhanada): Produce an error if a delegate already exists.
Keyboard* keyboard = GetUserDataAs<Keyboard>(keyboard_resource);
if (keyboard->HasDeviceConfigurationDelegate()) {
wl_resource_post_error(
resource,
ZCR_KEYBOARD_CONFIGURATION_V1_ERROR_DEVICE_CONFIGURATION_EXISTS,
"keyboard has already been associated with a device configuration "
"object");
return;
}
wl_resource* keyboard_device_configuration_resource = wl_resource_create(
client, &zcr_keyboard_device_configuration_v1_interface, 1, id);
......@@ -3066,8 +3075,7 @@ void keyboard_configuration_get_keyboard_device_configuration(
keyboard_device_configuration_resource,
&keyboard_device_configuration_implementation,
base::MakeUnique<WaylandKeyboardDeviceConfigurationDelegate>(
keyboard_device_configuration_resource,
GetUserDataAs<Keyboard>(keyboard_resource)));
keyboard_device_configuration_resource, keyboard));
}
const struct zcr_keyboard_configuration_v1_interface
......@@ -3127,7 +3135,7 @@ Server::Server(Display* display)
wl_global_create(wl_display_.get(), &zcr_stylus_v1_interface, 1, display_,
bind_stylus);
wl_global_create(wl_display_.get(), &zcr_keyboard_configuration_v1_interface,
1, display_, bind_keyboard_configuration);
2, display_, bind_keyboard_configuration);
}
Server::~Server() {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment