uint32_t key, uint32_t state)
{
struct ss_seat *seat = data;
+ struct timespec ts;
+ timespec_from_msec(&ts, time);
seat->key_serial = serial;
- notify_key(&seat->base, time, key,
+ notify_key(&seat->base, &ts, key,
state ? WL_KEYBOARD_KEY_STATE_PRESSED :
WL_KEYBOARD_KEY_STATE_RELEASED,
seat->keyboard_state_update);
}
static void
-share_output_binding(struct weston_keyboard *keyboard, uint32_t time, uint32_t key,
- void *data)
+share_output_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t key, void *data)
{
struct weston_output *output;
struct weston_pointer *pointer;
#include "text-input-unstable-v1-server-protocol.h"
#include "input-method-unstable-v1-server-protocol.h"
#include "shared/helpers.h"
+#include "shared/timespec-util.h"
struct text_input_manager;
struct input_method;
static void
input_method_context_grab_key(struct weston_keyboard_grab *grab,
- uint32_t time, uint32_t key, uint32_t state_w)
+ const struct timespec *time, uint32_t key,
+ uint32_t state_w)
{
struct weston_keyboard *keyboard = grab->keyboard;
struct wl_display *display;
uint32_t serial;
+ uint32_t msecs;
if (!keyboard->input_method_resource)
return;
display = wl_client_get_display(
wl_resource_get_client(keyboard->input_method_resource));
serial = wl_display_next_serial(display);
+ msecs = timespec_to_msec(time);
wl_keyboard_send_key(keyboard->input_method_resource,
- serial, time, key, state_w);
+ serial, msecs, key, state_w);
}
static void
struct weston_seat *seat = context->input_method->seat;
struct weston_keyboard *keyboard = weston_seat_get_keyboard(seat);
struct weston_keyboard_grab *default_grab = &keyboard->default_grab;
+ struct timespec ts;
- default_grab->interface->key(default_grab, time, key, state_w);
+ timespec_from_msec(&ts, time);
+
+ default_grab->interface->key(default_grab, &ts, key, state_w);
}
static void
}
static void
-screenshooter_binding(struct weston_keyboard *keyboard, uint32_t time,
- uint32_t key, void *data)
+screenshooter_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t key, void *data)
{
struct screenshooter *shooter = data;
char *screenshooter_exe;
}
static void
-recorder_binding(struct weston_keyboard *keyboard, uint32_t time,
+recorder_binding(struct weston_keyboard *keyboard, const struct timespec *time,
uint32_t key, void *data)
{
struct weston_compositor *ec = keyboard->seat->compositor;
}
static void
-exposay_key(struct weston_keyboard_grab *grab, uint32_t time, uint32_t key,
- uint32_t state_w)
+exposay_key(struct weston_keyboard_grab *grab, const struct timespec *time,
+ uint32_t key, uint32_t state_w)
{
struct weston_seat *seat = grab->keyboard->seat;
struct desktop_shell *shell =
}
static void
-maximize_binding(struct weston_keyboard *keyboard, uint32_t time,
+maximize_binding(struct weston_keyboard *keyboard, const struct timespec *time,
uint32_t button, void *data)
{
struct weston_surface *focus = keyboard->focus;
}
static void
-fullscreen_binding(struct weston_keyboard *keyboard, uint32_t time,
- uint32_t button, void *data)
+fullscreen_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t button, void *data)
{
struct weston_surface *focus = keyboard->focus;
struct weston_surface *surface;
}
static void
-zoom_key_binding(struct weston_keyboard *keyboard, uint32_t time,
+zoom_key_binding(struct weston_keyboard *keyboard, const struct timespec *time,
uint32_t key, void *data)
{
- struct timespec ts;
-
- timespec_from_msec(&ts, time);
-
- do_zoom(keyboard->seat, &ts, key, 0, 0);
+ do_zoom(keyboard->seat, time, key, 0, 0);
}
static void
-terminate_binding(struct weston_keyboard *keyboard, uint32_t time,
+terminate_binding(struct weston_keyboard *keyboard, const struct timespec *time,
uint32_t key, void *data)
{
struct weston_compositor *compositor = data;
static void
switcher_key(struct weston_keyboard_grab *grab,
- uint32_t time, uint32_t key, uint32_t state_w)
+ const struct timespec *time, uint32_t key, uint32_t state_w)
{
struct switcher *switcher = container_of(grab, struct switcher, grab);
enum wl_keyboard_key_state state = state_w;
};
static void
-switcher_binding(struct weston_keyboard *keyboard, uint32_t time,
+switcher_binding(struct weston_keyboard *keyboard, const struct timespec *time,
uint32_t key, void *data)
{
struct desktop_shell *shell = data;
}
static void
-backlight_binding(struct weston_keyboard *keyboard, uint32_t time,
+backlight_binding(struct weston_keyboard *keyboard, const struct timespec *time,
uint32_t key, void *data)
{
struct weston_compositor *compositor = data;
}
static void
-force_kill_binding(struct weston_keyboard *keyboard, uint32_t time,
- uint32_t key, void *data)
+force_kill_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t key, void *data)
{
struct weston_surface *focus_surface;
struct wl_client *client;
}
static void
-workspace_up_binding(struct weston_keyboard *keyboard, uint32_t time,
- uint32_t key, void *data)
+workspace_up_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t key, void *data)
{
struct desktop_shell *shell = data;
unsigned int new_index = shell->workspaces.current;
}
static void
-workspace_down_binding(struct weston_keyboard *keyboard, uint32_t time,
- uint32_t key, void *data)
+workspace_down_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t key, void *data)
{
struct desktop_shell *shell = data;
unsigned int new_index = shell->workspaces.current;
}
static void
-workspace_f_binding(struct weston_keyboard *keyboard, uint32_t time,
- uint32_t key, void *data)
+workspace_f_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t key, void *data)
{
struct desktop_shell *shell = data;
unsigned int new_index;
static void
workspace_move_surface_up_binding(struct weston_keyboard *keyboard,
- uint32_t time, uint32_t key, void *data)
+ const struct timespec *time, uint32_t key,
+ void *data)
{
struct desktop_shell *shell = data;
unsigned int new_index = shell->workspaces.current;
static void
workspace_move_surface_down_binding(struct weston_keyboard *keyboard,
- uint32_t time, uint32_t key, void *data)
+ const struct timespec *time, uint32_t key,
+ void *data)
{
struct desktop_shell *shell = data;
unsigned int new_index = shell->workspaces.current;
}
static void
-terminate_binding(struct weston_keyboard *keyboard, uint32_t time,
+terminate_binding(struct weston_keyboard *keyboard, const struct timespec *time,
uint32_t key, void *data)
{
struct weston_compositor *compositor = data;
static void
weston_desktop_seat_popup_grab_keyboard_key(struct weston_keyboard_grab *grab,
- uint32_t time, uint32_t key,
+ const struct timespec *time,
+ uint32_t key,
enum wl_keyboard_key_state state)
{
weston_keyboard_send_key(grab->keyboard, time, key, state);
#include "compositor.h"
#include "shared/helpers.h"
+#include "shared/timespec-util.h"
struct weston_binding {
uint32_t key;
static void
binding_key(struct weston_keyboard_grab *grab,
- uint32_t time, uint32_t key, uint32_t state_w)
+ const struct timespec *time, uint32_t key, uint32_t state_w)
{
struct binding_keyboard_grab *b =
container_of(grab, struct binding_keyboard_grab, grab);
uint32_t serial;
struct weston_keyboard *keyboard = grab->keyboard;
struct wl_display *display = keyboard->seat->compositor->wl_display;
+ uint32_t msecs;
if (key == b->key) {
if (state == WL_KEYBOARD_KEY_STATE_RELEASED) {
}
if (!wl_list_empty(&keyboard->focus_resource_list)) {
serial = wl_display_next_serial(display);
+ msecs = timespec_to_msec(time);
wl_resource_for_each(resource, &keyboard->focus_resource_list) {
wl_keyboard_send_key(resource,
serial,
- time,
+ msecs,
key,
state);
}
};
static void
-install_binding_grab(struct weston_keyboard *keyboard, uint32_t time,
- uint32_t key, struct weston_surface *focus)
+install_binding_grab(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t key,
+ struct weston_surface *focus)
{
struct binding_keyboard_grab *grab;
void
weston_compositor_run_key_binding(struct weston_compositor *compositor,
struct weston_keyboard *keyboard,
- uint32_t time, uint32_t key,
+ const struct timespec *time, uint32_t key,
enum wl_keyboard_key_state state)
{
struct weston_binding *b, *tmp;
int
weston_compositor_run_debug_binding(struct weston_compositor *compositor,
struct weston_keyboard *keyboard,
- uint32_t time, uint32_t key,
+ const struct timespec *time, uint32_t key,
enum wl_keyboard_key_state state)
{
weston_key_binding_handler_t handler;
};
static void
-debug_binding_key(struct weston_keyboard_grab *grab, uint32_t time,
+debug_binding_key(struct weston_keyboard_grab *grab, const struct timespec *time,
uint32_t key, uint32_t state)
{
struct debug_binding_grab *db = (struct debug_binding_grab *) grab;
int check_binding = 1;
int i;
struct wl_list *resource_list;
+ uint32_t msecs;
if (state == WL_KEYBOARD_KEY_STATE_RELEASED) {
/* Do not run bindings on key releases */
if (send) {
serial = wl_display_next_serial(display);
resource_list = &grab->keyboard->focus_resource_list;
+ msecs = timespec_to_msec(time);
wl_resource_for_each(resource, resource_list) {
- wl_keyboard_send_key(resource, serial, time, key, state);
+ wl_keyboard_send_key(resource, serial, msecs, key, state);
}
}
};
static void
-debug_binding(struct weston_keyboard *keyboard, uint32_t time,
+debug_binding(struct weston_keyboard *keyboard, const struct timespec *time,
uint32_t key, void *data)
{
struct debug_binding_grab *grab;
}
static void
-planes_binding(struct weston_keyboard *keyboard, uint32_t time, uint32_t key,
- void *data)
+planes_binding(struct weston_keyboard *keyboard, const struct timespec *time,
+ uint32_t key, void *data)
{
struct drm_backend *b = data;
}
static void
-recorder_binding(struct weston_keyboard *keyboard, uint32_t time, uint32_t key,
- void *data)
+recorder_binding(struct weston_keyboard *keyboard, const struct timespec *time,
+ uint32_t key, void *data)
{
struct drm_backend *b = data;
struct drm_output *output;
}
#else
static void
-recorder_binding(struct weston_keyboard *keyboard, uint32_t time, uint32_t key,
- void *data)
+recorder_binding(struct weston_keyboard *keyboard, const struct timespec *time,
+ uint32_t key, void *data)
{
weston_log("Compiled without libva support\n");
}
}
static void
-renderer_switch_binding(struct weston_keyboard *keyboard, uint32_t time,
- uint32_t key, void *data)
+renderer_switch_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t key, void *data)
{
struct drm_backend *b =
to_drm_backend(keyboard->seat->compositor);
enum wl_keyboard_key_state keyState;
RdpPeerContext *peerContext = (RdpPeerContext *)input->context;
int notify = 0;
+ struct timespec time;
if (!(peerContext->item.flags & RDP_PEER_ACTIVATED))
FREERDP_CB_RETURN(TRUE);
/*weston_log("code=%x ext=%d vk_code=%x scan_code=%x\n", code, (flags & KBD_FLAGS_EXTENDED) ? 1 : 0,
vk_code, scan_code);*/
- notify_key(peerContext->item.seat, weston_compositor_get_time(),
+ timespec_from_msec(&time, weston_compositor_get_time());
+ notify_key(peerContext->item.seat, &time,
scan_code - 8, keyState, STATE_UPDATE_AUTOMATIC);
}
uint32_t serial, uint32_t time, uint32_t key, uint32_t state)
{
struct wayland_input *input = data;
+ struct timespec ts;
+
+ timespec_from_msec(&ts, time);
input->key_serial = serial;
- notify_key(&input->base, time, key,
+ notify_key(&input->base, &ts, key,
state ? WL_KEYBOARD_KEY_STATE_PRESSED :
WL_KEYBOARD_KEY_STATE_RELEASED,
input->keyboard_state_update);
}
static void
-fullscreen_binding(struct weston_keyboard *keyboard, uint32_t time,
- uint32_t key, void *data)
+fullscreen_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t key, void *data)
{
struct wayland_backend *b = data;
struct wayland_input *input = NULL;
uint32_t i, set;
uint8_t response_type;
int count;
+ struct timespec time;
prev = NULL;
count = 0;
* and fall through and handle the new
* event below. */
update_xkb_state_from_core(b, key_release->state);
+ timespec_from_msec(&time,
+ weston_compositor_get_time());
notify_key(&b->core_seat,
- weston_compositor_get_time(),
+ &time,
key_release->detail - 8,
WL_KEYBOARD_KEY_STATE_RELEASED,
STATE_UPDATE_AUTOMATIC);
key_press = (xcb_key_press_event_t *) event;
if (!b->has_xkb)
update_xkb_state_from_core(b, key_press->state);
+ timespec_from_msec(&time, weston_compositor_get_time());
notify_key(&b->core_seat,
- weston_compositor_get_time(),
+ &time,
key_press->detail - 8,
WL_KEYBOARD_KEY_STATE_PRESSED,
b->has_xkb ? STATE_UPDATE_NONE :
break;
}
key_release = (xcb_key_press_event_t *) event;
+ timespec_from_msec(&time, weston_compositor_get_time());
notify_key(&b->core_seat,
- weston_compositor_get_time(),
+ &time,
key_release->detail - 8,
WL_KEYBOARD_KEY_STATE_RELEASED,
STATE_UPDATE_NONE);
case XCB_KEY_RELEASE:
key_release = (xcb_key_press_event_t *) prev;
update_xkb_state_from_core(b, key_release->state);
+ timespec_from_msec(&time, weston_compositor_get_time());
notify_key(&b->core_seat,
- weston_compositor_get_time(),
+ &time,
key_release->detail - 8,
WL_KEYBOARD_KEY_STATE_RELEASED,
STATE_UPDATE_AUTOMATIC);
}
static void
-timeline_key_binding_handler(struct weston_keyboard *keyboard, uint32_t time,
- uint32_t key, void *data)
+timeline_key_binding_handler(struct weston_keyboard *keyboard,
+ const struct timespec *time, uint32_t key,
+ void *data)
{
struct weston_compositor *compositor = data;
struct weston_keyboard_grab;
struct weston_keyboard_grab_interface {
- void (*key)(struct weston_keyboard_grab *grab, uint32_t time,
- uint32_t key, uint32_t state);
+ void (*key)(struct weston_keyboard_grab *grab,
+ const struct timespec *time, uint32_t key, uint32_t state);
void (*modifiers)(struct weston_keyboard_grab *grab, uint32_t serial,
uint32_t mods_depressed, uint32_t mods_latched,
uint32_t mods_locked, uint32_t group);
weston_keyboard_has_focus_resource(struct weston_keyboard *keyboard);
void
weston_keyboard_send_key(struct weston_keyboard *keyboard,
- uint32_t time, uint32_t key,
+ const struct timespec *time, uint32_t key,
enum wl_keyboard_key_state state);
void
weston_keyboard_send_modifiers(struct weston_keyboard *keyboard,
struct weston_keyboard_grab default_grab;
uint32_t grab_key;
uint32_t grab_serial;
- uint32_t grab_time;
+ struct timespec grab_time;
struct wl_array keys;
notify_pointer_frame(struct weston_seat *seat);
void
-notify_key(struct weston_seat *seat, uint32_t time, uint32_t key,
+notify_key(struct weston_seat *seat, const struct timespec *time, uint32_t key,
enum wl_keyboard_key_state state,
enum weston_key_state_update update_state);
void
struct weston_binding;
typedef void (*weston_key_binding_handler_t)(struct weston_keyboard *keyboard,
- uint32_t time, uint32_t key,
+ const struct timespec *time,
+ uint32_t key,
void *data);
struct weston_binding *
weston_compositor_add_key_binding(struct weston_compositor *compositor,
void
weston_compositor_run_key_binding(struct weston_compositor *compositor,
struct weston_keyboard *keyboard,
- uint32_t time,
+ const struct timespec *time,
uint32_t key,
enum wl_keyboard_key_state state);
struct weston_pointer_axis_event *event);
int
weston_compositor_run_debug_binding(struct weston_compositor *compositor,
- struct weston_keyboard *keyboard, uint32_t time,
+ struct weston_keyboard *keyboard,
+ const struct timespec *time,
uint32_t key,
enum wl_keyboard_key_state state);
static void
drag_grab_keyboard_key(struct weston_keyboard_grab *grab,
- uint32_t time, uint32_t key, uint32_t state)
+ const struct timespec *time, uint32_t key, uint32_t state)
{
}
}
static void
-fragment_debug_binding(struct weston_keyboard *keyboard, uint32_t time,
+fragment_debug_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time,
uint32_t key, void *data)
{
struct weston_compositor *ec = data;
}
static void
-fan_debug_repaint_binding(struct weston_keyboard *keyboard, uint32_t time,
+fan_debug_repaint_binding(struct weston_keyboard *keyboard,
+ const struct timespec *time,
uint32_t key, void *data)
{
struct weston_compositor *compositor = data;
*/
WL_EXPORT void
weston_keyboard_send_key(struct weston_keyboard *keyboard,
- uint32_t time, uint32_t key,
+ const struct timespec *time, uint32_t key,
enum wl_keyboard_key_state state)
{
struct wl_resource *resource;
struct wl_display *display = keyboard->seat->compositor->wl_display;
uint32_t serial;
struct wl_list *resource_list;
+ uint32_t msecs;
if (!weston_keyboard_has_focus_resource(keyboard))
return;
resource_list = &keyboard->focus_resource_list;
serial = wl_display_next_serial(display);
+ msecs = timespec_to_msec(time);
wl_resource_for_each(resource, resource_list)
- wl_keyboard_send_key(resource, serial, time, key, state);
+ wl_keyboard_send_key(resource, serial, msecs, key, state);
};
static void
default_grab_keyboard_key(struct weston_keyboard_grab *grab,
- uint32_t time, uint32_t key, uint32_t state)
+ const struct timespec *time, uint32_t key,
+ uint32_t state)
{
weston_keyboard_send_key(grab->keyboard, time, key, state);
}
}
WL_EXPORT void
-notify_key(struct weston_seat *seat, uint32_t time, uint32_t key,
+notify_key(struct weston_seat *seat, const struct timespec *time, uint32_t key,
enum wl_keyboard_key_state state,
enum weston_key_state_update update_state)
{
keyboard->grab_serial = wl_display_get_serial(compositor->wl_display);
if (state == WL_KEYBOARD_KEY_STATE_PRESSED) {
- keyboard->grab_time = time;
+ keyboard->grab_time = *time;
keyboard->grab_key = key;
}
}
static void
switch_vt_binding(struct weston_keyboard *keyboard,
- uint32_t time, uint32_t key, void *data)
+ const struct timespec *time, uint32_t key, void *data)
{
struct weston_compositor *compositor = data;
struct weston_launcher *launcher = compositor->launcher;
libinput_event_keyboard_get_key_state(keyboard_event);
int seat_key_count =
libinput_event_keyboard_get_seat_key_count(keyboard_event);
+ struct timespec time;
/* Ignore key events that are not seat wide state changes. */
if ((key_state == LIBINPUT_KEY_STATE_PRESSED &&
seat_key_count != 0))
return;
- notify_key(device->seat,
- libinput_event_keyboard_get_time(keyboard_event),
+ timespec_from_usec(&time,
+ libinput_event_keyboard_get_time_usec(keyboard_event));
+
+ notify_key(device->seat, &time,
libinput_event_keyboard_get_key(keyboard_event),
key_state, STATE_UPDATE_AUTOMATIC);
}
}
static void
-debug_binding(struct weston_keyboard *keyboard, uint32_t time, uint32_t key,
- void *data)
+debug_binding(struct weston_keyboard *keyboard, const struct timespec *time,
+ uint32_t key, void *data)
{
struct weston_compositor *ec = data;
struct pixman_renderer *pr = (struct pixman_renderer *) ec->renderer;
}
static void
-trigger_binding(struct weston_keyboard *keyboard, uint32_t time, uint32_t key,
- void *data)
+trigger_binding(struct weston_keyboard *keyboard, const struct timespec *time,
+ uint32_t key, void *data)
{
const char *prefix = "surfaceshot-";
const char *suffix = ".pam";
{
struct weston_test *test = wl_resource_get_user_data(resource);
struct weston_seat *seat = get_seat(test);
+ struct timespec time;
+
+ timespec_from_msec(&time, 100);
- notify_key(seat, 100, key, state, STATE_UPDATE_AUTOMATIC);
+ notify_key(seat, &time, key, state, STATE_UPDATE_AUTOMATIC);
}
static void