struct wl_client *client;
unsigned deathcount;
- uint32_t deathstamp;
+ struct timespec deathstamp;
} input_method;
struct wl_listener client_listener;
static void
respawn_input_method_process(struct text_backend *text_backend)
{
- uint32_t time;
+ struct timespec time;
+ int64_t tdiff;
/* if input_method dies more than 5 times in 10 seconds, give up */
- time = weston_compositor_get_time();
- if (time - text_backend->input_method.deathstamp > 10000) {
+ weston_compositor_get_time(&time);
+ tdiff = timespec_sub_to_msec(&time,
+ &text_backend->input_method.deathstamp);
+ if (tdiff > 10000) {
text_backend->input_method.deathstamp = time;
text_backend->input_method.deathcount = 0;
}
static void
respawn_desktop_shell_process(struct desktop_shell *shell)
{
- uint32_t time;
+ struct timespec time;
/* if desktop-shell dies more than 5 times in 30 seconds, give up */
- time = weston_compositor_get_time();
- if (time - shell->child.deathstamp > 30000) {
+ weston_compositor_get_time(&time);
+ if (timespec_sub_to_msec(&time, &shell->child.deathstamp) > 30000) {
shell->child.deathstamp = time;
shell->child.deathcount = 0;
}
shell, bind_desktop_shell) == NULL)
return -1;
- shell->child.deathstamp = weston_compositor_get_time();
+ weston_compositor_get_time(&shell->child.deathstamp);
shell->panel_position = WESTON_DESKTOP_SHELL_PANEL_POSITION_TOP;
struct wl_listener client_destroy_listener;
unsigned deathcount;
- uint32_t deathstamp;
+ struct timespec deathstamp;
} child;
bool locked;
if (flags & PTR_FLAGS_MOVE) {
output = peerContext->rdpBackend->output;
if (x < output->base.width && y < output->base.height) {
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_motion_absolute(peerContext->item.seat, &time,
x, y);
need_frame = true;
button = BTN_MIDDLE;
if (button) {
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_button(peerContext->item.seat, &time, button,
(flags & PTR_FLAGS_DOWN) ? WL_POINTER_BUTTON_STATE_PRESSED : WL_POINTER_BUTTON_STATE_RELEASED
);
weston_event.discrete = (int)value;
weston_event.has_discrete = true;
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_axis(peerContext->item.seat, &time, &weston_event);
need_frame = true;
output = peerContext->rdpBackend->output;
if (x < output->base.width && y < output->base.height) {
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_motion_absolute(peerContext->item.seat, &time, x, y);
}
/*weston_log("code=%x ext=%d vk_code=%x scan_code=%x\n", code, (flags & KBD_FLAGS_EXTENDED) ? 1 : 0,
vk_code, scan_code);*/
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_key(peerContext->item.seat, &time,
scan_code - 8, keyState, STATE_UPDATE_AUTOMATIC);
}
weston_event.has_discrete = true;
weston_event.axis =
WL_POINTER_AXIS_VERTICAL_SCROLL;
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_axis(&b->core_seat, &time, &weston_event);
notify_pointer_frame(&b->core_seat);
}
weston_event.has_discrete = true;
weston_event.axis =
WL_POINTER_AXIS_VERTICAL_SCROLL;
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_axis(&b->core_seat, &time, &weston_event);
notify_pointer_frame(&b->core_seat);
}
weston_event.has_discrete = true;
weston_event.axis =
WL_POINTER_AXIS_HORIZONTAL_SCROLL;
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_axis(&b->core_seat, &time, &weston_event);
notify_pointer_frame(&b->core_seat);
}
weston_event.has_discrete = true;
weston_event.axis =
WL_POINTER_AXIS_HORIZONTAL_SCROLL;
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_axis(&b->core_seat, &time, &weston_event);
notify_pointer_frame(&b->core_seat);
}
break;
}
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_button(&b->core_seat, &time, button,
is_button_pressed ? WL_POINTER_BUTTON_STATE_PRESSED :
.dy = y - b->prev_y
};
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_motion(&b->core_seat, &time, &motion_event);
notify_pointer_frame(&b->core_seat);
* 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());
+ weston_compositor_get_time(&time);
notify_key(&b->core_seat,
&time,
key_release->detail - 8,
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());
+ weston_compositor_get_time(&time);
notify_key(&b->core_seat,
&time,
key_press->detail - 8,
break;
}
key_release = (xcb_key_press_event_t *) event;
- timespec_from_msec(&time, weston_compositor_get_time());
+ weston_compositor_get_time(&time);
notify_key(&b->core_seat,
&time,
key_release->detail - 8,
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());
+ weston_compositor_get_time(&time);
notify_key(&b->core_seat,
&time,
key_release->detail - 8,
surface_set_size(surface, width, height);
}
-WL_EXPORT uint32_t
-weston_compositor_get_time(void)
+WL_EXPORT void
+weston_compositor_get_time(struct timespec *time)
{
- struct timeval tv;
-
- gettimeofday(&tv, NULL);
-
- return tv.tv_sec * 1000 + tv.tv_usec / 1000;
+ clock_gettime(CLOCK_REALTIME, time);
}
WL_EXPORT struct weston_view *
weston_buffer_reference(struct weston_buffer_reference *ref,
struct weston_buffer *buffer);
-uint32_t
-weston_compositor_get_time(void);
+void
+weston_compositor_get_time(struct timespec *time);
void
weston_compositor_destroy(struct weston_compositor *ec);