diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2010-03-09 14:20:36 +0100 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-03-09 14:20:36 +0100 |
commit | 1ecd01f58693d464dd49c5f7a9b36c2768b2c876 (patch) | |
tree | cf4ae59205b467ac86a4c8ac2a1677ecc492b638 /server | |
parent | 4e014aa13f93c96c37765b73e18fff5da8637847 (diff) | |
download | spice-1ecd01f58693d464dd49c5f7a9b36c2768b2c876.tar.gz spice-1ecd01f58693d464dd49c5f7a9b36c2768b2c876.tar.xz spice-1ecd01f58693d464dd49c5f7a9b36c2768b2c876.zip |
new libspice api: zap function pointer indirection.
Make register_*_notifier calls optional, long term they should go away
entriely. Add direct library calls as replacement.
Diffstat (limited to 'server')
-rw-r--r-- | server/reds.c | 45 | ||||
-rw-r--r-- | server/spice.h | 4 |
2 files changed, 40 insertions, 9 deletions
diff --git a/server/reds.c b/server/reds.c index 0ff21d40..121fe050 100644 --- a/server/reds.c +++ b/server/reds.c @@ -2616,7 +2616,7 @@ static void inputs_link(Channel *channel, RedsStreamContext *peer, int migration } } -static void reds_send_keyborad_modifiers(uint8_t modifiers) +static void reds_send_keyboard_modifiers(uint8_t modifiers) { Channel *channel = reds_find_channel(SPICE_CHANNEL_INPUTS, 0); InputsState *state; @@ -2642,9 +2642,9 @@ static void reds_send_keyborad_modifiers(uint8_t modifiers) } } -static void reds_on_keyborad_leads_change(void *opaque, uint8_t leds) +static void reds_on_keyboard_leds_change(void *opaque, uint8_t leds) { - reds_send_keyborad_modifiers(leds); + reds_send_keyboard_modifiers(leds); } static void openssl_init(RedLinkInfo *link) @@ -4893,7 +4893,7 @@ static void migrate_timout(void *opaque) static void key_modifiers_sender(void *opaque) { - reds_send_keyborad_modifiers(keyboard ? keyboard->get_leds(keyboard) : 0); + reds_send_keyboard_modifiers(keyboard ? keyboard->get_leds(keyboard) : 0); } uint32_t reds_get_mm_time() @@ -5127,8 +5127,10 @@ static void interface_change_notifier(void *opaque, VDInterface *interface, return; } keyboard = (KeyboardInterface *)interface; - if (!keyboard->register_leds_notifier(keyboard, reds_on_keyborad_leads_change, NULL)) { - red_error("register leds notifier failed"); + if (keyboard->register_leds_notifier) { + if (!keyboard->register_leds_notifier(keyboard, reds_on_keyboard_leds_change, NULL)) { + red_error("register leds notifier failed"); + } } } else if (strcmp(interface->type, VD_INTERFACE_MOUSE) == 0) { red_printf("VD_INTERFACE_MOUSE"); @@ -5421,10 +5423,14 @@ static void do_spice_init(CoreInterface *core_interface) red_error("key modifiers timer create failed"); } - while ((interface = core->next(core, interface))) { - interface_change_notifier(&reds, interface, VD_INTERFACE_ADDING); + if (core->next) { + while ((interface = core->next(core, interface))) { + interface_change_notifier(&reds, interface, VD_INTERFACE_ADDING); + } + } + if (core->register_change_notifiers) { + core->register_change_notifiers(core, &reds, interface_change_notifier); } - core->register_change_notifiers(core, &reds, interface_change_notifier); #ifdef RED_STATISTICS int shm_name_len = strlen(SPICE_STAT_SHM_NAME) + 20; @@ -5553,3 +5559,24 @@ int spice_server_set_ticket(SpiceServer *s, const char *passwd, int lifetime, } return 0; } + +int spice_server_add_interface(SpiceServer *s, VDInterface *interface) +{ + ASSERT(reds == s); + interface_change_notifier(NULL, interface, VD_INTERFACE_ADDING); + return 0; +} + +int spice_server_remove_interface(SpiceServer *s, VDInterface *interface) +{ + ASSERT(reds == s); + interface_change_notifier(NULL, interface, VD_INTERFACE_REMOVING); + return 0; +} + +int spice_server_kbd_leds(SpiceServer *s, KeyboardInterface *kbd, int leds) +{ + ASSERT(reds == s); + reds_on_keyboard_leds_change(NULL, leds); + return 0; +} diff --git a/server/spice.h b/server/spice.h index b8a476e1..c72b3059 100644 --- a/server/spice.h +++ b/server/spice.h @@ -37,4 +37,8 @@ int spice_server_set_noauth(SpiceServer *s); int spice_server_set_ticket(SpiceServer *s, const char *passwd, int lifetime, int fail_if_connected, int disconnect_if_connected); +int spice_server_add_interface(SpiceServer *s, VDInterface *interface); +int spice_server_remove_interface(SpiceServer *s, VDInterface *interface); +int spice_server_kbd_leds(SpiceServer *s, KeyboardInterface *kbd, int leds); + #endif |