blob: 230bd9c53291c8de7c9b1788ff7711d4a7cb9f49 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/shell/platform/linux/fl_key_event.h"
FlKeyEvent* fl_key_event_new_from_gdk_event(GdkEvent* event) {
g_return_val_if_fail(event != nullptr, nullptr);
GdkEventType type = gdk_event_get_event_type(event);
g_return_val_if_fail(type == GDK_KEY_PRESS || type == GDK_KEY_RELEASE,
nullptr);
FlKeyEvent* result = g_new(FlKeyEvent, 1);
guint16 keycode = 0;
gdk_event_get_keycode(event, &keycode);
guint keyval = 0;
gdk_event_get_keyval(event, &keyval);
GdkModifierType state = static_cast<GdkModifierType>(0);
gdk_event_get_state(event, &state);
result->time = gdk_event_get_time(event);
result->is_press = type == GDK_KEY_PRESS;
result->keycode = keycode;
result->keyval = keyval;
result->state = state;
result->group = event->key.group;
result->origin = event;
return result;
}
void fl_key_event_dispose(FlKeyEvent* event) {
if (event->origin != nullptr) {
gdk_event_free(event->origin);
}
g_free(event);
}
FlKeyEvent* fl_key_event_clone(const FlKeyEvent* event) {
FlKeyEvent* new_event = g_new(FlKeyEvent, 1);
*new_event = *event;
return new_event;
}