From 6e14b6bc99a3285d1fdc89c077972f0cab9bfceb Mon Sep 17 00:00:00 2001 From: Frediano Ziglio Date: Tue, 3 Mar 2020 11:04:05 +0000 Subject: [PATCH] Reimplement video-codes update with no GObject signals This is in preparation to remove GObjects, as signals require them. Signed-off-by: Frediano Ziglio --- server/dcc.cpp | 9 +-------- server/dcc.h | 1 + server/display-channel.cpp | 7 ++++++- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/server/dcc.cpp b/server/dcc.cpp index a825cf2d..d9ac0047 100644 --- a/server/dcc.cpp +++ b/server/dcc.cpp @@ -38,7 +38,6 @@ enum PROP_ZLIB_GLZ_STATE }; -static void on_display_video_codecs_update(GObject *gobject, GParamSpec *pspec, gpointer user_data); static bool dcc_config_socket(RedChannelClient *rcc); static void dcc_on_disconnect(RedChannelClient *rcc); @@ -102,9 +101,6 @@ display_channel_client_constructed(GObject *object) dcc_init_stream_agents(self); image_encoders_init(&self->priv->encoders, &DCC_TO_DC(self)->priv->encoder_shared_data); - - g_signal_connect(DCC_TO_DC(self), "notify::video-codecs", - G_CALLBACK(on_display_video_codecs_update), self); } static void @@ -112,7 +108,6 @@ display_channel_client_finalize(GObject *object) { DisplayChannelClient *self = DISPLAY_CHANNEL_CLIENT(object); - g_signal_handlers_disconnect_by_func(DCC_TO_DC(self), (void*) on_display_video_codecs_update, self); g_clear_pointer(&self->priv->preferred_video_codecs, g_array_unref); g_clear_pointer(&self->priv->client_preferred_video_codecs, g_array_unref); g_free(self->priv); @@ -1136,10 +1131,8 @@ static void dcc_update_preferred_video_codecs(DisplayChannelClient *dcc) g_free(codecs_str); } -static void on_display_video_codecs_update(GObject *gobject, GParamSpec *pspec, gpointer user_data) +void dcc_video_codecs_update(DisplayChannelClient *dcc) { - DisplayChannelClient *dcc = DISPLAY_CHANNEL_CLIENT(user_data); - /* Only worry about video-codecs update if client has sent * SPICE_MSGC_DISPLAY_PREFERRED_VIDEO_CODEC_TYPE */ if (dcc->priv->client_preferred_video_codecs == NULL) { diff --git a/server/dcc.h b/server/dcc.h index a6bba326..740829b1 100644 --- a/server/dcc.h +++ b/server/dcc.h @@ -196,6 +196,7 @@ uint64_t dcc_get_max_stream_bit_rate(DisplayChannelClient *dcc); void dcc_set_max_stream_bit_rate(DisplayChannelClient *dcc, uint64_t rate); gboolean dcc_is_low_bandwidth(DisplayChannelClient *dcc); GArray *dcc_get_preferred_video_codecs_for_encoding(DisplayChannelClient *dcc); +void dcc_video_codecs_update(DisplayChannelClient *dcc); G_END_DECLS diff --git a/server/display-channel.cpp b/server/display-channel.cpp index 8d43de8a..339a1a39 100644 --- a/server/display-channel.cpp +++ b/server/display-channel.cpp @@ -253,7 +253,12 @@ void display_channel_set_video_codecs(DisplayChannel *display, GArray *video_cod g_clear_pointer(&display->priv->video_codecs, g_array_unref); display->priv->video_codecs = g_array_ref(video_codecs); - g_object_notify(G_OBJECT(display), "video-codecs"); + + DisplayChannelClient *dcc; + + FOREACH_DCC(display, dcc) { + dcc_video_codecs_update(dcc); + } video_stream_detach_and_stop(display); }