Compare commits
2 Commits
pull-chard
...
pull-input
Author | SHA1 | Date | |
---|---|---|---|
|
d58b912271 | ||
|
7f5e07d9b3 |
17
qemu-char.c
17
qemu-char.c
@@ -213,7 +213,7 @@ void qemu_chr_add_handlers(CharDriverState *s,
|
|||||||
s->chr_read = fd_read;
|
s->chr_read = fd_read;
|
||||||
s->chr_event = fd_event;
|
s->chr_event = fd_event;
|
||||||
s->handler_opaque = opaque;
|
s->handler_opaque = opaque;
|
||||||
if (fe_open && s->chr_update_read_handler)
|
if (s->chr_update_read_handler)
|
||||||
s->chr_update_read_handler(s);
|
s->chr_update_read_handler(s);
|
||||||
|
|
||||||
if (!s->explicit_fe_open) {
|
if (!s->explicit_fe_open) {
|
||||||
@@ -1136,14 +1136,13 @@ static void pty_chr_state(CharDriverState *chr, int connected)
|
|||||||
if (!s->connected) {
|
if (!s->connected) {
|
||||||
s->connected = 1;
|
s->connected = 1;
|
||||||
qemu_chr_be_generic_open(chr);
|
qemu_chr_be_generic_open(chr);
|
||||||
}
|
|
||||||
if (!chr->fd_in_tag) {
|
|
||||||
chr->fd_in_tag = io_add_watch_poll(s->fd, pty_chr_read_poll,
|
chr->fd_in_tag = io_add_watch_poll(s->fd, pty_chr_read_poll,
|
||||||
pty_chr_read, chr);
|
pty_chr_read, chr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void pty_chr_close(struct CharDriverState *chr)
|
static void pty_chr_close(struct CharDriverState *chr)
|
||||||
{
|
{
|
||||||
PtyCharDriver *s = chr->opaque;
|
PtyCharDriver *s = chr->opaque;
|
||||||
@@ -2510,17 +2509,6 @@ static void tcp_chr_connect(void *opaque)
|
|||||||
qemu_chr_be_generic_open(chr);
|
qemu_chr_be_generic_open(chr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tcp_chr_update_read_handler(CharDriverState *chr)
|
|
||||||
{
|
|
||||||
TCPCharDriver *s = chr->opaque;
|
|
||||||
|
|
||||||
remove_fd_in_watch(chr);
|
|
||||||
if (s->chan) {
|
|
||||||
chr->fd_in_tag = io_add_watch_poll(s->chan, tcp_chr_read_poll,
|
|
||||||
tcp_chr_read, chr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
|
#define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
|
||||||
static void tcp_chr_telnet_init(int fd)
|
static void tcp_chr_telnet_init(int fd)
|
||||||
{
|
{
|
||||||
@@ -2676,7 +2664,6 @@ static CharDriverState *qemu_chr_open_socket_fd(int fd, bool do_nodelay,
|
|||||||
chr->get_msgfd = tcp_get_msgfd;
|
chr->get_msgfd = tcp_get_msgfd;
|
||||||
chr->chr_add_client = tcp_chr_add_client;
|
chr->chr_add_client = tcp_chr_add_client;
|
||||||
chr->chr_add_watch = tcp_chr_add_watch;
|
chr->chr_add_watch = tcp_chr_add_watch;
|
||||||
chr->chr_update_read_handler = tcp_chr_update_read_handler;
|
|
||||||
/* be isn't opened until we get a connection */
|
/* be isn't opened until we get a connection */
|
||||||
chr->explicit_be_open = true;
|
chr->explicit_be_open = true;
|
||||||
|
|
||||||
|
23
ui/gtk.c
23
ui/gtk.c
@@ -683,6 +683,27 @@ static gboolean gd_button_event(GtkWidget *widget, GdkEventButton *button,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean gd_scroll_event(GtkWidget *widget, GdkEventScroll *scroll,
|
||||||
|
void *opaque)
|
||||||
|
{
|
||||||
|
GtkDisplayState *s = opaque;
|
||||||
|
InputButton btn;
|
||||||
|
|
||||||
|
if (scroll->direction == GDK_SCROLL_UP) {
|
||||||
|
btn = INPUT_BUTTON_WHEEL_UP;
|
||||||
|
} else if (scroll->direction == GDK_SCROLL_DOWN) {
|
||||||
|
btn = INPUT_BUTTON_WHEEL_DOWN;
|
||||||
|
} else {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
qemu_input_queue_btn(s->dcl.con, btn, true);
|
||||||
|
qemu_input_event_sync();
|
||||||
|
qemu_input_queue_btn(s->dcl.con, btn, false);
|
||||||
|
qemu_input_event_sync();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
|
static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
|
||||||
{
|
{
|
||||||
GtkDisplayState *s = opaque;
|
GtkDisplayState *s = opaque;
|
||||||
@@ -1229,6 +1250,8 @@ static void gd_connect_signals(GtkDisplayState *s)
|
|||||||
G_CALLBACK(gd_button_event), s);
|
G_CALLBACK(gd_button_event), s);
|
||||||
g_signal_connect(s->drawing_area, "button-release-event",
|
g_signal_connect(s->drawing_area, "button-release-event",
|
||||||
G_CALLBACK(gd_button_event), s);
|
G_CALLBACK(gd_button_event), s);
|
||||||
|
g_signal_connect(s->drawing_area, "scroll-event",
|
||||||
|
G_CALLBACK(gd_scroll_event), s);
|
||||||
g_signal_connect(s->drawing_area, "key-press-event",
|
g_signal_connect(s->drawing_area, "key-press-event",
|
||||||
G_CALLBACK(gd_key_event), s);
|
G_CALLBACK(gd_key_event), s);
|
||||||
g_signal_connect(s->drawing_area, "key-release-event",
|
g_signal_connect(s->drawing_area, "key-release-event",
|
||||||
|
@@ -333,6 +333,7 @@ QEMUPutKbdEntry *qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
|
|||||||
entry->opaque = opaque;
|
entry->opaque = opaque;
|
||||||
entry->s = qemu_input_handler_register((DeviceState *)entry,
|
entry->s = qemu_input_handler_register((DeviceState *)entry,
|
||||||
&legacy_kbd_handler);
|
&legacy_kbd_handler);
|
||||||
|
qemu_input_handler_activate(entry->s);
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user