summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/inputs-channel.c14
-rw-r--r--server/inputs-channel.h1
-rw-r--r--server/reds.c1
3 files changed, 13 insertions, 3 deletions
diff --git a/server/inputs-channel.c b/server/inputs-channel.c
index 7667ad74..bd019c2a 100644
--- a/server/inputs-channel.c
+++ b/server/inputs-channel.c
@@ -60,11 +60,19 @@ struct SpiceKbdState {
/* track key press state */
bool key[0x7f];
bool key_ext[0x7f];
+ RedsState *reds;
};
-static SpiceKbdState* spice_kbd_state_new(void)
+static SpiceKbdState* spice_kbd_state_new(RedsState *reds)
+{
+ SpiceKbdState *st = spice_new0(SpiceKbdState, 1);
+ st->reds = reds;
+ return st;
+}
+
+RedsState* spice_kbd_state_get_server(SpiceKbdState *dev)
{
- return spice_new0(SpiceKbdState, 1);
+ return dev->reds;
}
struct SpiceMouseState {
@@ -670,7 +678,7 @@ int inputs_channel_set_keyboard(InputsChannel *inputs, SpiceKbdInstance *keyboar
return -1;
}
inputs->keyboard = keyboard;
- inputs->keyboard->st = spice_kbd_state_new();
+ inputs->keyboard->st = spice_kbd_state_new(reds);
return 0;
}
diff --git a/server/inputs-channel.h b/server/inputs-channel.h
index caa108e8..92b4473e 100644
--- a/server/inputs-channel.h
+++ b/server/inputs-channel.h
@@ -41,5 +41,6 @@ int inputs_channel_has_tablet(InputsChannel *inputs);
void inputs_channel_detach_tablet(InputsChannel *inputs, SpiceTabletInstance *tablet);
void spice_tablet_state_set_server(SpiceTabletState *dev, void *server);
void* spice_tablet_state_get_server(SpiceTabletState *dev);
+RedsState* spice_kbd_state_get_server(SpiceKbdState *dev);
#endif
diff --git a/server/reds.c b/server/reds.c
index 9d91cee7..7bf4e3b4 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -3653,6 +3653,7 @@ SPICE_GNUC_VISIBLE int spice_server_add_renderer(SpiceServer *s, const char *nam
SPICE_GNUC_VISIBLE int spice_server_kbd_leds(SpiceKbdInstance *sin, int leds)
{
+ RedsState *reds = spice_kbd_state_get_server(sin->st);
inputs_channel_on_keyboard_leds_change(reds->inputs_channel, leds);
return 0;
}