forked from mirrors/linphone-iphone
add call recording feature to conference
fix broken gtk conference interface.
This commit is contained in:
parent
1136049cf0
commit
08eb7e6fbe
13 changed files with 523 additions and 860 deletions
|
|
@ -55,22 +55,38 @@ static void remove_local_endpoint(LinphoneConference *ctx){
|
|||
}
|
||||
}
|
||||
|
||||
static int linphone_conference_get_size(LinphoneConference *conf){
|
||||
if (conf->conf == NULL) {
|
||||
return 0;
|
||||
}
|
||||
return ms_audio_conference_get_size(conf->conf) - (conf->record_endpoint ? 1 : 0);
|
||||
}
|
||||
|
||||
static int remote_participants_count(LinphoneConference *ctx) {
|
||||
if (!ctx->conf || ms_audio_conference_get_size(ctx->conf)==0) return 0;
|
||||
if (!ctx->local_participant) return ms_audio_conference_get_size(ctx->conf);
|
||||
return ms_audio_conference_get_size(ctx->conf) -1;
|
||||
int count=linphone_conference_get_size(ctx);
|
||||
if (count==0) return 0;
|
||||
if (!ctx->local_participant) return count;
|
||||
return count -1;
|
||||
}
|
||||
|
||||
void linphone_core_conference_check_uninit(LinphoneCore *lc){
|
||||
LinphoneConference *ctx=&lc->conf_ctx;
|
||||
if (ctx->conf){
|
||||
ms_message("conference_check_uninit(): nmembers=%i",ms_audio_conference_get_size(ctx->conf));
|
||||
if (remote_participants_count(ctx)==1){
|
||||
int remote_count=remote_participants_count(ctx);
|
||||
ms_message("conference_check_uninit(): size=%i",linphone_conference_get_size(ctx));
|
||||
if (remote_count==1){
|
||||
convert_conference_to_call(lc);
|
||||
}
|
||||
if (ms_audio_conference_get_size(ctx->conf)==1 && ctx->local_participant!=NULL){
|
||||
remove_local_endpoint(ctx);
|
||||
if (remote_count==0){
|
||||
if (ctx->local_participant!=NULL)
|
||||
remove_local_endpoint(ctx);
|
||||
if (ctx->record_endpoint){
|
||||
ms_audio_conference_remove_member(ctx->conf,ctx->record_endpoint);
|
||||
ms_audio_endpoint_destroy(ctx->record_endpoint);
|
||||
ctx->record_endpoint=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (ms_audio_conference_get_size(ctx->conf)==0){
|
||||
ms_audio_conference_destroy(ctx->conf);
|
||||
ctx->conf=NULL;
|
||||
|
|
@ -381,10 +397,37 @@ int linphone_core_terminate_conference(LinphoneCore *lc) {
|
|||
* @returns the number of participants to the conference
|
||||
**/
|
||||
int linphone_core_get_conference_size(LinphoneCore *lc) {
|
||||
if (lc->conf_ctx.conf == NULL) {
|
||||
return 0;
|
||||
LinphoneConference *conf=&lc->conf_ctx;
|
||||
return linphone_conference_get_size(conf);
|
||||
}
|
||||
|
||||
|
||||
int linphone_core_start_conference_recording(LinphoneCore *lc, const char *path){
|
||||
LinphoneConference *conf=&lc->conf_ctx;
|
||||
if (conf->conf == NULL) {
|
||||
ms_warning("linphone_core_start_conference_recording(): no conference now.");
|
||||
return -1;
|
||||
}
|
||||
return ms_audio_conference_get_size(lc->conf_ctx.conf);
|
||||
if (conf->record_endpoint==NULL){
|
||||
conf->record_endpoint=ms_audio_endpoint_new_recorder();
|
||||
ms_audio_conference_add_member(conf->conf,conf->record_endpoint);
|
||||
}
|
||||
ms_audio_recorder_endpoint_start(conf->record_endpoint,path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int linphone_core_stop_conference_recording(LinphoneCore *lc){
|
||||
LinphoneConference *conf=&lc->conf_ctx;
|
||||
if (conf->conf == NULL) {
|
||||
ms_warning("linphone_core_stop_conference_recording(): no conference now.");
|
||||
return -1;
|
||||
}
|
||||
if (conf->record_endpoint==NULL){
|
||||
ms_warning("linphone_core_stop_conference_recording(): no record active.");
|
||||
return -1;
|
||||
}
|
||||
ms_audio_recorder_endpoint_stop(conf->record_endpoint);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -92,12 +92,7 @@ int lc_callback_obj_invoke(LCCallbackObj *obj, LinphoneCore *lc){
|
|||
|
||||
/*prevent a gcc bug with %c*/
|
||||
static size_t my_strftime(char *s, size_t max, const char *fmt, const struct tm *tm){
|
||||
#if !defined(_WIN32_WCE)
|
||||
return strftime(s, max, fmt, tm);
|
||||
#else
|
||||
return 0;
|
||||
/*FIXME*/
|
||||
#endif /*_WIN32_WCE*/
|
||||
}
|
||||
|
||||
static void set_call_log_date(LinphoneCallLog *cl, time_t start_time){
|
||||
|
|
@ -120,7 +115,7 @@ LinphoneCallLog * linphone_call_log_new(LinphoneCall *call, LinphoneAddress *fro
|
|||
set_call_log_date(cl,cl->start_date_time);
|
||||
cl->from=from;
|
||||
cl->to=to;
|
||||
cl->status=LinphoneCallAborted; /*default status*/
|
||||
cl->status=LinphoneCallAborted; /*default status*/
|
||||
return cl;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1368,6 +1368,8 @@ float linphone_core_get_conference_local_input_volume(LinphoneCore *lc);
|
|||
|
||||
int linphone_core_terminate_conference(LinphoneCore *lc);
|
||||
int linphone_core_get_conference_size(LinphoneCore *lc);
|
||||
int linphone_core_start_conference_recording(LinphoneCore *lc, const char *path);
|
||||
int linphone_core_stop_conference_recording(LinphoneCore *lc);
|
||||
|
||||
int linphone_core_get_max_calls(LinphoneCore *lc);
|
||||
void linphone_core_set_max_calls(LinphoneCore *lc, int max);
|
||||
|
|
|
|||
|
|
@ -530,6 +530,7 @@ struct _LinphoneConference{
|
|||
MSAudioConference *conf;
|
||||
AudioStream *local_participant;
|
||||
MSAudioEndpoint *local_endpoint;
|
||||
MSAudioEndpoint *record_endpoint;
|
||||
RtpProfile *local_dummy_profile;
|
||||
bool_t local_muted;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,179 +1,22 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.24"/>
|
||||
<!-- interface-naming-policy project-wide -->
|
||||
<object class="GtkDialog" id="call_statistics">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Call statistics</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<signal name="response" handler="linphone_gtk_call_statistics_closed"/>
|
||||
<signal name="response" handler="linphone_gtk_call_statistics_closed" swapped="no"/>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkFrame" id="frame1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment1">
|
||||
<property name="visible">True</property>
|
||||
<property name="left_padding">12</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">6</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="audio_codec_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Audio codec</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="video_codec_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Video codec</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label3">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Audio IP bandwidth usage</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="audio_codec">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="video_codec">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="audio_bandwidth_usage">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Audio Media connectivity</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="audio_media_connectivity">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Video IP bandwidth usage</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="video_bandwidth_usage">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Video Media connectivity</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="video_media_connectivity">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="call_statistics_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><b>Call statistics and information</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
|
|
@ -184,6 +27,7 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -195,10 +39,210 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFrame" id="frame1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="left_padding">12</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">7</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="audio_codec_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Audio codec</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="video_codec_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Video codec</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Audio IP bandwidth usage</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="audio_codec">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="video_codec">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="audio_bandwidth_usage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Audio Media connectivity</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="audio_media_connectivity">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Video IP bandwidth usage</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="video_bandwidth_usage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Video Media connectivity</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="video_media_connectivity">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Round trip time</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="round_trip_time">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="call_statistics_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><b>Call statistics and information</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
|
|
|
|||
127
gtk/conference.c
127
gtk/conference.c
|
|
@ -27,6 +27,11 @@
|
|||
|
||||
#define PADDING_PIXELS 4
|
||||
|
||||
/*
|
||||
* conferencee_box = a vbox where participants are added or removed
|
||||
* conf_frame = the conference tab
|
||||
*/
|
||||
|
||||
static GtkWidget *create_conference_label(void){
|
||||
GtkWidget *box=gtk_hbox_new(FALSE,0);
|
||||
gtk_box_pack_start(GTK_BOX(box),gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_MENU),FALSE,FALSE,0);
|
||||
|
|
@ -46,34 +51,21 @@ static void init_local_participant(GtkWidget *participant){
|
|||
linphone_gtk_init_audio_meter(sound_meter, (get_volume_t) linphone_core_get_conference_local_input_volume, linphone_gtk_get_core());
|
||||
}
|
||||
|
||||
static GtkWidget *get_conference_tab(GtkWidget *mw){
|
||||
GtkWidget *box=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"conference_tab");
|
||||
GtkWidget *conf_frame=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"conf_frame");
|
||||
if(conf_frame!=NULL){
|
||||
if (box==NULL){
|
||||
GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box");
|
||||
box=gtk_vbox_new(FALSE,0);
|
||||
GtkWidget *participant=linphone_gtk_create_widget("main","callee_frame");
|
||||
gtk_box_set_homogeneous(GTK_BOX(box),TRUE);
|
||||
init_local_participant(participant);
|
||||
gtk_box_pack_start(GTK_BOX(box),participant,FALSE,FALSE,PADDING_PIXELS);
|
||||
gtk_widget_show(box);
|
||||
g_object_set_data(G_OBJECT(mw),"conference_tab",box);
|
||||
gtk_box_pack_start(GTK_BOX(conf_box),box,FALSE,FALSE,PADDING_PIXELS);
|
||||
}
|
||||
}
|
||||
static GtkWidget *get_conferencee_box(GtkWidget *mw){
|
||||
GtkWidget *box=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"conferencee_box");
|
||||
return box;
|
||||
}
|
||||
|
||||
static GtkWidget *find_conferencee_from_call(LinphoneCall *call){
|
||||
GtkWidget *mw=linphone_gtk_get_main_window();
|
||||
get_conference_tab(mw);
|
||||
GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame");
|
||||
GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box");
|
||||
GtkWidget *conferencee_box=get_conferencee_box(mw);
|
||||
GList *elem;
|
||||
GtkWidget *ret=NULL;
|
||||
|
||||
if (conferencee_box==NULL) return NULL;
|
||||
|
||||
if (call!=NULL){
|
||||
GList *l=gtk_container_get_children(GTK_CONTAINER(conf_box));
|
||||
GList *l=gtk_container_get_children(GTK_CONTAINER(conferencee_box));
|
||||
for(elem=l;elem!=NULL;elem=elem->next){
|
||||
GtkWidget *frame=(GtkWidget*)elem->data;
|
||||
if (call==g_object_get_data(G_OBJECT(frame),"call")){
|
||||
|
|
@ -87,28 +79,53 @@ static GtkWidget *find_conferencee_from_call(LinphoneCall *call){
|
|||
return ret;
|
||||
}
|
||||
|
||||
static GtkWidget * create_conference_panel(void){
|
||||
GtkWidget *mw=linphone_gtk_get_main_window();
|
||||
GtkWidget *conf_frame=linphone_gtk_create_widget("main","conf_frame");
|
||||
GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box");
|
||||
GtkWidget *button_conf=linphone_gtk_get_widget(conf_frame,"terminate_conf");
|
||||
GtkWidget *image=create_pixmap("stopcall-small.png");
|
||||
GtkWidget *box;
|
||||
GtkWidget *viewswitch=linphone_gtk_get_widget(mw,"viewswitch");
|
||||
|
||||
gtk_button_set_image(GTK_BUTTON(button_conf),image);
|
||||
g_signal_connect_swapped(G_OBJECT(button_conf),"clicked",(GCallback)linphone_gtk_terminate_call,NULL);
|
||||
g_object_set_data(G_OBJECT(mw),"conf_frame",(gpointer)conf_frame);
|
||||
|
||||
box=gtk_vbox_new(FALSE,0);
|
||||
GtkWidget *participant=linphone_gtk_create_widget("main","callee_frame");
|
||||
gtk_widget_show(participant);
|
||||
gtk_box_set_homogeneous(GTK_BOX(box),TRUE);
|
||||
init_local_participant(participant);
|
||||
gtk_box_pack_start(GTK_BOX(box),participant,FALSE,FALSE,PADDING_PIXELS);
|
||||
gtk_widget_show(box);
|
||||
g_object_set_data(G_OBJECT(mw),"conferencee_box",box);
|
||||
gtk_box_pack_start(GTK_BOX(conf_box),box,FALSE,FALSE,PADDING_PIXELS);
|
||||
|
||||
gtk_notebook_append_page(GTK_NOTEBOOK(viewswitch),conf_frame,
|
||||
create_conference_label());
|
||||
return conf_frame;
|
||||
}
|
||||
|
||||
void linphone_gtk_set_in_conference(LinphoneCall *call){
|
||||
GtkWidget *mw=linphone_gtk_get_main_window();
|
||||
GtkWidget *viewswitch=linphone_gtk_get_widget(mw,"viewswitch");
|
||||
GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame");
|
||||
g_object_set_data(G_OBJECT(mw),"is_conf",GINT_TO_POINTER(TRUE));
|
||||
GtkWidget *viewswitch=linphone_gtk_get_widget(mw,"viewswitch");
|
||||
|
||||
if(conf_frame==NULL){
|
||||
conf_frame=linphone_gtk_create_widget("main","conf_frame");
|
||||
GtkWidget *button_conf=linphone_gtk_get_widget(conf_frame,"terminate_conf");
|
||||
GtkWidget *image=create_pixmap("stopcall-small.png");
|
||||
gtk_button_set_image(GTK_BUTTON(button_conf),image);
|
||||
g_signal_connect_swapped(G_OBJECT(button_conf),"clicked",(GCallback)linphone_gtk_terminate_call,NULL);
|
||||
g_object_set_data(G_OBJECT(mw),"conf_frame",(gpointer)conf_frame);
|
||||
gtk_notebook_append_page(GTK_NOTEBOOK(viewswitch),conf_frame,
|
||||
create_conference_label());
|
||||
conf_frame=create_conference_panel();
|
||||
}
|
||||
GtkWidget *participant=find_conferencee_from_call(call);
|
||||
GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box");
|
||||
GtkWidget *participant=find_conferencee_from_call(call);
|
||||
|
||||
if (participant==NULL){
|
||||
const LinphoneAddress *addr=linphone_call_get_remote_address(call);
|
||||
participant=linphone_gtk_create_widget("main","callee_frame");
|
||||
/*create and add it */
|
||||
GtkWidget *conferencee_box=get_conferencee_box(mw);
|
||||
GtkWidget *sound_meter;
|
||||
const LinphoneAddress *addr=linphone_call_get_remote_address(call);
|
||||
gchar *markup;
|
||||
|
||||
participant=linphone_gtk_create_widget("main","callee_frame");
|
||||
gtk_widget_show(participant);
|
||||
if (linphone_address_get_display_name(addr)!=NULL){
|
||||
markup=g_strdup_printf("<b>%s</b>",linphone_address_get_display_name(addr));
|
||||
}else{
|
||||
|
|
@ -119,11 +136,11 @@ void linphone_gtk_set_in_conference(LinphoneCall *call){
|
|||
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(participant,"callee_name_label")),markup);
|
||||
g_free(markup);
|
||||
sound_meter=linphone_gtk_get_widget(participant,"sound_indicator");
|
||||
linphone_gtk_init_audio_meter(sound_meter, (get_volume_t) linphone_call_get_play_volume, call);
|
||||
gtk_box_pack_start(GTK_BOX(conf_box),participant,FALSE,FALSE,PADDING_PIXELS);
|
||||
linphone_gtk_init_audio_meter(sound_meter, (get_volume_t) linphone_call_get_play_volume, call);
|
||||
gtk_box_pack_start(GTK_BOX(conferencee_box),participant,FALSE,FALSE,PADDING_PIXELS);
|
||||
g_object_set_data_full(G_OBJECT(participant),"call",linphone_call_ref(call),(GDestroyNotify)linphone_call_unref);
|
||||
gtk_notebook_set_current_page(GTK_NOTEBOOK(viewswitch),
|
||||
gtk_notebook_page_num(GTK_NOTEBOOK(viewswitch),conf_frame));
|
||||
gtk_notebook_page_num(GTK_NOTEBOOK(viewswitch),conf_frame));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -135,24 +152,26 @@ void linphone_gtk_terminate_conference_participant(LinphoneCall *call){
|
|||
}
|
||||
|
||||
void linphone_gtk_unset_from_conference(LinphoneCall *call){
|
||||
GtkWidget *mw=linphone_gtk_get_main_window();
|
||||
GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame");
|
||||
GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box");
|
||||
GtkWidget *frame;
|
||||
if (conf_box==NULL) return; /*conference tab already destroyed*/
|
||||
frame=find_conferencee_from_call(call);
|
||||
GList *children;
|
||||
GtkWidget *frame=find_conferencee_from_call(call);
|
||||
|
||||
if (frame){
|
||||
GtkWidget *mw=linphone_gtk_get_main_window();
|
||||
GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame");
|
||||
GtkWidget *conferencee_box=g_object_get_data(G_OBJECT(mw),"conferencee_box");
|
||||
GList *children;
|
||||
|
||||
g_message("Removing a participant from conference");
|
||||
gtk_widget_destroy(frame);
|
||||
children=gtk_container_get_children(GTK_CONTAINER(conferencee_box));
|
||||
if (g_list_length(children)==1){ /* only local participant */
|
||||
/*the conference is terminated */
|
||||
g_message("The conference is terminated");
|
||||
g_object_set_data(G_OBJECT(mw),"conferencee_box",NULL);
|
||||
gtk_widget_destroy(conf_frame);
|
||||
g_object_set_data(G_OBJECT(mw),"conf_frame",NULL);
|
||||
}
|
||||
g_list_free(children);
|
||||
}
|
||||
children=gtk_container_get_children(GTK_CONTAINER(conf_box));
|
||||
if (g_list_length(children)==2){
|
||||
/*the conference is terminated */
|
||||
gtk_widget_destroy(conf_box);
|
||||
g_object_set_data(G_OBJECT(mw),"conference_tab",NULL);
|
||||
}
|
||||
gtk_widget_destroy(conf_frame);
|
||||
g_list_free(children);
|
||||
g_object_set_data(G_OBJECT(mw),"is_conf",GINT_TO_POINTER(FALSE));
|
||||
g_object_set_data(G_OBJECT(mw),"conf_frame",NULL);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,8 @@ LinphoneCall *linphone_gtk_get_currently_displayed_call(gboolean *is_conf){
|
|||
if (page!=NULL){
|
||||
LinphoneCall *call=(LinphoneCall*)g_object_get_data(G_OBJECT(page),"call");
|
||||
if (call==NULL){
|
||||
if (GPOINTER_TO_INT(g_object_get_data(G_OBJECT(main_window),"is_conf"))){
|
||||
GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(main_window),"conf_frame");
|
||||
if (conf_frame==page){
|
||||
if (is_conf)
|
||||
*is_conf=TRUE;
|
||||
return NULL;
|
||||
|
|
@ -75,25 +76,28 @@ static GtkWidget *make_tab_header(int number){
|
|||
}
|
||||
|
||||
void update_tab_header(LinphoneCall *call,gboolean pause){
|
||||
GtkWidget *w=(GtkWidget*)linphone_call_get_user_pointer(call);
|
||||
GtkWidget *main_window=linphone_gtk_get_main_window();
|
||||
GtkNotebook *notebook=GTK_NOTEBOOK(linphone_gtk_get_widget(main_window,"viewswitch"));
|
||||
gint call_index=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w),"call_index"));
|
||||
GtkWidget *new_label=gtk_hbox_new (FALSE,0);
|
||||
GtkWidget *i=NULL;
|
||||
if(pause){
|
||||
i=gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE,GTK_ICON_SIZE_SMALL_TOOLBAR);
|
||||
} else {
|
||||
i=create_pixmap ("startcall-small.png");
|
||||
}
|
||||
GtkWidget *w=(GtkWidget*)linphone_call_get_user_pointer(call);
|
||||
GtkWidget *main_window=linphone_gtk_get_main_window();
|
||||
GtkNotebook *notebook=GTK_NOTEBOOK(linphone_gtk_get_widget(main_window,"viewswitch"));
|
||||
gint call_index=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w),"call_index"));
|
||||
GtkWidget *new_label=gtk_hbox_new (FALSE,0);
|
||||
GtkWidget *i=NULL;
|
||||
GtkWidget *l;
|
||||
gchar *text=g_strdup_printf(_("Call #%i"),call_index);
|
||||
gchar *text;
|
||||
|
||||
if(pause){
|
||||
i=gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE,GTK_ICON_SIZE_SMALL_TOOLBAR);
|
||||
} else {
|
||||
i=create_pixmap ("startcall-small.png");
|
||||
}
|
||||
|
||||
text=g_strdup_printf(_("Call #%i"),call_index);
|
||||
l=gtk_label_new (text);
|
||||
gtk_box_pack_start (GTK_BOX(new_label),i,FALSE,FALSE,0);
|
||||
gtk_box_pack_end(GTK_BOX(new_label),l,TRUE,TRUE,0);
|
||||
|
||||
gtk_notebook_set_tab_label(notebook,w,new_label);
|
||||
gtk_widget_show_all(new_label);
|
||||
gtk_notebook_set_tab_label(notebook,w,new_label);
|
||||
gtk_widget_show_all(new_label);
|
||||
}
|
||||
|
||||
static void linphone_gtk_in_call_set_animation_image(GtkWidget *callview, const char *image_name, gboolean is_stock){
|
||||
|
|
@ -157,8 +161,7 @@ void transfer_button_clicked(GtkWidget *button, gpointer call_ref){
|
|||
g_signal_connect_swapped(G_OBJECT(menu_item),"activate",(GCallback)linphone_gtk_transfer_call,other_call);
|
||||
}
|
||||
}
|
||||
gtk_menu_popup(GTK_MENU(menu),NULL,NULL,NULL,NULL,0,
|
||||
gtk_get_current_event_time());
|
||||
gtk_menu_popup(GTK_MENU(menu),NULL,NULL,NULL,NULL,0,gtk_get_current_event_time());
|
||||
gtk_widget_show(menu);
|
||||
}
|
||||
|
||||
|
|
@ -178,7 +181,6 @@ static void conference_button_clicked(GtkWidget *button, gpointer call_ref){
|
|||
gtk_widget_set_sensitive(button,FALSE);
|
||||
g_object_set_data(G_OBJECT(linphone_gtk_get_main_window()),"conf_frame",NULL);
|
||||
linphone_core_add_all_to_conference(linphone_gtk_get_core());
|
||||
//linphone_core_add_to_conference(linphone_gtk_get_core(),(LinphoneCall*)call_ref);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -202,7 +204,6 @@ static void show_used_codecs(GtkWidget *callstats, LinphoneCall *call){
|
|||
GtkWidget *acodec_ui=linphone_gtk_get_widget(callstats,"audio_codec");
|
||||
GtkWidget *vcodec_ui=linphone_gtk_get_widget(callstats,"video_codec");
|
||||
if (acodec){
|
||||
|
||||
char tmp[64]={0};
|
||||
snprintf(tmp,sizeof(tmp)-1,"%s/%i/%i",acodec->mime_type,acodec->clock_rate,acodec->channels);
|
||||
gtk_label_set_label(GTK_LABEL(acodec_ui),tmp);
|
||||
|
|
@ -252,28 +253,40 @@ static const char *upnp_state_to_string(LinphoneUpnpState ice_state){
|
|||
static void _refresh_call_stats(GtkWidget *callstats, LinphoneCall *call){
|
||||
const LinphoneCallStats *as=linphone_call_get_audio_stats(call);
|
||||
const LinphoneCallStats *vs=linphone_call_get_video_stats(call);
|
||||
const char *audio_media_connectivity = _("Direct");
|
||||
const char *video_media_connectivity = _("Direct");
|
||||
const char *audio_media_connectivity = _("Direct or through server");
|
||||
const char *video_media_connectivity = _("Direct or through server");
|
||||
gboolean has_video=linphone_call_params_video_enabled(linphone_call_get_current_params(call));
|
||||
gchar *tmp=g_strdup_printf(_("download: %f\nupload: %f (kbit/s)"),
|
||||
as->download_bandwidth,as->upload_bandwidth);
|
||||
|
||||
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(callstats,"audio_bandwidth_usage")),tmp);
|
||||
g_free(tmp);
|
||||
tmp=g_strdup_printf(_("download: %f\nupload: %f (kbit/s)"),
|
||||
vs->download_bandwidth,vs->upload_bandwidth);
|
||||
if (has_video)
|
||||
tmp=g_strdup_printf(_("download: %f\nupload: %f (kbit/s)"),vs->download_bandwidth,vs->upload_bandwidth);
|
||||
else tmp=NULL;
|
||||
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(callstats,"video_bandwidth_usage")),tmp);
|
||||
g_free(tmp);
|
||||
if (tmp) g_free(tmp);
|
||||
if(as->upnp_state != LinphoneUpnpStateNotAvailable && as->upnp_state != LinphoneUpnpStateIdle) {
|
||||
audio_media_connectivity = upnp_state_to_string(as->upnp_state);
|
||||
} else if(as->ice_state != LinphoneIceStateNotActivated) {
|
||||
audio_media_connectivity = ice_state_to_string(as->ice_state);
|
||||
}
|
||||
gtk_label_set_text(GTK_LABEL(linphone_gtk_get_widget(callstats,"audio_media_connectivity")),audio_media_connectivity);
|
||||
if(vs->upnp_state != LinphoneUpnpStateNotAvailable && vs->upnp_state != LinphoneUpnpStateIdle) {
|
||||
video_media_connectivity = upnp_state_to_string(vs->upnp_state);
|
||||
} else if(vs->ice_state != LinphoneIceStateNotActivated) {
|
||||
video_media_connectivity = ice_state_to_string(vs->ice_state);
|
||||
}
|
||||
|
||||
if (has_video){
|
||||
if(vs->upnp_state != LinphoneUpnpStateNotAvailable && vs->upnp_state != LinphoneUpnpStateIdle) {
|
||||
video_media_connectivity = upnp_state_to_string(vs->upnp_state);
|
||||
} else if(vs->ice_state != LinphoneIceStateNotActivated) {
|
||||
video_media_connectivity = ice_state_to_string(vs->ice_state);
|
||||
}
|
||||
}else video_media_connectivity=NULL;
|
||||
gtk_label_set_text(GTK_LABEL(linphone_gtk_get_widget(callstats,"video_media_connectivity")),video_media_connectivity);
|
||||
|
||||
if (as->round_trip_delay>0){
|
||||
tmp=g_strdup_printf(_("%.3f seconds"),as->round_trip_delay);
|
||||
gtk_label_set_text(GTK_LABEL(linphone_gtk_get_widget(callstats,"round_trip_time")),tmp);
|
||||
g_free(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean refresh_call_stats(GtkWidget *callstats){
|
||||
|
|
@ -689,6 +702,9 @@ void linphone_gtk_in_call_view_set_in_call(LinphoneCall *call){
|
|||
if (in_conf){
|
||||
linphone_gtk_set_in_conference(call);
|
||||
gtk_widget_set_sensitive(linphone_gtk_get_widget(callview,"incall_mute"),FALSE);
|
||||
}else{
|
||||
linphone_gtk_unset_from_conference(call); /*in case it was previously*/
|
||||
gtk_widget_set_sensitive(linphone_gtk_get_widget(callview,"incall_mute"),TRUE);
|
||||
}
|
||||
gtk_widget_show_all(linphone_gtk_get_widget(callview,"buttons_panel"));
|
||||
if (!in_conf) gtk_widget_show_all(linphone_gtk_get_widget(callview,"record_hbox"));
|
||||
|
|
@ -857,18 +873,46 @@ void linphone_gtk_call_statistics_closed(GtkWidget *call_stats){
|
|||
|
||||
void linphone_gtk_record_call_toggled(GtkWidget *button){
|
||||
gboolean active=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
|
||||
LinphoneCall *call=linphone_gtk_get_currently_displayed_call(NULL);
|
||||
GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer (call);
|
||||
const LinphoneCallParams *params=linphone_call_get_current_params(call);
|
||||
const char *filepath=linphone_call_params_get_record_file(params);
|
||||
gchar *message=g_strdup_printf(_("<small><i>Recording into %s %s</i></small>"),filepath,active ? "" : _("(Paused)"));
|
||||
gboolean is_conf=FALSE;
|
||||
const char *filepath;
|
||||
gchar *message;
|
||||
LinphoneCore *lc=linphone_gtk_get_core();
|
||||
LinphoneCall *call=linphone_gtk_get_currently_displayed_call(&is_conf);
|
||||
GtkWidget *callview;
|
||||
GtkWidget *label;
|
||||
if (call){
|
||||
callview=(GtkWidget*)linphone_call_get_user_pointer (call);
|
||||
const LinphoneCallParams *params=linphone_call_get_current_params(call);
|
||||
filepath=linphone_call_params_get_record_file(params);
|
||||
label=linphone_gtk_get_widget(callview,"record_status");
|
||||
}else if (is_conf){
|
||||
GtkWidget *mw=linphone_gtk_get_main_window();
|
||||
callview=(GtkWidget *)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"conf_frame");
|
||||
label=linphone_gtk_get_widget(callview,"conf_record_status");
|
||||
filepath=(const char*)g_object_get_data(G_OBJECT(mw),"conf_record_path");
|
||||
if (filepath==NULL){
|
||||
filepath=linphone_gtk_get_record_path(NULL,TRUE);
|
||||
g_object_set_data_full(G_OBJECT(mw),"conf_record_path",(char*)filepath,g_free);
|
||||
}
|
||||
}else{
|
||||
g_warning("linphone_gtk_record_call_toggled(): bug.");
|
||||
return;
|
||||
}
|
||||
message=g_strdup_printf(_("<small><i>Recording into\n%s %s</i></small>"),filepath,active ? "" : _("(Paused)"));
|
||||
|
||||
if (active){
|
||||
linphone_call_start_recording(call);
|
||||
if (call)
|
||||
linphone_call_start_recording(call);
|
||||
else
|
||||
linphone_core_start_conference_recording(lc,filepath);
|
||||
}else {
|
||||
linphone_call_stop_recording(call);
|
||||
if (call)
|
||||
linphone_call_stop_recording(call);
|
||||
else
|
||||
linphone_core_stop_conference_recording(lc);
|
||||
|
||||
}
|
||||
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(callview,"record_status")),message);
|
||||
gtk_label_set_markup(GTK_LABEL(label),message);
|
||||
g_free(message);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -149,3 +149,5 @@ void linphone_gtk_uninit_instance(void);
|
|||
void linphone_gtk_monitor_usb(void);
|
||||
void linphone_gtk_unmonitor_usb(void);
|
||||
|
||||
gchar *linphone_gtk_get_record_path(const LinphoneAddress *address, gboolean is_conference);
|
||||
|
||||
|
|
|
|||
61
gtk/main.c
61
gtk/main.c
|
|
@ -750,14 +750,35 @@ static void linphone_gtk_update_call_buttons(LinphoneCall *call){
|
|||
}
|
||||
}
|
||||
|
||||
gchar *linphone_gtk_get_call_record_path(LinphoneAddress *address){
|
||||
gchar *linphone_gtk_get_record_path(const LinphoneAddress *address, gboolean is_conference){
|
||||
const char *dir=g_get_user_special_dir(G_USER_DIRECTORY_MUSIC);
|
||||
const char *id=linphone_address_get_username(address);
|
||||
const char *id="unknown";
|
||||
char filename[256]={0};
|
||||
if (id==NULL) id=linphone_address_get_domain(address);
|
||||
snprintf(filename,sizeof(filename)-1,"%s-%lu-%s-record.wav",
|
||||
linphone_gtk_get_ui_config("title","Linphone"),
|
||||
(unsigned long)time(NULL),id);
|
||||
char date[64]={0};
|
||||
time_t curtime=time(NULL);
|
||||
struct tm loctime;
|
||||
|
||||
#ifdef WIN32
|
||||
loctime=*localtime(&curtime);
|
||||
#else
|
||||
localtime_r(&curtime,&loctime);
|
||||
#endif
|
||||
snprintf(date,sizeof(date)-1,"%i%02i%02i-%02i%02i",loctime.tm_year+1900,loctime.tm_mon+1,loctime.tm_mday, loctime.tm_hour, loctime.tm_min);
|
||||
|
||||
if (address){
|
||||
id=linphone_address_get_username(address);
|
||||
if (id==NULL) id=linphone_address_get_domain(address);
|
||||
}
|
||||
if (is_conference){
|
||||
snprintf(filename,sizeof(filename)-1,"%s-conference-%s.wav",
|
||||
linphone_gtk_get_ui_config("title","Linphone"),
|
||||
date);
|
||||
}else{
|
||||
snprintf(filename,sizeof(filename)-1,"%s-call-%s-%s.wav",
|
||||
linphone_gtk_get_ui_config("title","Linphone"),
|
||||
date,
|
||||
id);
|
||||
}
|
||||
return g_build_filename(dir,filename,NULL);
|
||||
}
|
||||
|
||||
|
|
@ -768,7 +789,7 @@ static gboolean linphone_gtk_start_call_do(GtkWidget *uri_bar){
|
|||
|
||||
if (addr!=NULL){
|
||||
LinphoneCallParams *params=linphone_core_create_default_call_parameters(lc);
|
||||
gchar *record_file=linphone_gtk_get_call_record_path(addr);
|
||||
gchar *record_file=linphone_gtk_get_record_path(addr,FALSE);
|
||||
linphone_call_params_set_record_file(params,record_file);
|
||||
linphone_core_invite_address_with_params(lc,addr,params);
|
||||
completion_add_text(GTK_ENTRY(uri_bar),entered);
|
||||
|
|
@ -781,24 +802,34 @@ static gboolean linphone_gtk_start_call_do(GtkWidget *uri_bar){
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
static void accept_incoming_call(LinphoneCall *call){
|
||||
LinphoneCore *lc=linphone_gtk_get_core();
|
||||
LinphoneCallParams *params=linphone_core_create_default_call_parameters(lc);
|
||||
gchar *record_file=linphone_gtk_get_record_path(linphone_call_get_remote_address(call),FALSE);
|
||||
linphone_call_params_set_record_file(params,record_file);
|
||||
linphone_core_accept_call_with_params(lc,call,params);
|
||||
linphone_call_params_destroy(params);
|
||||
}
|
||||
|
||||
static gboolean linphone_gtk_auto_answer(LinphoneCall *call){
|
||||
if (linphone_call_get_state(call)==LinphoneCallIncomingReceived){
|
||||
linphone_core_accept_call (linphone_gtk_get_core(),call);
|
||||
LinphoneCallState state=linphone_call_get_state(call);
|
||||
if (state==LinphoneCallIncomingReceived || state==LinphoneCallIncomingEarlyMedia){
|
||||
accept_incoming_call(call);
|
||||
linphone_call_unref(call);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void linphone_gtk_start_call(GtkWidget *w){
|
||||
LinphoneCore *lc=linphone_gtk_get_core();
|
||||
LinphoneCall *call;
|
||||
LinphoneCall *call=linphone_gtk_get_currently_displayed_call(NULL);
|
||||
/*change into in-call mode, then do the work later as it might block a bit */
|
||||
GtkWidget *mw=gtk_widget_get_toplevel(w);
|
||||
GtkWidget *uri_bar=linphone_gtk_get_widget(mw,"uribar");
|
||||
LinphoneCallState state= call ? linphone_call_get_state(call) : LinphoneCallIdle;
|
||||
|
||||
call=linphone_gtk_get_currently_displayed_call(NULL);
|
||||
if (call!=NULL && linphone_call_get_state(call)==LinphoneCallIncomingReceived){
|
||||
linphone_core_accept_call(lc,call);
|
||||
if (state == LinphoneCallIncomingReceived || state == LinphoneCallIncomingEarlyMedia){
|
||||
accept_incoming_call(call);
|
||||
}else{
|
||||
/*immediately disable the button and delay a bit the execution the linphone_core_invite()
|
||||
so that we don't freeze the button. linphone_core_invite() might block for some hundreds of milliseconds*/
|
||||
|
|
@ -831,7 +862,7 @@ void linphone_gtk_decline_clicked(GtkWidget *button){
|
|||
void linphone_gtk_answer_clicked(GtkWidget *button){
|
||||
LinphoneCall *call=linphone_gtk_get_currently_displayed_call(NULL);
|
||||
if (call){
|
||||
linphone_core_accept_call(linphone_gtk_get_core(),call);
|
||||
accept_incoming_call(call);
|
||||
linphone_gtk_show_main_window(); /* useful when the button is clicked on a notification */
|
||||
}
|
||||
}
|
||||
|
|
|
|||
47
gtk/main.ui
47
gtk/main.ui
|
|
@ -215,9 +215,6 @@
|
|||
<object class="GtkVBox" id="conf_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHButtonBox" id="button_conf">
|
||||
<property name="visible">True</property>
|
||||
|
|
@ -242,9 +239,53 @@
|
|||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="conf_record_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="conf_record_button">
|
||||
<property name="label">gtk-media-record</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="toggled" handler="linphone_gtk_record_call_toggled" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="conf_record_status">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="wrap_mode">char</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
|||
|
|
@ -972,7 +972,8 @@ static void linphone_gtk_show_media_encryption(GtkWidget *pb){
|
|||
}
|
||||
g_signal_connect(G_OBJECT(combo),"changed",(GCallback)linphone_gtk_media_encryption_changed,NULL);
|
||||
}
|
||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"media_encryption_mandatory")),linphone_core_is_media_encryption_mandatory(lc));
|
||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"media_encryption_mandatory")),
|
||||
linphone_core_is_media_encryption_mandatory(lc));
|
||||
g_object_unref(G_OBJECT(model));
|
||||
}
|
||||
|
||||
|
|
@ -1015,10 +1016,8 @@ void linphone_gtk_show_parameters(void){
|
|||
if (pb==NULL) {
|
||||
pb=linphone_gtk_create_window("parameters");
|
||||
g_object_set_data(G_OBJECT(mw),"parameters",pb);
|
||||
ms_error("linphone_gtk_show_paramters: create");
|
||||
}else {
|
||||
gtk_widget_show(pb);
|
||||
ms_error("linphone_gtk_show_parameters: show");
|
||||
return;
|
||||
}
|
||||
codec_list=linphone_gtk_get_widget(pb,"codec_list");
|
||||
|
|
@ -1028,21 +1027,21 @@ void linphone_gtk_show_parameters(void){
|
|||
linphone_core_ipv6_enabled(lc));
|
||||
linphone_core_get_sip_transports(lc,&tr);
|
||||
|
||||
if (tr.tcp_port > 0) {
|
||||
gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 1);
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
|
||||
if (tr.tcp_port > 0) {
|
||||
gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 1);
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
|
||||
tr.tcp_port);
|
||||
}
|
||||
else if (tr.tls_port > 0) {
|
||||
gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 2);
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
|
||||
}
|
||||
else if (tr.tls_port > 0) {
|
||||
gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 2);
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
|
||||
tr.tls_port);
|
||||
}
|
||||
else {
|
||||
gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 0);
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
|
||||
}
|
||||
else {
|
||||
gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 0);
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
|
||||
tr.udp_port);
|
||||
}
|
||||
}
|
||||
|
||||
linphone_core_get_audio_port_range(lc, &min_port, &max_port);
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "audio_min_rtp_port")), min_port);
|
||||
|
|
|
|||
0
gtk/update.c
Executable file → Normal file
0
gtk/update.c
Executable file → Normal file
|
|
@ -1,558 +0,0 @@
|
|||
<?xml version = '1.0'?>
|
||||
<kdevelop>
|
||||
<general>
|
||||
<author>Simon Morlat</author>
|
||||
<email>simon.morlat@linphone.org</email>
|
||||
<version>[3.1.2]</version>
|
||||
<projectmanagement>KDevCustomProject</projectmanagement>
|
||||
<primarylanguage>C</primarylanguage>
|
||||
<ignoreparts/>
|
||||
<projectname>linphone</projectname>
|
||||
<projectdirectory>.</projectdirectory>
|
||||
<absoluteprojectpath>false</absoluteprojectpath>
|
||||
<description/>
|
||||
<defaultencoding/>
|
||||
</general>
|
||||
<kdevcustomproject>
|
||||
<run>
|
||||
<directoryradio>executable</directoryradio>
|
||||
<mainprogram>gtk-glade/linphone</mainprogram>
|
||||
<programargs/>
|
||||
<globaldebugarguments/>
|
||||
<globalcwd/>
|
||||
<useglobalprogram>false</useglobalprogram>
|
||||
<terminal>false</terminal>
|
||||
<autocompile>false</autocompile>
|
||||
<autoinstall>false</autoinstall>
|
||||
<autokdesu>false</autokdesu>
|
||||
<envvars/>
|
||||
</run>
|
||||
<filetypes>
|
||||
<filetype>*.java</filetype>
|
||||
<filetype>*.h</filetype>
|
||||
<filetype>*.H</filetype>
|
||||
<filetype>*.hh</filetype>
|
||||
<filetype>*.hxx</filetype>
|
||||
<filetype>*.hpp</filetype>
|
||||
<filetype>*.c</filetype>
|
||||
<filetype>*.C</filetype>
|
||||
<filetype>*.cc</filetype>
|
||||
<filetype>*.cpp</filetype>
|
||||
<filetype>*.c++</filetype>
|
||||
<filetype>*.cxx</filetype>
|
||||
</filetypes>
|
||||
<blacklist>
|
||||
<path>config.h</path>
|
||||
<path>exosip</path>
|
||||
<path>exosip/eXosip2.h</path>
|
||||
<path>exosip/eXosip.c</path>
|
||||
<path>exosip/eXosip_cfg.h</path>
|
||||
<path>exosip/eXosip.h</path>
|
||||
<path>exosip/eXutils.c</path>
|
||||
<path>exosip/jauth.c</path>
|
||||
<path>exosip/jcallback.c</path>
|
||||
<path>exosip/jcall.c</path>
|
||||
<path>exosip/jdialog.c</path>
|
||||
<path>exosip/jevents.c</path>
|
||||
<path>exosip/jfreinds.c</path>
|
||||
<path>exosip/jidentity.c</path>
|
||||
<path>exosip/jnotify.c</path>
|
||||
<path>exosip/jpipe.c</path>
|
||||
<path>exosip/jpipe.h</path>
|
||||
<path>exosip/jpublish.c</path>
|
||||
<path>exosip/jreg.c</path>
|
||||
<path>exosip/jrequest.c</path>
|
||||
<path>exosip/jresponse.c</path>
|
||||
<path>exosip/jsubscribe.c</path>
|
||||
<path>exosip/jsubscribers.c</path>
|
||||
<path>exosip/misc.c</path>
|
||||
<path>exosip/sdp_offans.c</path>
|
||||
<path>exosip/udp.c</path>
|
||||
<path>gnome</path>
|
||||
<path>gnome/addressbook.c</path>
|
||||
<path>gnome/addressbook.h</path>
|
||||
<path>gnome/applet.c</path>
|
||||
<path>gnome/callbacks.c</path>
|
||||
<path>gnome/callbacks.h</path>
|
||||
<path>gnome/friends.c</path>
|
||||
<path>gnome/friends.h</path>
|
||||
<path>gnome/gui_utils.c</path>
|
||||
<path>gnome/gui_utils.h</path>
|
||||
<path>gnome/interface.c</path>
|
||||
<path>gnome/interface.h</path>
|
||||
<path>gnome/linphone.c</path>
|
||||
<path>gnome/linphone.h</path>
|
||||
<path>gnome/main.c</path>
|
||||
<path>gnome/presence.c</path>
|
||||
<path>gnome/presence.h</path>
|
||||
<path>gnome/propertybox.c</path>
|
||||
<path>gnome/propertybox.h</path>
|
||||
<path>gnome/support.c</path>
|
||||
<path>gnome/support.h</path>
|
||||
<path>gsmlib</path>
|
||||
<path>gsmlib/code.c</path>
|
||||
<path>gsmlib/config.h</path>
|
||||
<path>gsmlib/debug.c</path>
|
||||
<path>gsmlib/decode.c</path>
|
||||
<path>gsmlib/gsmadd.c</path>
|
||||
<path>gsmlib/gsm_create.c</path>
|
||||
<path>gsmlib/gsm_decode.c</path>
|
||||
<path>gsmlib/gsm_destroy.c</path>
|
||||
<path>gsmlib/gsm_encode.c</path>
|
||||
<path>gsmlib/gsm_explode.c</path>
|
||||
<path>gsmlib/gsm.h</path>
|
||||
<path>gsmlib/gsm_implode.c</path>
|
||||
<path>gsmlib/gsm_option.c</path>
|
||||
<path>gsmlib/gsm_print.c</path>
|
||||
<path>gsmlib/gsm_wrapper.c</path>
|
||||
<path>gsmlib/gsm_wrapper.h</path>
|
||||
<path>gsmlib/long_term.c</path>
|
||||
<path>gsmlib/lpc.c</path>
|
||||
<path>gsmlib/preprocess.c</path>
|
||||
<path>gsmlib/private.h</path>
|
||||
<path>gsmlib/proto.h</path>
|
||||
<path>gsmlib/rpe.c</path>
|
||||
<path>gsmlib/short_term.c</path>
|
||||
<path>gsmlib/table.c</path>
|
||||
<path>gsmlib/toast.h</path>
|
||||
<path>gsmlib/unproto.h</path>
|
||||
<path>gtk</path>
|
||||
<path>gtk/addressbook.c</path>
|
||||
<path>gtk/addressbook.h</path>
|
||||
<path>gtk/applet.c</path>
|
||||
<path>gtk/callbacks.c</path>
|
||||
<path>gtk/callbacks.h</path>
|
||||
<path>gtk/friends.c</path>
|
||||
<path>gtk/friends.h</path>
|
||||
<path>gtk/gui_utils.c</path>
|
||||
<path>gtk/gui_utils.h</path>
|
||||
<path>gtk/interface.c</path>
|
||||
<path>gtk/interface.h</path>
|
||||
<path>gtk/linphone.c</path>
|
||||
<path>gtk/linphone.h</path>
|
||||
<path>gtk/main.c</path>
|
||||
<path>gtk/presence.c</path>
|
||||
<path>gtk/presence.h</path>
|
||||
<path>gtk/propertybox.c</path>
|
||||
<path>gtk/propertybox.h</path>
|
||||
<path>gtk/support.c</path>
|
||||
<path>gtk/support.h</path>
|
||||
<path>intl</path>
|
||||
<path>intl/bindtextdom.c</path>
|
||||
<path>intl/cat-compat.c</path>
|
||||
<path>intl/dcgettext.c</path>
|
||||
<path>intl/dgettext.c</path>
|
||||
<path>intl/explodename.c</path>
|
||||
<path>intl/finddomain.c</path>
|
||||
<path>intl/gettext.c</path>
|
||||
<path>intl/gettext.h</path>
|
||||
<path>intl/gettextP.h</path>
|
||||
<path>intl/hash-string.h</path>
|
||||
<path>intl/intl-compat.c</path>
|
||||
<path>intl/l10nflist.c</path>
|
||||
<path>intl/libgettext.h</path>
|
||||
<path>intl/loadinfo.h</path>
|
||||
<path>intl/loadmsgcat.c</path>
|
||||
<path>intl/localealias.c</path>
|
||||
<path>intl/textdomain.c</path>
|
||||
<path>lpc10-1.5</path>
|
||||
<path>lpc10-1.5/analys.c</path>
|
||||
<path>lpc10-1.5/bitio.c</path>
|
||||
<path>lpc10-1.5/bsynz.c</path>
|
||||
<path>lpc10-1.5/chanwr.c</path>
|
||||
<path>lpc10-1.5/dcbias.c</path>
|
||||
<path>lpc10-1.5/decode.c</path>
|
||||
<path>lpc10-1.5/deemp.c</path>
|
||||
<path>lpc10-1.5/difmag.c</path>
|
||||
<path>lpc10-1.5/dyptrk.c</path>
|
||||
<path>lpc10-1.5/encode.c</path>
|
||||
<path>lpc10-1.5/energy.c</path>
|
||||
<path>lpc10-1.5/f2c.h</path>
|
||||
<path>lpc10-1.5/f2clib.c</path>
|
||||
<path>lpc10-1.5/ham84.c</path>
|
||||
<path>lpc10-1.5/hp100.c</path>
|
||||
<path>lpc10-1.5/invert.c</path>
|
||||
<path>lpc10-1.5/irc2pc.c</path>
|
||||
<path>lpc10-1.5/ivfilt.c</path>
|
||||
<path>lpc10-1.5/lpc10.h</path>
|
||||
<path>lpc10-1.5/lpc10_wrapper.c</path>
|
||||
<path>lpc10-1.5/lpc10_wrapper.h</path>
|
||||
<path>lpc10-1.5/lpcdec.c</path>
|
||||
<path>lpc10-1.5/lpcenc.c</path>
|
||||
<path>lpc10-1.5/lpcini.c</path>
|
||||
<path>lpc10-1.5/lpfilt.c</path>
|
||||
<path>lpc10-1.5/median.c</path>
|
||||
<path>lpc10-1.5/mload.c</path>
|
||||
<path>lpc10-1.5/onset.c</path>
|
||||
<path>lpc10-1.5/pitsyn.c</path>
|
||||
<path>lpc10-1.5/placea.c</path>
|
||||
<path>lpc10-1.5/placev.c</path>
|
||||
<path>lpc10-1.5/preemp.c</path>
|
||||
<path>lpc10-1.5/prepro.c</path>
|
||||
<path>lpc10-1.5/random.c</path>
|
||||
<path>lpc10-1.5/rcchk.c</path>
|
||||
<path>lpc10-1.5/synths.c</path>
|
||||
<path>lpc10-1.5/tbdm.c</path>
|
||||
<path>lpc10-1.5/voicin.c</path>
|
||||
<path>lpc10-1.5/vparms.c</path>
|
||||
<path>media_api</path>
|
||||
<path>media_api/apitest.c</path>
|
||||
<path>media_api/apitest.h</path>
|
||||
<path>media_api/basiccall.c</path>
|
||||
<path>media_api/basiccall.h</path>
|
||||
<path>media_api/callmember.c</path>
|
||||
<path>media_api/callmember.h</path>
|
||||
<path>media_api/common.h</path>
|
||||
<path>media_api/media_api.c</path>
|
||||
<path>media_api/media_api.h</path>
|
||||
<path>media_api/mediaflow.c</path>
|
||||
<path>media_api/mediaflow.h</path>
|
||||
<path>mediastreamer</path>
|
||||
<path>mediastreamer/affine.c</path>
|
||||
<path>mediastreamer/affine.h</path>
|
||||
<path>mediastreamer/alsacard.c</path>
|
||||
<path>mediastreamer/alsacard.h</path>
|
||||
<path>mediastreamer/audiostream.c</path>
|
||||
<path>mediastreamer/g711common.h</path>
|
||||
<path>mediastreamer/hpuxsndcard.c</path>
|
||||
<path>mediastreamer/jackcard.c</path>
|
||||
<path>mediastreamer/jackcard.h</path>
|
||||
<path>mediastreamer/mediastream.c</path>
|
||||
<path>mediastreamer/mediastream.h</path>
|
||||
<path>mediastreamer/msAlawdec.c</path>
|
||||
<path>mediastreamer/msAlawdec.h</path>
|
||||
<path>mediastreamer/msAlawenc.c</path>
|
||||
<path>mediastreamer/msAlawenc.h</path>
|
||||
<path>mediastreamer/msavdecoder.c</path>
|
||||
<path>mediastreamer/msavdecoder.h</path>
|
||||
<path>mediastreamer/msavencoder.c</path>
|
||||
<path>mediastreamer/msavencoder.h</path>
|
||||
<path>mediastreamer/msbuffer.c</path>
|
||||
<path>mediastreamer/msbuffer.h</path>
|
||||
<path>mediastreamer/ms.c</path>
|
||||
<path>mediastreamer/mscodec.c</path>
|
||||
<path>mediastreamer/mscodec.h</path>
|
||||
<path>mediastreamer/mscopy.c</path>
|
||||
<path>mediastreamer/mscopy.h</path>
|
||||
<path>mediastreamer/msfdispatcher.c</path>
|
||||
<path>mediastreamer/msfdispatcher.h</path>
|
||||
<path>mediastreamer/msfifo.c</path>
|
||||
<path>mediastreamer/msfifo.h</path>
|
||||
<path>mediastreamer/msfilter.c</path>
|
||||
<path>mediastreamer/msfilter.h</path>
|
||||
<path>mediastreamer/msGSMdecoder.c</path>
|
||||
<path>mediastreamer/msGSMdecoder.h</path>
|
||||
<path>mediastreamer/msGSMencoder.c</path>
|
||||
<path>mediastreamer/msGSMencoder.h</path>
|
||||
<path>mediastreamer/ms.h</path>
|
||||
<path>mediastreamer/msLPC10decoder.c</path>
|
||||
<path>mediastreamer/msLPC10decoder.h</path>
|
||||
<path>mediastreamer/msLPC10encoder.c</path>
|
||||
<path>mediastreamer/msLPC10encoder.h</path>
|
||||
<path>mediastreamer/msMUlawdec.c</path>
|
||||
<path>mediastreamer/msMUlawdec.h</path>
|
||||
<path>mediastreamer/msMUlawenc.c</path>
|
||||
<path>mediastreamer/msMUlawenc.h</path>
|
||||
<path>mediastreamer/msnosync.c</path>
|
||||
<path>mediastreamer/msnosync.h</path>
|
||||
<path>mediastreamer/msossread.c</path>
|
||||
<path>mediastreamer/msossread.h</path>
|
||||
<path>mediastreamer/msosswrite.c</path>
|
||||
<path>mediastreamer/msosswrite.h</path>
|
||||
<path>mediastreamer/msqdispatcher.c</path>
|
||||
<path>mediastreamer/msqdispatcher.h</path>
|
||||
<path>mediastreamer/msqueue.c</path>
|
||||
<path>mediastreamer/msqueue.h</path>
|
||||
<path>mediastreamer/msread.c</path>
|
||||
<path>mediastreamer/msread.h</path>
|
||||
<path>mediastreamer/msringplayer.c</path>
|
||||
<path>mediastreamer/msringplayer.h</path>
|
||||
<path>mediastreamer/msrtprecv.c</path>
|
||||
<path>mediastreamer/msrtprecv.h</path>
|
||||
<path>mediastreamer/msrtpsend.c</path>
|
||||
<path>mediastreamer/msrtpsend.h</path>
|
||||
<path>mediastreamer/mssdlout.c</path>
|
||||
<path>mediastreamer/mssdlout.h</path>
|
||||
<path>mediastreamer/mssmpeg.c</path>
|
||||
<path>mediastreamer/mssmpeg.h</path>
|
||||
<path>mediastreamer/mssoundread.c</path>
|
||||
<path>mediastreamer/mssoundread.h</path>
|
||||
<path>mediastreamer/mssoundwrite.c</path>
|
||||
<path>mediastreamer/mssoundwrite.h</path>
|
||||
<path>mediastreamer/msspeexdec.c</path>
|
||||
<path>mediastreamer/msspeexdec.h</path>
|
||||
<path>mediastreamer/msspeexenc.c</path>
|
||||
<path>mediastreamer/msspeexenc.h</path>
|
||||
<path>mediastreamer/mssync.c</path>
|
||||
<path>mediastreamer/mssync.h</path>
|
||||
<path>mediastreamer/mstcpclient.c</path>
|
||||
<path>mediastreamer/mstcpclient.h</path>
|
||||
<path>mediastreamer/mstcpserv.c</path>
|
||||
<path>mediastreamer/mstcpserv.h</path>
|
||||
<path>mediastreamer/mstimer.c</path>
|
||||
<path>mediastreamer/mstimer.h</path>
|
||||
<path>mediastreamer/mstruespeechdecoder.c</path>
|
||||
<path>mediastreamer/mstruespeechdecoder.h</path>
|
||||
<path>mediastreamer/mstruespeechencoder.c</path>
|
||||
<path>mediastreamer/mstruespeechencoder.h</path>
|
||||
<path>mediastreamer/msutils.h</path>
|
||||
<path>mediastreamer/msv4l.c</path>
|
||||
<path>mediastreamer/msv4l.h</path>
|
||||
<path>mediastreamer/msvideooutput.c</path>
|
||||
<path>mediastreamer/msvideooutput.h</path>
|
||||
<path>mediastreamer/msvideosource.c</path>
|
||||
<path>mediastreamer/msvideosource.h</path>
|
||||
<path>mediastreamer/mswrite.c</path>
|
||||
<path>mediastreamer/mswrite.h</path>
|
||||
<path>mediastreamer/msxine.c</path>
|
||||
<path>mediastreamer/msxine.h</path>
|
||||
<path>mediastreamer/osscard.c</path>
|
||||
<path>mediastreamer/osscard.h</path>
|
||||
<path>mediastreamer/rfc2429.h</path>
|
||||
<path>mediastreamer/ring_test.c</path>
|
||||
<path>mediastreamer/sndcard.c</path>
|
||||
<path>mediastreamer/sndcard.h</path>
|
||||
<path>mediastreamer/test_alaw.c</path>
|
||||
<path>mediastreamer/test.c</path>
|
||||
<path>mediastreamer/test_gsm.c</path>
|
||||
<path>mediastreamer/test_lpc10.c</path>
|
||||
<path>mediastreamer/test_mulaw.c</path>
|
||||
<path>mediastreamer/test_rtprecv.c</path>
|
||||
<path>mediastreamer/test_smpeg.c</path>
|
||||
<path>mediastreamer/test_speex.c</path>
|
||||
<path>mediastreamer/test_truespeech.c</path>
|
||||
<path>mediastreamer/test_v4l.c</path>
|
||||
<path>mediastreamer/test_videostream.c</path>
|
||||
<path>mediastreamer/test_xine.c</path>
|
||||
<path>mediastreamer/videoclient.c</path>
|
||||
<path>mediastreamer/videoserver.c</path>
|
||||
<path>mediastreamer/videostream.c</path>
|
||||
<path>mediastreamer/waveheader.h</path>
|
||||
<path>po</path>
|
||||
<path>po/cat-id-tbl.c</path>
|
||||
<path>win32acm</path>
|
||||
<path>win32acm/afl.c</path>
|
||||
<path>win32acm/com.h</path>
|
||||
<path>win32acm/config.h</path>
|
||||
<path>win32acm/cpudetect.c</path>
|
||||
<path>win32acm/cpudetect.h</path>
|
||||
<path>win32acm/cputable.h</path>
|
||||
<path>win32acm/driver.c</path>
|
||||
<path>win32acm/driver.h</path>
|
||||
<path>win32acm/elfdll.c</path>
|
||||
<path>win32acm/ext.c</path>
|
||||
<path>win32acm/ext.h</path>
|
||||
<path>win32acm/ldt_keeper.c</path>
|
||||
<path>win32acm/ldt_keeper.h</path>
|
||||
<path>win32acm/loader.h</path>
|
||||
<path>win32acm/module.c</path>
|
||||
<path>win32acm/mp_msg.c</path>
|
||||
<path>win32acm/mp_msg.h</path>
|
||||
<path>win32acm/pe_image.c</path>
|
||||
<path>win32acm/pe_resource.c</path>
|
||||
<path>win32acm/registry.c</path>
|
||||
<path>win32acm/registry.h</path>
|
||||
<path>win32acm/resource.c</path>
|
||||
<path>win32acm/test_truespeech.c</path>
|
||||
<path>win32acm/win32.c</path>
|
||||
<path>win32acm/win32codec.c</path>
|
||||
<path>win32acm/win32codec.h</path>
|
||||
<path>win32acm/win32.h</path>
|
||||
<path>win32acm/wine</path>
|
||||
<path>win32acm/wine/basetsd.h</path>
|
||||
<path>win32acm/wine/debugtools.h</path>
|
||||
<path>win32acm/wine/driver.h</path>
|
||||
<path>win32acm/wine/elfdll.h</path>
|
||||
<path>win32acm/wine/heap.h</path>
|
||||
<path>win32acm/wine/ldt.h</path>
|
||||
<path>win32acm/wine/mmreg.h</path>
|
||||
<path>win32acm/wine/module.h</path>
|
||||
<path>win32acm/wine/msacmdrv.h</path>
|
||||
<path>win32acm/wine/msacm.h</path>
|
||||
<path>win32acm/wine/ntdef.h</path>
|
||||
<path>win32acm/wine/pe_image.h</path>
|
||||
<path>win32acm/wine/poppack.h</path>
|
||||
<path>win32acm/wine/pshpack1.h</path>
|
||||
<path>win32acm/wine/pshpack2.h</path>
|
||||
<path>win32acm/wine/pshpack4.h</path>
|
||||
<path>win32acm/wine/pshpack8.h</path>
|
||||
<path>win32acm/wine/vfw.h</path>
|
||||
<path>win32acm/wine/winbase.h</path>
|
||||
<path>win32acm/wine/windef.h</path>
|
||||
<path>win32acm/wine/windows.h</path>
|
||||
<path>win32acm/wine/winerror.h</path>
|
||||
<path>win32acm/wine/winestring.h</path>
|
||||
<path>win32acm/wine/winnt.h</path>
|
||||
<path>win32acm/wine/winreg.h</path>
|
||||
<path>win32acm/wine/winuser.h</path>
|
||||
<path>win32acm/wineacm.h</path>
|
||||
<path>win32acm/wrapper.h</path>
|
||||
<path>builddate.h</path>
|
||||
</blacklist>
|
||||
<build>
|
||||
<buildtool>make</buildtool>
|
||||
<builddir/>
|
||||
</build>
|
||||
<other>
|
||||
<prio>0</prio>
|
||||
<otherbin/>
|
||||
<defaulttarget/>
|
||||
<otheroptions/>
|
||||
<selectedenvironment>default</selectedenvironment>
|
||||
<environments>
|
||||
<default/>
|
||||
</environments>
|
||||
</other>
|
||||
<make>
|
||||
<abortonerror>true</abortonerror>
|
||||
<numberofjobs>0</numberofjobs>
|
||||
<prio>0</prio>
|
||||
<dontact>false</dontact>
|
||||
<makebin/>
|
||||
<defaulttarget/>
|
||||
<makeoptions/>
|
||||
<selectedenvironment>default</selectedenvironment>
|
||||
<environments>
|
||||
<default/>
|
||||
</environments>
|
||||
</make>
|
||||
</kdevcustomproject>
|
||||
<kdevdebugger>
|
||||
<general>
|
||||
<dbgshell/>
|
||||
<gdbpath/>
|
||||
<configGdbScript/>
|
||||
<runShellScript/>
|
||||
<runGdbScript/>
|
||||
<breakonloadinglibs>true</breakonloadinglibs>
|
||||
<separatetty>false</separatetty>
|
||||
<floatingtoolbar>false</floatingtoolbar>
|
||||
<raiseGDBOnStart>false</raiseGDBOnStart>
|
||||
</general>
|
||||
<display>
|
||||
<staticmembers>false</staticmembers>
|
||||
<demanglenames>true</demanglenames>
|
||||
<outputradix>10</outputradix>
|
||||
</display>
|
||||
</kdevdebugger>
|
||||
<kdevdoctreeview>
|
||||
<ignoretocs>
|
||||
<toc>ada</toc>
|
||||
<toc>ada_bugs_gcc</toc>
|
||||
<toc>bash</toc>
|
||||
<toc>bash_bugs</toc>
|
||||
<toc>clanlib</toc>
|
||||
<toc>fortran_bugs_gcc</toc>
|
||||
<toc>gnome1</toc>
|
||||
<toc>gnustep</toc>
|
||||
<toc>gtk</toc>
|
||||
<toc>gtk_bugs</toc>
|
||||
<toc>haskell</toc>
|
||||
<toc>haskell_bugs_ghc</toc>
|
||||
<toc>java_bugs_gcc</toc>
|
||||
<toc>java_bugs_sun</toc>
|
||||
<toc>kde2book</toc>
|
||||
<toc>libstdc++</toc>
|
||||
<toc>opengl</toc>
|
||||
<toc>pascal_bugs_fp</toc>
|
||||
<toc>php</toc>
|
||||
<toc>php_bugs</toc>
|
||||
<toc>perl</toc>
|
||||
<toc>perl_bugs</toc>
|
||||
<toc>python</toc>
|
||||
<toc>python_bugs</toc>
|
||||
<toc>qt-kdev3</toc>
|
||||
<toc>ruby</toc>
|
||||
<toc>ruby_bugs</toc>
|
||||
<toc>sdl</toc>
|
||||
<toc>stl</toc>
|
||||
<toc>sw</toc>
|
||||
<toc>w3c-dom-level2-html</toc>
|
||||
<toc>w3c-svg</toc>
|
||||
<toc>w3c-uaag10</toc>
|
||||
<toc>wxwidgets_bugs</toc>
|
||||
</ignoretocs>
|
||||
<ignoreqt_xml>
|
||||
<toc>Guide to the Qt Translation Tools</toc>
|
||||
<toc>Qt Assistant Manual</toc>
|
||||
<toc>Qt Designer Manual</toc>
|
||||
<toc>Qt Reference Documentation</toc>
|
||||
<toc>qmake User Guide</toc>
|
||||
</ignoreqt_xml>
|
||||
<ignoredoxygen>
|
||||
<toc>KDE Libraries (Doxygen)</toc>
|
||||
</ignoredoxygen>
|
||||
</kdevdoctreeview>
|
||||
<kdevfilecreate>
|
||||
<filetypes/>
|
||||
<useglobaltypes>
|
||||
<type ext="c" />
|
||||
<type ext="h" />
|
||||
</useglobaltypes>
|
||||
</kdevfilecreate>
|
||||
<kdevcppsupport>
|
||||
<qt>
|
||||
<used>false</used>
|
||||
<version>3</version>
|
||||
<includestyle>3</includestyle>
|
||||
<root></root>
|
||||
<designerintegration>EmbeddedKDevDesigner</designerintegration>
|
||||
<qmake></qmake>
|
||||
<designer></designer>
|
||||
<designerpluginpaths/>
|
||||
</qt>
|
||||
<references/>
|
||||
<codecompletion>
|
||||
<automaticCodeCompletion>false</automaticCodeCompletion>
|
||||
<automaticArgumentsHint>true</automaticArgumentsHint>
|
||||
<automaticHeaderCompletion>true</automaticHeaderCompletion>
|
||||
<codeCompletionDelay>250</codeCompletionDelay>
|
||||
<argumentsHintDelay>400</argumentsHintDelay>
|
||||
<headerCompletionDelay>250</headerCompletionDelay>
|
||||
<showOnlyAccessibleItems>false</showOnlyAccessibleItems>
|
||||
<completionBoxItemOrder>0</completionBoxItemOrder>
|
||||
<howEvaluationContextMenu>true</howEvaluationContextMenu>
|
||||
<showCommentWithArgumentHint>true</showCommentWithArgumentHint>
|
||||
<statusBarTypeEvaluation>false</statusBarTypeEvaluation>
|
||||
<namespaceAliases>std=_GLIBCXX_STD;__gnu_cxx=std</namespaceAliases>
|
||||
<processPrimaryTypes>true</processPrimaryTypes>
|
||||
<processFunctionArguments>false</processFunctionArguments>
|
||||
<preProcessAllHeaders>false</preProcessAllHeaders>
|
||||
<parseMissingHeadersExperimental>false</parseMissingHeadersExperimental>
|
||||
<resolveIncludePathsUsingMakeExperimental>false</resolveIncludePathsUsingMakeExperimental>
|
||||
<alwaysParseInBackground>true</alwaysParseInBackground>
|
||||
<usePermanentCaching>true</usePermanentCaching>
|
||||
<alwaysIncludeNamespaces>false</alwaysIncludeNamespaces>
|
||||
<includePaths>.;</includePaths>
|
||||
</codecompletion>
|
||||
<creategettersetter>
|
||||
<prefixGet/>
|
||||
<prefixSet>set</prefixSet>
|
||||
<prefixVariable>m_,_</prefixVariable>
|
||||
<parameterName>theValue</parameterName>
|
||||
<inlineGet>true</inlineGet>
|
||||
<inlineSet>true</inlineSet>
|
||||
</creategettersetter>
|
||||
<splitheadersource>
|
||||
<enabled>false</enabled>
|
||||
<synchronize>true</synchronize>
|
||||
<orientation>Vertical</orientation>
|
||||
</splitheadersource>
|
||||
</kdevcppsupport>
|
||||
<kdevfileview>
|
||||
<groups>
|
||||
<hidenonprojectfiles>false</hidenonprojectfiles>
|
||||
<hidenonlocation>false</hidenonlocation>
|
||||
</groups>
|
||||
<tree>
|
||||
<hidepatterns>*.o,*.lo,CVS</hidepatterns>
|
||||
<hidenonprojectfiles>false</hidenonprojectfiles>
|
||||
</tree>
|
||||
</kdevfileview>
|
||||
<cppsupportpart>
|
||||
<filetemplates>
|
||||
<interfacesuffix>.h</interfacesuffix>
|
||||
<implementationsuffix>.cpp</implementationsuffix>
|
||||
</filetemplates>
|
||||
</cppsupportpart>
|
||||
</kdevelop>
|
||||
Loading…
Add table
Reference in a new issue