]> sjero.net Git - linphone/commitdiff
Merge branch 'master' of git.savannah.nongnu.org:/srv/git/linphone
authorroot <root@sylvain-MacBookPro.(none)>
Thu, 29 Sep 2011 13:47:10 +0000 (15:47 +0200)
committerroot <root@sylvain-MacBookPro.(none)>
Thu, 29 Sep 2011 13:47:10 +0000 (15:47 +0200)
17 files changed:
build/android/Android.mk
coreapi/friend.c
coreapi/linphonecall.c
coreapi/linphonecore.c
coreapi/linphonecore.h
coreapi/linphonecore_jni.cc
coreapi/sal_eXosip2.c
gtk/friendlist.c
gtk/incall_view.c
gtk/main.c
gtk/main.ui
mediastreamer2
oRTP
pixmaps/Makefile.am
pixmaps/mic_active.png
pixmaps/mic_muted.png
pixmaps/speaker.png [new file with mode: 0644]

index c7b48fde84125d77a111fc7c20d7446ee0bfe8cf..299442e287e2bab161d0b72c43ee89c350b21a53 100755 (executable)
@@ -12,7 +12,7 @@
 ##  This program is distributed in the hope that it will be useful,
 ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
 ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-##  GNU Library General Public License for more details.
+##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
 ##  along with this program; if not, write to the Free Software
@@ -126,7 +126,7 @@ LOCAL_STATIC_LIBRARIES += libmsilbc
 endif
 
 LOCAL_C_INCLUDES += $(LIBLINPHONE_EXTENDED_C_INCLUDES) 
-LOCAL_STATIC_LIBRARIES += $(LIBLINPHONE_EXTENDED_STATIC_LIBS)
+LOCAL_WHOLE_STATIC_LIBRARIES += $(LIBLINPHONE_EXTENDED_STATIC_LIBS)
 LOCAL_SRC_FILES  += $(LIBLINPHONE_EXTENDED_SRC_FILES)
 
 ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
