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() { ...@@ -114,6 +114,10 @@ Keyboard::~Keyboard() {
helper->RemoveInputDeviceEventObserver(this); helper->RemoveInputDeviceEventObserver(this);
} }
bool Keyboard::HasDeviceConfigurationDelegate() const {
return !!device_configuration_delegate_;
}
void Keyboard::SetDeviceConfigurationDelegate( void Keyboard::SetDeviceConfigurationDelegate(
KeyboardDeviceConfigurationDelegate* delegate) { KeyboardDeviceConfigurationDelegate* delegate) {
device_configuration_delegate_ = delegate; device_configuration_delegate_ = delegate;
......
...@@ -33,6 +33,7 @@ class Keyboard : public ui::EventHandler, ...@@ -33,6 +33,7 @@ class Keyboard : public ui::EventHandler,
explicit Keyboard(KeyboardDelegate* delegate); explicit Keyboard(KeyboardDelegate* delegate);
~Keyboard() override; ~Keyboard() override;
bool HasDeviceConfigurationDelegate() const;
void SetDeviceConfigurationDelegate( void SetDeviceConfigurationDelegate(
KeyboardDeviceConfigurationDelegate* delegate); KeyboardDeviceConfigurationDelegate* delegate);
......
...@@ -3058,7 +3058,16 @@ void keyboard_configuration_get_keyboard_device_configuration( ...@@ -3058,7 +3058,16 @@ void keyboard_configuration_get_keyboard_device_configuration(
wl_resource* resource, wl_resource* resource,
uint32_t id, uint32_t id,
wl_resource* keyboard_resource) { 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( wl_resource* keyboard_device_configuration_resource = wl_resource_create(
client, &zcr_keyboard_device_configuration_v1_interface, 1, id); client, &zcr_keyboard_device_configuration_v1_interface, 1, id);
...@@ -3066,8 +3075,7 @@ void keyboard_configuration_get_keyboard_device_configuration( ...@@ -3066,8 +3075,7 @@ void keyboard_configuration_get_keyboard_device_configuration(
keyboard_device_configuration_resource, keyboard_device_configuration_resource,
&keyboard_device_configuration_implementation, &keyboard_device_configuration_implementation,
base::MakeUnique<WaylandKeyboardDeviceConfigurationDelegate>( base::MakeUnique<WaylandKeyboardDeviceConfigurationDelegate>(
keyboard_device_configuration_resource, keyboard_device_configuration_resource, keyboard));
GetUserDataAs<Keyboard>(keyboard_resource)));
} }
const struct zcr_keyboard_configuration_v1_interface const struct zcr_keyboard_configuration_v1_interface
...@@ -3127,7 +3135,7 @@ Server::Server(Display* display) ...@@ -3127,7 +3135,7 @@ Server::Server(Display* display)
wl_global_create(wl_display_.get(), &zcr_stylus_v1_interface, 1, display_, wl_global_create(wl_display_.get(), &zcr_stylus_v1_interface, 1, display_,
bind_stylus); bind_stylus);
wl_global_create(wl_display_.get(), &zcr_keyboard_configuration_v1_interface, wl_global_create(wl_display_.get(), &zcr_keyboard_configuration_v1_interface,
1, display_, bind_keyboard_configuration); 2, display_, bind_keyboard_configuration);
} }
Server::~Server() {} 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