[virt-tools-list] [PATCH 2/3] remote-viewer: add Windows support to the SIGINT handler
Francesco Giudici
fgiudici at redhat.com
Tue Nov 12 11:29:11 UTC 2019
Signed-off-by: Francesco Giudici <fgiudici at redhat.com>
---
src/virt-viewer-app.c | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
index 06e237b..6712e6a 100644
--- a/src/virt-viewer-app.c
+++ b/src/virt-viewer-app.c
@@ -1757,7 +1757,6 @@ static gboolean opt_fullscreen = FALSE;
static gboolean opt_kiosk = FALSE;
static gboolean opt_kiosk_quit = FALSE;
-#ifndef G_OS_WIN32
static int sigint_pipe[2];
static void
@@ -1773,6 +1772,19 @@ sigint_handler(int signum)
errno = savedErrno;
}
+#ifdef G_OS_WIN32
+static void
+register_sigint_handler()
+{
+ if (_pipe(sigint_pipe, 1, 0) == -1)
+ goto err;
+
+ signal(SIGINT, sigint_handler);
+
+err:
+ g_debug("Cannot register SIGINT handler\n");
+}
+#else
static void
register_sigint_handler()
{
@@ -1802,6 +1814,7 @@ register_sigint_handler()
err:
g_debug("Cannot register SIGINT handler\n");
}
+#endif
static gboolean
sigint_cb(GIOChannel *source,
@@ -1823,7 +1836,6 @@ sigint_cb(GIOChannel *source,
g_io_channel_read_chars (source, &sbuf, 1, NULL, NULL);
return TRUE;
}
-#endif
static void
title_maybe_changed(VirtViewerApp *self, GParamSpec* pspec G_GNUC_UNUSED, gpointer user_data G_GNUC_UNUSED)
@@ -1835,19 +1847,19 @@ static void
virt_viewer_app_init(VirtViewerApp *self)
{
GError *error = NULL;
-#ifndef G_OS_WIN32
GIOChannel *sigint_channel = NULL;
-#endif
self->priv = virt_viewer_app_get_instance_private(self);
gtk_window_set_default_icon_name("virt-viewer");
-#ifndef G_OS_WIN32
register_sigint_handler();
+#ifdef G_OS_WIN32
+ sigint_channel = g_io_channel_win32_new_fd(sigint_pipe[0]);
+#else
sigint_channel = g_io_channel_unix_new(sigint_pipe[0]);
- g_io_add_watch(sigint_channel, G_IO_IN, sigint_cb, self);
#endif
+ g_io_add_watch(sigint_channel, G_IO_IN, sigint_cb, self);
self->priv->displays = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref);
self->priv->config = g_key_file_new();
--
2.21.0
More information about the virt-tools-list
mailing list