From 78cda7aa747306721fafb255d9ed62a55c90d180 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 9 Jul 2018 21:34:06 +0530 Subject: [PATCH] Implement dispatch for the IBUS connection --- glfw/dbus_glfw.c | 13 +++++++------ glfw/dbus_glfw.h | 2 +- glfw/ibus_glfw.c | 4 ++++ glfw/ibus_glfw.h | 1 + glfw/wl_window.c | 1 + glfw/x11_window.c | 1 + 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/glfw/dbus_glfw.c b/glfw/dbus_glfw.c index 2db7ee97d..aa9622d03 100644 --- a/glfw/dbus_glfw.c +++ b/glfw/dbus_glfw.c @@ -137,8 +137,9 @@ glfw_dbus_connect_to(const char *path, const char* err_msg) { report_error(&err, err_msg); return NULL; } - dbus_error_free(&err); + dbus_connection_set_exit_on_disconnect(ans, FALSE); dbus_connection_flush(ans); + dbus_error_free(&err); if (!dbus_bus_register(ans, &err)) { report_error(&err, err_msg); return NULL; @@ -159,13 +160,13 @@ glfw_dbus_connect_to(const char *path, const char* err_msg) { return ans; } +void +glfw_dbus_dispatch(DBusConnection *conn) { + while(dbus_connection_dispatch(conn) == DBUS_DISPATCH_DATA_REMAINS); +} + void glfw_dbus_terminate(_GLFWDBUSData *dbus) { - if (dbus->session_conn) { - dbus_connection_close(dbus->session_conn); - dbus_connection_unref(dbus->session_conn); - dbus->session_conn = NULL; - } if (dbus_data) { dbus_data->eld = NULL; dbus_data = NULL; diff --git a/glfw/dbus_glfw.h b/glfw/dbus_glfw.h index f0b8da8a2..c5bce2eff 100644 --- a/glfw/dbus_glfw.h +++ b/glfw/dbus_glfw.h @@ -31,7 +31,6 @@ #include "backend_utils.h" typedef struct { - DBusConnection *session_conn; EventLoopData* eld; } _GLFWDBUSData; @@ -43,3 +42,4 @@ void glfw_dbus_close_connection(DBusConnection *conn); GLFWbool glfw_dbus_call_void_method(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, ...); GLFWbool glfw_dbus_call_method(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, ...); +void glfw_dbus_dispatch(DBusConnection *); diff --git a/glfw/ibus_glfw.c b/glfw/ibus_glfw.c index 75419daf2..d03b677b9 100644 --- a/glfw/ibus_glfw.c +++ b/glfw/ibus_glfw.c @@ -230,6 +230,10 @@ check_connection(_GLFWIBUSData *ibus) { } +void +glfw_ibus_dispatch(_GLFWIBUSData *ibus) { + if (ibus->conn) glfw_dbus_dispatch(ibus->conn); +} // }}} static void diff --git a/glfw/ibus_glfw.h b/glfw/ibus_glfw.h index 6e54d6452..669eca9a5 100644 --- a/glfw/ibus_glfw.h +++ b/glfw/ibus_glfw.h @@ -39,3 +39,4 @@ typedef struct { void glfw_connect_to_ibus(_GLFWIBUSData *ibus); void glfw_ibus_terminate(_GLFWIBUSData *ibus); void glfw_ibus_set_focused(_GLFWIBUSData *ibus, GLFWbool focused); +void glfw_ibus_dispatch(_GLFWIBUSData *ibus); diff --git a/glfw/wl_window.c b/glfw/wl_window.c index 1df9be21f..596af916a 100644 --- a/glfw/wl_window.c +++ b/glfw/wl_window.c @@ -721,6 +721,7 @@ handleEvents(double timeout) { wl_display_cancel_read(display); } + glfw_ibus_dispatch(&_glfw.wl.xkb.ibus); } // Translates a GLFW standard cursor to a theme cursor name diff --git a/glfw/x11_window.c b/glfw/x11_window.c index 9cbdd3d94..643cad407 100644 --- a/glfw/x11_window.c +++ b/glfw/x11_window.c @@ -60,6 +60,7 @@ static void handleEvents(double timeout) { int display_read_ok = pollForEvents(&_glfw.x11.eventLoopData, timeout); if (display_read_ok) _glfwDispatchX11Events(); + glfw_ibus_dispatch(&_glfw.x11.xkb.ibus); } static GLFWbool