GtkWidget * codecs_box_new_with_type (GmApplication *app, Ekiga::Call::StreamType type) { CodecsBox *self = CODECS_BOX (g_object_new (CODECS_BOX_TYPE, NULL)); Ekiga::ServiceCore& core = gm_application_get_core (app); self->priv = new _CodecsBoxPrivate (); self->priv->app = app; self->priv->call_core = core.get<Ekiga::CallCore> ("call-core"); self->priv->type = type; self->priv->audio_settings = boost::shared_ptr<Ekiga::Settings> (new Ekiga::Settings (AUDIO_CODECS_SCHEMA)); self->priv->video_settings = boost::shared_ptr<Ekiga::Settings> (new Ekiga::Settings (VIDEO_CODECS_SCHEMA)); self->priv->codecs_list = gtk_tree_view_new (); codecs_box_build (self); codecs_box_set_codecs (self, self->priv->call_core->get_codecs ()); return GTK_WIDGET (self); }
static void settings_changed (G_GNUC_UNUSED GSettings *settings, G_GNUC_UNUSED gchar *key, gpointer data) { std::list<std::string> list; CodecsBox *self = CODECS_BOX (data); g_return_if_fail (self); std::list<std::string> current_list = codecs_box_to_list (CODECS_BOX (self)); if (self->priv->type == Ekiga::Call::Audio) list = self->priv->audio_settings->get_string_list ("media-list"); else if (self->priv->type == Ekiga::Call::Video) list = self->priv->video_settings->get_string_list ("media-list"); Ekiga::CodecList clist (list); Ekiga::CodecList curlist (current_list); if (clist != curlist) codecs_box_set_codecs (self, list); }
static void codecs_box_set_property (GObject *obj, guint prop_id, const GValue *value, GParamSpec *spec) { CodecsBox *self = CODECS_BOX (obj); std::list<std::string> list; switch (prop_id) { case TYPE: self->priv->type = (Ekiga::Call::StreamType) g_value_get_int (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, spec); break; } if (self->priv->type == Ekiga::Call::Audio) list = self->priv->audio_settings->get_string_list ("media-list"); else if (self->priv->type == Ekiga::Call::Video) list = self->priv->video_settings->get_string_list ("media-list"); codecs_box_set_codecs (self, list); if (self->priv->type == Ekiga::Call::Audio) self->priv->handler = g_signal_connect (self->priv->audio_settings->get_g_settings (), "changed", G_CALLBACK (settings_changed), self); else self->priv->handler = g_signal_connect (self->priv->video_settings->get_g_settings (), "changed", G_CALLBACK (settings_changed), self); }