index 2afcc4217798931d18fb37f352c42351c73225b7..853902b45f23dfbdb9cf085b550c05691bebe26a 100644 (file)
@@ -186,6 +186,7 @@ void linphone_core_interpret_friend_uri(LinphoneCore *lc, const char *uri, char
                        /*try adding domain part from default current proxy*/
                        LinphoneAddress * id=linphone_address_new(linphone_core_get_identity(lc));
                        if (id!=NULL){
+                               linphone_address_set_display_name(id,NULL);
                                linphone_address_set_username(id,uri);
                                *result=linphone_address_as_string(id);
                                linphone_address_destroy(id);
index 7f33de82866820cf127ffba275a9af4a95567432..8ab925cf49c9645b45b67df71123d24ddb54c996 100644 (file)
@@ -41,6 +41,10 @@ static MSWebCam *get_nowebcam_device(){
 }
 #endif
 
+LinphoneCore *linphone_call_get_core(const LinphoneCall *call){
+       return call->core;
+}
+
 static const char* get_hexa_zrtp_identifier(LinphoneCore *lc){
        const char *confZid=lp_config_get_string(lc->config,"rtp","zid",NULL);
        if (confZid != NULL) {
@@ -1264,9 +1268,9 @@ bool_t linphone_call_echo_limiter_enabled(const LinphoneCall *call){
 **/
 float linphone_call_get_play_volume(LinphoneCall *call){
        AudioStream *st=call->audiostream;
-       if (st && st->volsend){
+       if (st && st->volrecv){
                float vol=0;
-               ms_filter_call_method(st->volsend,MS_VOLUME_GET,&vol);
+               ms_filter_call_method(st->volrecv,MS_VOLUME_GET,&vol);
                return vol;
                
        }
@@ -1279,9 +1283,9 @@ float linphone_call_get_play_volume(LinphoneCall *call){
 **/
 float linphone_call_get_record_volume(LinphoneCall *call){
        AudioStream *st=call->audiostream;
-       if (st && st->volrecv){
+       if (st && st->volsend && !call->audio_muted && call->state==LinphoneCallStreamsRunning){
                float vol=0;
-               ms_filter_call_method(st->volrecv,MS_VOLUME_GET,&vol);
+               ms_filter_call_method(st->volsend,MS_VOLUME_GET,&vol);
                return vol;
                
        }
index 60a9127b2454cb8ef9eeaec5d64559af7e0861d6..a22959a180558ae130da1bf5b6176f88451004af 100644 (file)
@@ -982,6 +982,7 @@ static void linphone_core_init (LinphoneCore * lc, const LinphoneCoreVTable *vta
        linphone_core_assign_payload_type(lc,&payload_type_speex_wb,111,"vbr=on");
        linphone_core_assign_payload_type(lc,&payload_type_speex_uwb,112,"vbr=on");
        linphone_core_assign_payload_type(lc,&payload_type_telephone_event,101,"0-11");
+       linphone_core_assign_payload_type(lc,&payload_type_g722,9,NULL);
 
 #if defined(ANDROID) || defined (__IPHONE_OS_VERSION_MIN_REQUIRED)
        /*shorten the DNS lookup time and send more retransmissions on mobiles:
@@ -3161,6 +3162,8 @@ const char *linphone_core_get_nat_address_resolved(LinphoneCore *lc)
        int error;
        char ipstring [INET6_ADDRSTRLEN];
 
+       if (lc->net_conf.nat_address==NULL) return NULL;
+       
        if (parse_hostname_to_addr (lc->net_conf.nat_address, &ss, &ss_len)<0) {
                return lc->net_conf.nat_address;
        }
index af3978402864deccfa372cce5e7178f4290d18a9..bdd6b06d64ea429ec99b50cfb0f1e32dfc3e7b7f 100644 (file)
@@ -235,7 +235,7 @@ typedef enum _LinphoneCallState{
 
 const char *linphone_call_state_to_string(LinphoneCallState cs);
 
-
+LinphoneCore *linphone_call_get_core(const LinphoneCall *call);
 LinphoneCallState linphone_call_get_state(const LinphoneCall *call);
 bool_t linphone_call_asked_to_autoanswer(LinphoneCall *call);
 const LinphoneAddress * linphone_core_get_current_call_remote_address(struct _LinphoneCore *lc);
index 02b0a5a5fac9bbc4fe149a9b2101950bad473bca..cc15d5d44440fcdd4fffe41f88d205fd8336c008 100644 (file)
@@ -276,8 +276,8 @@ public:
                        
                        if (up==NULL){
                                jobj=env->NewObject(callClass,callCtrId,(jlong)call);
+                               jobj=env->NewGlobalRef(jobj);
                                linphone_call_set_user_pointer(call,(void*)jobj);
-                               //env->NewGlobalRef(jobj);
                                linphone_call_ref(call);
                        }else{
                                jobj=(jobject)up;
@@ -289,6 +289,7 @@ public:
        static void callStateChange(LinphoneCore *lc, LinphoneCall* call,LinphoneCallState state,const char* message) {
                JNIEnv *env = 0;
                jint result = jvm->AttachCurrentThread(&env,NULL);
+               jobject jcall;
                if (result != 0) {
                        ms_error("cannot attach VM\n");
                        return;
@@ -297,9 +298,13 @@ public:
                env->CallVoidMethod(lcData->listener
                                                        ,lcData->callStateId
                                                        ,lcData->core
-                                                       ,lcData->getCall(env,call)
+                                                       ,(jcall=lcData->getCall(env,call))
                                                        ,env->CallStaticObjectMethod(lcData->callStateClass,lcData->callStateFromIntId,(jint)state),
                                                        message ? env->NewStringUTF(message) : NULL);
+               if (state==LinphoneCallReleased){
+                       linphone_call_set_user_pointer(call,NULL);
+                       env->DeleteGlobalRef(jcall);
+               }
        }
        static void callEncryptionChange(LinphoneCore *lc, LinphoneCall* call, bool_t encrypted,const char* authentication_token) {
                JNIEnv *env = 0;
@@ -466,20 +471,22 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_iterate(  JNIEnv*  env
                ,jlong lc) {
        linphone_core_iterate((LinphoneCore*)lc);
 }
-extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_invite(       JNIEnv*  env
+extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_invite(     JNIEnv*  env
                ,jobject  thiz
                ,jlong lc
                ,jstring juri) {
        const char* uri = env->GetStringUTFChars(juri, NULL);
+       LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc);
        LinphoneCall* lCall = linphone_core_invite((LinphoneCore*)lc,uri);
        env->ReleaseStringUTFChars(juri, uri);
-       return (jlong)lCall;
+       return lcd->getCall(env,lCall);
 }
-extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_inviteAddress(        JNIEnv*  env
+extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_inviteAddress(      JNIEnv*  env
                ,jobject  thiz
                ,jlong lc
                ,jlong to) {
-       return (jlong) linphone_core_invite_address((LinphoneCore*)lc,(LinphoneAddress*)to);
+       LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc);
+       return lcd->getCall(env, linphone_core_invite_address((LinphoneCore*)lc,(LinphoneAddress*)to));
 }
 
 extern "C" void Java_org_linphone_core_LinphoneCoreImpl_terminateCall( JNIEnv*  env
@@ -1030,14 +1037,7 @@ extern "C" jint Java_org_linphone_core_PayloadTypeImpl_getRate(JNIEnv*  env,jobj
 extern "C" void Java_org_linphone_core_LinphoneCallImpl_finalize(JNIEnv*  env
                                                                                                                                                ,jobject  thiz
                                                                                                                                                ,jlong ptr) {
-       LinphoneCall *call=(LinphoneCall*)ptr;  
-       jobject jobj=(jobject)linphone_call_get_user_pointer(call);
-       if (jobj==thiz){
-               //env->DeleteGlobalRef(jobj);
-       }else{
-               ms_error("Call being destroyed is inconsistent: thiz=%lu, jobj=%lu",(unsigned long)thiz,(unsigned long)jobj);
-       }
-       linphone_call_set_user_pointer(call,NULL);
+       LinphoneCall *call=(LinphoneCall*)ptr;
        linphone_call_unref(call);
 }
 
@@ -1088,10 +1088,11 @@ extern "C" jboolean Java_org_linphone_core_LinphoneCallImpl_isEchoLimiterEnabled
        return linphone_call_echo_limiter_enabled((LinphoneCall*)ptr);
 }
 
-extern "C" jlong Java_org_linphone_core_LinphoneCallImpl_getReplacedCall(      JNIEnv*  env
+extern "C" jobject Java_org_linphone_core_LinphoneCallImpl_getReplacedCall(    JNIEnv*  env
                                                                                                                                                ,jobject  thiz
                                                                                                                                                ,jlong ptr) {
-       return (jlong)linphone_call_get_replaced_call((LinphoneCall*)ptr);
+       LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data(linphone_call_get_core((LinphoneCall*)ptr));       
+       return lcd->getCall(env,linphone_call_get_replaced_call((LinphoneCall*)ptr));
 }
 
 extern "C" jfloat Java_org_linphone_core_LinphoneCallImpl_getCurrentQuality(   JNIEnv*  env
@@ -1265,8 +1266,9 @@ extern "C" jboolean Java_org_linphone_core_LinphoneCallImpl_cameraEnabled(JNIEnv
        linphone_call_camera_enabled((LinphoneCall *)lc);
 }
 
-extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_inviteAddressWithParams(JNIEnv *env, jobject thiz, jlong lc, jlong addr, jlong params){
-       return (jlong) linphone_core_invite_address_with_params((LinphoneCore *)lc, (const LinphoneAddress *)addr, (const LinphoneCallParams *)params);
+extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_inviteAddressWithParams(JNIEnv *env, jobject thiz, jlong lc, jlong addr, jlong params){
+       LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc);
+       return  lcd->getCall(env,linphone_core_invite_address_with_params((LinphoneCore *)lc, (const LinphoneAddress *)addr, (const LinphoneCallParams *)params));
 }
 
 extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_updateAddressWithParams(JNIEnv *env, jobject thiz, jlong lc, jlong call, jlong params){
index da78f4bfef941083979f53bcd8993385f83ba321..8486d7e96f38c605be3bcf71a262caf36469220a 100644 (file)
@@ -1112,6 +1112,13 @@ static void call_accepted(Sal *sal, eXosip_event_t *ev){
                if (op->base.local_media) sdp_process(op);
        }
        eXosip_call_build_ack(ev->did,&msg);
+       if (msg==NULL) {
+               ms_warning("This call has been already terminated.");
+               eXosip_lock();
+               eXosip_call_terminate(ev->cid,ev->did);
+               eXosip_unlock();
+               return ;
+       }
        contact=sal_op_get_contact(op);
        if (contact) {
                _osip_list_set_empty(&msg->contacts,(void (*)(void*))osip_contact_free);
index 075bbd99ad9bb966279e619707006c0037ee6def..9dacac717882571f03567d4e85c1f051ca615469 100644 (file)
@@ -198,7 +198,9 @@ static void update_star(GtkEntry *entry, gboolean is_known){
        unstarred=g_object_get_data(G_OBJECT(entry),"unstarred_icon");
        if (is_known && (active==unstarred)){
                gtk_entry_set_icon_from_pixbuf(entry,GTK_ENTRY_ICON_SECONDARY,starred);
+               gtk_entry_set_icon_tooltip_text(GTK_ENTRY(entry),GTK_ENTRY_ICON_SECONDARY,NULL);
        }else if ((!is_known) && (active==starred)){
+               gtk_entry_set_icon_tooltip_text(GTK_ENTRY(entry),GTK_ENTRY_ICON_SECONDARY,_("Add to addressbook"));
                gtk_entry_set_icon_from_pixbuf(entry,GTK_ENTRY_ICON_SECONDARY,unstarred);
        }
 }
index 6a2dc0cda96370628ffe1fb442274c67cd049136..0fc8a5545d87bbf2ab026bd60ee0ca314e493990 100644 (file)
@@ -319,6 +319,67 @@ static gboolean linphone_gtk_in_call_view_refresh(LinphoneCall *call){
        return TRUE;
 }
 
+typedef float (*get_volume_t)(void *data);
+
+typedef struct _volume_ctx{
+       GtkWidget *widget;
+       get_volume_t get_volume;
+       void *data;
+       float last_value;
+}volume_ctx_t;
+
+#define UNSIGNIFICANT_VOLUME (-26)
+#define SMOOTH 0.15
+
+static gboolean update_audio_meter(volume_ctx_t *ctx){
+       float volume_db=ctx->get_volume(ctx->data);
+       float frac=(volume_db-UNSIGNIFICANT_VOLUME)/(float)(-UNSIGNIFICANT_VOLUME+3.0);
+       if (frac<0) frac=0;
+       if (frac>1.0) frac=1.0;
+       if (frac<ctx->last_value){
+               frac=(frac*SMOOTH)+(ctx->last_value*(1-SMOOTH));
+       }
+       ctx->last_value=frac;
+       //g_message("volume_db=%f, frac=%f",volume_db,frac);
+       gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ctx->widget),frac);
+       return TRUE;
+}
+
+static void on_audio_meter_destroy(guint task_id){
+       g_source_remove(task_id);
+}
+
+void linphone_gtk_init_audio_meter(GtkWidget *w, get_volume_t get_volume, void *data){
+       guint task_id=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w),"task_id"));
+       if (task_id==0){
+               volume_ctx_t *ctx=g_new(volume_ctx_t,1);
+               ctx->widget=w;
+               ctx->get_volume=get_volume;
+               ctx->data=data;
+               ctx->last_value=0;
+               g_object_set_data_full(G_OBJECT(w),"ctx",ctx,g_free);
+               task_id=g_timeout_add(50,(GSourceFunc)update_audio_meter,ctx);
+               g_object_set_data_full(G_OBJECT(w),"task_id",GINT_TO_POINTER(task_id),(GDestroyNotify)on_audio_meter_destroy);
+       }
+}
+
+void linphone_gtk_in_call_view_enable_audio_view(LinphoneCall *call){
+       GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer(call);
+       GtkWidget *audio_view=linphone_gtk_get_widget(callview,"incall_audioview");
+       //GtkWidget *mic=linphone_gtk_get_widget(callview,"incall_mic_icon");
+       GtkWidget *spk=linphone_gtk_get_widget(callview,"incall_spk_icon");
+       GtkWidget *mic_level=linphone_gtk_get_widget(callview,"mic_audiolevel");
+       GtkWidget *spk_level=linphone_gtk_get_widget(callview,"spk_audiolevel");
+       GdkPixbuf *pbuf;
+       //gtk_image_set_from_pixbuf(GTK_IMAGE(mic),(pbuf=create_pixbuf("mic_active.png")));
+       //g_object_unref(pbuf);
+       gtk_image_set_from_pixbuf(GTK_IMAGE(spk),(pbuf=create_pixbuf("speaker.png")));
+       g_object_unref(pbuf);
+       linphone_gtk_init_audio_meter(mic_level,(get_volume_t)linphone_call_get_record_volume,call);
+       linphone_gtk_init_audio_meter(spk_level,(get_volume_t)linphone_call_get_play_volume,call);
+       gtk_widget_show_all(audio_view);
+}
+
 void linphone_gtk_in_call_view_set_in_call(LinphoneCall *call){
        GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer(call);
        GtkWidget *status=linphone_gtk_get_widget(callview,"in_call_status");
@@ -340,6 +401,7 @@ void linphone_gtk_in_call_view_set_in_call(LinphoneCall *call){
                taskid=g_timeout_add(250,(GSourceFunc)linphone_gtk_in_call_view_refresh,call);
                g_object_set_data(G_OBJECT(callview),"taskid",GINT_TO_POINTER(taskid));
        }
+       linphone_gtk_in_call_view_enable_audio_view(call);
 }
 
 void linphone_gtk_in_call_view_set_paused(LinphoneCall *call){
@@ -383,6 +445,7 @@ void linphone_gtk_in_call_view_terminate(LinphoneCall *call, const char *error_m
                   linphone_gtk_get_ui_config("stop_call_icon","stopcall-red.png"),FALSE);
        
        gtk_widget_hide(linphone_gtk_get_widget(callview,"answer_decline_panel"));
+       gtk_widget_hide(linphone_gtk_get_widget(callview,"incall_audioview"));
        linphone_gtk_enable_mute_button(
                GTK_BUTTON(linphone_gtk_get_widget(callview,"incall_mute")),FALSE);
        linphone_gtk_enable_hold_button(call,FALSE,TRUE);
@@ -394,14 +457,14 @@ void linphone_gtk_draw_mute_button(GtkButton *button, gboolean active){
        g_object_set_data(G_OBJECT(button),"active",GINT_TO_POINTER(active));
        if (active){
                GtkWidget *image=create_pixmap("mic_muted.png");
-               gtk_button_set_label(GTK_BUTTON(button),_("Unmute"));
+               /*gtk_button_set_label(GTK_BUTTON(button),_("Unmute"));*/
                if (image!=NULL) {
                        gtk_button_set_image(GTK_BUTTON(button),image);
                        gtk_widget_show(image);
                }
        }else{
                GtkWidget *image=create_pixmap("mic_active.png");
-               gtk_button_set_label(GTK_BUTTON(button),_("Mute"));
+               /*gtk_button_set_label(GTK_BUTTON(button),_("Mute"));*/
                if (image!=NULL) {
                        gtk_button_set_image(GTK_BUTTON(button),image);
                        gtk_widget_show(image);
@@ -417,7 +480,8 @@ void linphone_gtk_mute_clicked(GtkButton *button){
 
 void linphone_gtk_enable_mute_button(GtkButton *button, gboolean sensitive)
 {
-       gtk_widget_set_sensitive(GTK_WIDGET(button),sensitive);
+       /*gtk_widget_set_sensitive(GTK_WIDGET(button),sensitive);*/
+       gtk_widget_set_visible(GTK_WIDGET(button),sensitive);
        linphone_gtk_draw_mute_button(button,FALSE);
 }
 
@@ -459,5 +523,6 @@ void linphone_gtk_enable_hold_button(LinphoneCall *call, gboolean sensitive, gbo
        g_return_if_fail(callview!=NULL);
        button=linphone_gtk_get_widget(callview,"hold_call");
        gtk_widget_set_sensitive(GTK_WIDGET(button),sensitive);
+       gtk_widget_set_visible(GTK_WIDGET(button),sensitive);
        linphone_gtk_draw_hold_button(GTK_BUTTON(button),!holdon);
 }
index be32459e50fe5aa934359e875cd7b38b946674c4..e3a7b2742a8a992a6faecffe4707dea53a3ea85c 100644 (file)
@@ -321,6 +321,7 @@ GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_n
                return NULL;
        }
        g_object_set_data(G_OBJECT(w),"builder",builder);
+       g_signal_connect_swapped(G_OBJECT(w),"destroy",(GCallback)g_object_unref,builder);
        gtk_builder_connect_signals(builder,w);
        return w;
 }
@@ -1554,13 +1555,13 @@ static void linphone_gtk_check_soundcards(){
 
 static void linphone_gtk_quit(void){
        linphone_gtk_uninit_instance();
-       gdk_threads_leave();
        linphone_gtk_destroy_log_window();
        linphone_core_destroy(the_core);
        linphone_gtk_log_uninit();
 #ifdef HAVE_NOTIFY
        notify_uninit();
 #endif
+       gdk_threads_leave();
 }
 
 #ifdef HAVE_GTK_OSX
index 6bd4cf9dae08daf09ac3f0c6cd48a2731a86b069..1a8fe13c65e7fbb11219a58b8b93b8f0a479ac6d 100644 (file)
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <child>
-                  <object class="GtkHBox" id="in_call_animation">
+                  <object class="GtkHBox" id="incall_hbox1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <child>
-                      <placeholder/>
+                      <object class="GtkVBox" id="in_call_animation">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="in_call_uri">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">label</property>
+                        <property name="justify">center</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
                     </child>
                   </object>
                   <packing>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="in_call_uri">
-                    <property name="visible">True</property>
+                  <object class="GtkHBox" id="incall_audioview">
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">label</property>
-                    <property name="justify">center</property>
+                    <child>
+                      <object class="GtkButton" id="incall_mute">
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="use_action_appearance">False</property>
+                        <property name="relief">half</property>
+                        <signal name="clicked" handler="linphone_gtk_mute_clicked" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkProgressBar" id="mic_audiolevel">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkImage" id="incall_spk_icon">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="stock">gtk-missing-image</property>
+                        <property name="icon-size">1</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">False</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkProgressBar" id="spk_audiolevel">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="pack_type">end</property>
+                        <property name="position">3</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
-                    <property name="expand">True</property>
-                    <property name="fill">True</property>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
                     <property name="position">2</property>
                   </packing>
                 </child>
-                <child>
-                  <object class="GtkHButtonBox" id="incall_hbuttonbox1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <child>
-                      <object class="GtkButton" id="incall_mute">
-                        <property name="label" translatable="yes">Mute</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>
-                        <signal name="clicked" handler="linphone_gtk_mute_clicked" swapped="no"/>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">3</property>
-                  </packing>
-                </child>
                 <child>
                   <object class="GtkHButtonBox" id="mute_pause_buttons">
                     <property name="visible">True</property>
                     <child>
                       <object class="GtkButton" id="hold_call">
                         <property name="label" translatable="yes">Pause</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>
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">False</property>
-                    <property name="position">4</property>
+                    <property name="position">3</property>
                   </packing>
                 </child>
               </object>
index 3ebe0396cbdb8cd49c0bbf262a87a9160bd13e64..5d342746830a6cc2aec1d3abb2d9abb898925292 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 3ebe0396cbdb8cd49c0bbf262a87a9160bd13e64
+Subproject commit 5d342746830a6cc2aec1d3abb2d9abb898925292
diff --git a/oRTP b/oRTP
index 5b231b8e0b9d82ccb93463ef4c2c28e15d68ba76..a56d7f752717bea7d92cf63a6d187c2f6361d38b 160000 (submodule)
--- a/oRTP
+++ b/oRTP
@@ -1 +1 @@
-Subproject commit 5b231b8e0b9d82ccb93463ef4c2c28e15d68ba76
+Subproject commit a56d7f752717bea7d92cf63a6d187c2f6361d38b
index 8a9201275903f62d44537cc9fb78cb324ede78c9..60194fcd866add4b5fe5f3caf9c72a23b8c5b6f4 100644 (file)
@@ -13,6 +13,7 @@ status-red.png \
 status-offline.png \
 contact-orange.png dialer-orange.png history-orange.png\
 startcall-green.png stopcall-red.png addcall-green.png linphone.icns \
-contact_starred.png contact_unstarred.png
+contact_starred.png contact_unstarred.png \
+speaker.png
 
 EXTRA_DIST=$(pixmap_DATA)
index 6625269932c25f6b9567d12822b961634a9b33b7..349daad4b1907b349f31bc59826e39156b6be9d1 100644 (file)
Binary files a/pixmaps/mic_active.png and b/pixmaps/mic_active.png differ
index f813691fc5c3ca6840ef2d25901780c77692abb4..e540d00312a56fba38d8126a55c91333fbf3a84e 100644 (file)
Binary files a/pixmaps/mic_muted.png and b/pixmaps/mic_muted.png differ
diff --git a/pixmaps/speaker.png b/pixmaps/speaker.png
new file mode 100644 (file)
index 0000000..acc92db
Binary files /dev/null and b/pixmaps/speaker.png differ