mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-25 17:52:02 +02:00
monotonic_start_time needs to be a global symbol, not local to each translation unit
This commit is contained in:
@@ -194,6 +194,7 @@ const char *action_text, int32_t timeout, GLFWDBusnotificationcreatedfun callbac
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "monotonic.h"
|
||||||
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|||||||
2
glfw/glfw3.h
vendored
2
glfw/glfw3.h
vendored
@@ -1704,7 +1704,7 @@ typedef struct GLFWgamepadstate
|
|||||||
*
|
*
|
||||||
* @ingroup init
|
* @ingroup init
|
||||||
*/
|
*/
|
||||||
GLFWAPI int glfwInit(void);
|
GLFWAPI int glfwInit(monotonic_t start_time);
|
||||||
GLFWAPI void glfwRunMainLoop(GLFWtickcallback callback, void *callback_data);
|
GLFWAPI void glfwRunMainLoop(GLFWtickcallback callback, void *callback_data);
|
||||||
GLFWAPI void glfwStopMainLoop(void);
|
GLFWAPI void glfwStopMainLoop(void);
|
||||||
GLFWAPI unsigned long long glfwAddTimer(monotonic_t interval, bool repeats, GLFWuserdatafun callback, void * callback_data, GLFWuserdatafun free_callback);
|
GLFWAPI unsigned long long glfwAddTimer(monotonic_t interval, bool repeats, GLFWuserdatafun callback, void * callback_data, GLFWuserdatafun free_callback);
|
||||||
|
|||||||
4
glfw/init.c
vendored
4
glfw/init.c
vendored
@@ -27,6 +27,7 @@
|
|||||||
// Please use C89 style variable declarations in this file because VS 2010
|
// Please use C89 style variable declarations in this file because VS 2010
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
|
#define MONOTONIC_START_MODULE
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "mappings.h"
|
#include "mappings.h"
|
||||||
|
|
||||||
@@ -214,10 +215,11 @@ _glfwDebug(const char *format, ...) {
|
|||||||
////// GLFW public API //////
|
////// GLFW public API //////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
GLFWAPI int glfwInit(void)
|
GLFWAPI int glfwInit(monotonic_t start_time)
|
||||||
{
|
{
|
||||||
if (_glfw.initialized)
|
if (_glfw.initialized)
|
||||||
return true;
|
return true;
|
||||||
|
monotonic_start_time = start_time;
|
||||||
|
|
||||||
memset(&_glfw, 0, sizeof(_glfw));
|
memset(&_glfw, 0, sizeof(_glfw));
|
||||||
_glfw.hints.init = _glfwInitHints;
|
_glfw.hints.init = _glfwInitHints;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
* Distributed under terms of the GPL3 license.
|
* Distributed under terms of the GPL3 license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define MONOTONIC_START_MODULE
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
// Needed for _CS_DARWIN_USER_CACHE_DIR
|
// Needed for _CS_DARWIN_USER_CACHE_DIR
|
||||||
#define _DARWIN_C_SOURCE
|
#define _DARWIN_C_SOURCE
|
||||||
|
|||||||
9
kitty/glfw-wrapper.h
generated
9
kitty/glfw-wrapper.h
generated
@@ -7,7 +7,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "../kitty/monotonic.h"
|
#include "monotonic.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -955,7 +955,7 @@ typedef struct GLFWkeyevent
|
|||||||
// Bit field describing which [modifier keys](@ref mods) were held down.
|
// Bit field describing which [modifier keys](@ref mods) were held down.
|
||||||
int mods;
|
int mods;
|
||||||
|
|
||||||
// UTF-8 encoded text generated by this key event or empty string.
|
// UTF-8 encoded text generated by this key event or empty string or NULL
|
||||||
const char *text;
|
const char *text;
|
||||||
|
|
||||||
// Used for Input Method events. Zero for normal key events.
|
// Used for Input Method events. Zero for normal key events.
|
||||||
@@ -1249,7 +1249,8 @@ typedef void (* GLFWscrollfun)(GLFWwindow*,double,double,int);
|
|||||||
* the "s" key will generate text "o" and GLFW_KEY_O.
|
* the "s" key will generate text "o" and GLFW_KEY_O.
|
||||||
*
|
*
|
||||||
* @param[in] window The window that received the event.
|
* @param[in] window The window that received the event.
|
||||||
* @param[in] ev TODO: blablabla
|
* @param[in] ev The key event, see GLFWkeyevent. The data in this event is only valid for
|
||||||
|
* the lifetime of the callback.
|
||||||
*
|
*
|
||||||
* @note On X11/Wayland if a modifier other than the modifiers GLFW reports
|
* @note On X11/Wayland if a modifier other than the modifiers GLFW reports
|
||||||
* (ctrl/shift/alt/super) is used, GLFW will report the shifted key rather
|
* (ctrl/shift/alt/super) is used, GLFW will report the shifted key rather
|
||||||
@@ -1476,7 +1477,7 @@ typedef void (* GLFWcocoarenderframefun)(GLFWwindow*);
|
|||||||
typedef void (*GLFWwaylandframecallbackfunc)(unsigned long long id);
|
typedef void (*GLFWwaylandframecallbackfunc)(unsigned long long id);
|
||||||
typedef void (*GLFWDBusnotificationcreatedfun)(unsigned long long, uint32_t, void*);
|
typedef void (*GLFWDBusnotificationcreatedfun)(unsigned long long, uint32_t, void*);
|
||||||
typedef void (*GLFWDBusnotificationactivatedfun)(uint32_t, const char*);
|
typedef void (*GLFWDBusnotificationactivatedfun)(uint32_t, const char*);
|
||||||
typedef int (*glfwInit_func)(void);
|
typedef int (*glfwInit_func)(monotonic_t);
|
||||||
glfwInit_func glfwInit_impl;
|
glfwInit_func glfwInit_impl;
|
||||||
#define glfwInit glfwInit_impl
|
#define glfwInit glfwInit_impl
|
||||||
|
|
||||||
|
|||||||
@@ -792,7 +792,7 @@ glfw_init(PyObject UNUSED *self, PyObject *args) {
|
|||||||
glfwDBusSetUserNotificationHandler(dbus_user_notification_activated);
|
glfwDBusSetUserNotificationHandler(dbus_user_notification_activated);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
PyObject *ans = glfwInit() ? Py_True: Py_False;
|
PyObject *ans = glfwInit(monotonic_start_time) ? Py_True: Py_False;
|
||||||
if (ans == Py_True) {
|
if (ans == Py_True) {
|
||||||
OSWindow w = {0};
|
OSWindow w = {0};
|
||||||
set_os_window_dpi(&w);
|
set_os_window_dpi(&w);
|
||||||
|
|||||||
@@ -61,7 +61,12 @@ static inline double monotonic_t_to_s_double(monotonic_t time) {
|
|||||||
return (double)time / 1000.0 / 1000.0 / 1000.0;
|
return (double)time / 1000.0 / 1000.0 / 1000.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static monotonic_t start_time = 0;
|
#ifdef MONOTONIC_START_MODULE
|
||||||
|
monotonic_t monotonic_start_time = 0;
|
||||||
|
#else
|
||||||
|
extern monotonic_t monotonic_start_time;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static inline monotonic_t monotonic_(void) {
|
static inline monotonic_t monotonic_(void) {
|
||||||
struct timespec ts = {0};
|
struct timespec ts = {0};
|
||||||
@@ -76,9 +81,9 @@ static inline monotonic_t monotonic_(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline monotonic_t monotonic(void) {
|
static inline monotonic_t monotonic(void) {
|
||||||
return monotonic_() - start_time;
|
return monotonic_() - monotonic_start_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void init_monotonic(void) {
|
static inline void init_monotonic(void) {
|
||||||
start_time = monotonic_();
|
monotonic_start_time = monotonic_();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user