mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-01-07 08:42:32 +00:00
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.
This commit is contained in:
parent
4e014aa13f
commit
1ecd01f586
@ -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;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user