* [Qemu-devel] [RESENT PATCH 1/2] switch keyboard led state notification to notifiers.
@ 2010-06-14 15:18 Gerd Hoffmann
2010-06-14 15:18 ` [Qemu-devel] [RESENT PATCH 2/2] vnc: sync lock modifier state on connect Gerd Hoffmann
0 siblings, 1 reply; 2+ messages in thread
From: Gerd Hoffmann @ 2010-06-14 15:18 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
console.h | 11 +++--------
input.c | 37 ++++++++++++++++---------------------
vnc.c | 13 ++++++++-----
vnc.h | 2 +-
4 files changed, 28 insertions(+), 35 deletions(-)
diff --git a/console.h b/console.h
index cac959f..171b32c 100644
--- a/console.h
+++ b/console.h
@@ -35,12 +35,6 @@ typedef struct QEMUPutMouseEntry {
QTAILQ_ENTRY(QEMUPutMouseEntry) node;
} QEMUPutMouseEntry;
-typedef struct QEMUPutLEDEntry {
- QEMUPutLEDEvent *put_led;
- void *opaque;
- QTAILQ_ENTRY(QEMUPutLEDEntry) next;
-} QEMUPutLEDEntry;
-
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
void *opaque, int absolute,
@@ -48,11 +42,12 @@ QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry);
void qemu_activate_mouse_event_handler(QEMUPutMouseEntry *entry);
-QEMUPutLEDEntry *qemu_add_led_event_handler(QEMUPutLEDEvent *func, void *opaque);
-void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry);
+void qemu_add_led_event_notifier(Notifier *notify);
+void qemu_remove_led_event_notifier(Notifier *notify);
void kbd_put_keycode(int keycode);
void kbd_put_ledstate(int ledstate);
+int kbd_get_ledstate(void);
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
/* Does the current mouse generate absolute events */
diff --git a/input.c b/input.c
index 651442d..af178d9 100644
--- a/input.c
+++ b/input.c
@@ -30,11 +30,13 @@
static QEMUPutKBDEvent *qemu_put_kbd_event;
static void *qemu_put_kbd_event_opaque;
-static QTAILQ_HEAD(, QEMUPutLEDEntry) led_handlers = QTAILQ_HEAD_INITIALIZER(led_handlers);
static QTAILQ_HEAD(, QEMUPutMouseEntry) mouse_handlers =
QTAILQ_HEAD_INITIALIZER(mouse_handlers);
static NotifierList mouse_mode_notifiers =
NOTIFIER_LIST_INITIALIZER(mouse_mode_notifiers);
+static NotifierList led_event_notifiers =
+ NOTIFIER_LIST_INITIALIZER(led_event_notifiers);
+static int ledstate;
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
{
@@ -100,25 +102,14 @@ void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
check_mode_change();
}
-QEMUPutLEDEntry *qemu_add_led_event_handler(QEMUPutLEDEvent *func,
- void *opaque)
+void qemu_add_led_event_notifier(Notifier *notify)
{
- QEMUPutLEDEntry *s;
-
- s = qemu_mallocz(sizeof(QEMUPutLEDEntry));
-
- s->put_led = func;
- s->opaque = opaque;
- QTAILQ_INSERT_TAIL(&led_handlers, s, next);
- return s;
+ notifier_list_add(&led_event_notifiers, notify);
}
-void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry)
+void qemu_remove_led_event_notifier(Notifier *notify)
{
- if (entry == NULL)
- return;
- QTAILQ_REMOVE(&led_handlers, entry, next);
- qemu_free(entry);
+ notifier_list_remove(&led_event_notifiers, notify);
}
void kbd_put_keycode(int keycode)
@@ -128,15 +119,19 @@ void kbd_put_keycode(int keycode)
}
}
-void kbd_put_ledstate(int ledstate)
+void kbd_put_ledstate(int l)
{
- QEMUPutLEDEntry *cursor;
-
- QTAILQ_FOREACH(cursor, &led_handlers, next) {
- cursor->put_led(cursor->opaque, ledstate);
+ if (ledstate != l) {
+ ledstate = l;
+ notifier_list_notify(&led_event_notifiers);
}
}
+int kbd_get_ledstate(void)
+{
+ return ledstate;
+}
+
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
{
QEMUPutMouseEntry *entry;
diff --git a/vnc.c b/vnc.c
index ed0e096..b25b6a1 100644
--- a/vnc.c
+++ b/vnc.c
@@ -988,7 +988,7 @@ static void vnc_disconnect_finish(VncState *vs)
qemu_remove_mouse_mode_change_notifier(&vs->mouse_mode_notifier);
vnc_remove_timer(vs->vd);
if (vs->vd->lock_key_sync)
- qemu_remove_led_event_handler(vs->led);
+ qemu_remove_led_event_notifier(&vs->led_notifier);
qemu_free(vs);
}
@@ -1381,9 +1381,10 @@ static void press_key(VncState *vs, int keysym)
kbd_put_keycode(keycode | SCANCODE_UP);
}
-static void kbd_leds(void *opaque, int ledstate)
+static void kbd_leds(Notifier *notifier)
{
- VncState *vs = opaque;
+ VncState *vs = container_of(notifier, VncState, led_notifier);
+ int ledstate = kbd_get_ledstate();
int caps, num;
caps = ledstate & QEMU_CAPS_LOCK_LED ? 1 : 0;
@@ -2296,8 +2297,10 @@ static void vnc_connect(VncDisplay *vd, int csock)
vnc_flush(vs);
vnc_read_when(vs, protocol_version, 12);
reset_keys(vs);
- if (vs->vd->lock_key_sync)
- vs->led = qemu_add_led_event_handler(kbd_leds, vs);
+ if (vs->vd->lock_key_sync) {
+ vs->led_notifier.notify = kbd_leds;
+ qemu_add_led_event_notifier(&vs->led_notifier);
+ }
vs->mouse_mode_notifier.notify = check_pointer_type_change;
qemu_add_mouse_mode_change_notifier(&vs->mouse_mode_notifier);
diff --git a/vnc.h b/vnc.h
index 7b64cf7..9336952 100644
--- a/vnc.h
+++ b/vnc.h
@@ -165,7 +165,7 @@ struct VncState
size_t read_handler_expect;
/* input */
uint8_t modifiers_state[256];
- QEMUPutLEDEntry *led;
+ Notifier led_notifier;
/* Encoding specific */
--
1.6.5.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [Qemu-devel] [RESENT PATCH 2/2] vnc: sync lock modifier state on connect.
2010-06-14 15:18 [Qemu-devel] [RESENT PATCH 1/2] switch keyboard led state notification to notifiers Gerd Hoffmann
@ 2010-06-14 15:18 ` Gerd Hoffmann
0 siblings, 0 replies; 2+ messages in thread
From: Gerd Hoffmann @ 2010-06-14 15:18 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
vnc.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/vnc.c b/vnc.c
index b25b6a1..039fb21 100644
--- a/vnc.c
+++ b/vnc.c
@@ -2300,6 +2300,7 @@ static void vnc_connect(VncDisplay *vd, int csock)
if (vs->vd->lock_key_sync) {
vs->led_notifier.notify = kbd_leds;
qemu_add_led_event_notifier(&vs->led_notifier);
+ kbd_leds(&vs->led_notifier);
}
vs->mouse_mode_notifier.notify = check_pointer_type_change;
--
1.6.5.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-06-14 15:18 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-14 15:18 [Qemu-devel] [RESENT PATCH 1/2] switch keyboard led state notification to notifiers Gerd Hoffmann
2010-06-14 15:18 ` [Qemu-devel] [RESENT PATCH 2/2] vnc: sync lock modifier state on connect Gerd Hoffmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).