diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 7039a8225..98f6d811f 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -697,7 +697,7 @@ static void codecs_config_read(LinphoneCore *lc) static void video_config_read(LinphoneCore *lc) { - int capture, display; + int capture, display, self_view; int enabled; const char *str; int ndev; @@ -725,9 +725,10 @@ static void video_config_read(LinphoneCore *lc) enabled=lp_config_get_int(lc->config,"video","enabled",1); capture=lp_config_get_int(lc->config,"video","capture",enabled); display=lp_config_get_int(lc->config,"video","display",enabled); + self_view=lp_config_get_int(lc->config,"video","self_view",enabled); #ifdef VIDEO_ENABLED linphone_core_enable_video(lc,capture,display); - linphone_core_enable_self_view(lc,TRUE); + linphone_core_enable_self_view(lc,self_view); #endif } @@ -2765,11 +2766,6 @@ void linphone_core_enable_video(LinphoneCore *lc, bool_t vcap_enabled, bool_t di lc->video_conf.capture=vcap_enabled; lc->video_conf.display=display_enabled; - if (lc->ready){ - lp_config_set_int(lc->config,"video","display",display_enabled); - lp_config_set_int(lc->config,"video","capture",vcap_enabled); - } - /* need to re-apply network bandwidth settings*/ linphone_core_set_download_bandwidth(lc, linphone_core_get_download_bandwidth(lc)); @@ -2794,7 +2790,6 @@ bool_t linphone_core_video_enabled(LinphoneCore *lc){ **/ void linphone_core_enable_video_preview(LinphoneCore *lc, bool_t val){ lc->video_conf.show_local=val; - if (lc->ready) lp_config_set_int(lc->config,"video","show_local",val); } /** @@ -3149,7 +3144,12 @@ void sound_config_uninit(LinphoneCore *lc) void video_config_uninit(LinphoneCore *lc) { - + lp_config_set_int(lc->config,"video","enabled",linphone_core_video_enabled(lc)); + lp_config_set_string(lc->config,"video","size",video_size_get_name(linphone_core_get_preferred_video_size(lc))); + lp_config_set_int(lc->config,"video","display",lc->video_conf.display); + lp_config_set_int(lc->config,"video","capture",lc->video_conf.capture); + lp_config_set_int(lc->config,"video","show_local",linphone_core_video_preview_enabled(lc)); + lp_config_set_int(lc->config,"video","self_view",linphone_core_self_view_enabled(lc)); } void codecs_config_uninit(LinphoneCore *lc) diff --git a/gtk-glade/main.c b/gtk-glade/main.c index e6e2ac79a..579c3e34a 100644 --- a/gtk-glade/main.c +++ b/gtk-glade/main.c @@ -369,21 +369,37 @@ static void set_video_window_decorations(GdkWindow *w){ char video_title[256]; GdkPixbuf *pbuf=create_pixbuf(icon_path); if (!linphone_core_in_call(linphone_gtk_get_core())){ - snprintf(video_title,sizeof(video_title),"%s video",title); + snprintf(video_title,sizeof(video_title),"%s video",title); + /* When not in call, treat the video as a normal window */ + gdk_window_set_keep_above(w, FALSE); }else{ - const LinphoneAddress *uri=linphone_core_get_remote_uri(linphone_gtk_get_core()); + LinphoneAddress *uri = + linphone_address_clone(linphone_core_get_remote_uri(linphone_gtk_get_core())); char *display_name; - if (linphone_address_get_display_name(uri)!=NULL) + + linphone_address_clean(uri); + if (linphone_address_get_display_name(uri)!=NULL){ display_name=ms_strdup(linphone_address_get_display_name(uri)); - else{ + }else{ display_name=linphone_address_as_string(uri); } snprintf(video_title,sizeof(video_title),_("Call with %s"),display_name); + linphone_address_destroy(uri); ms_free(display_name); + + /* During calls, bring up the video window, arrange so that + it is above all the other windows */ + gdk_window_deiconify(w); + gdk_window_set_keep_above(w,TRUE); + /* Maybe we should have the following, but then we want to + have a timer that turns it off after a little while. */ + /* gdk_window_set_urgency_hint(w,TRUE); */ } gdk_window_set_title(w,video_title); - /*gdk_window_set_urgency_hint(w,TRUE);*/ - gdk_window_raise(w); + /* Refrain the video window to be closed at all times. */ + gdk_window_set_functions(w, + GDK_FUNC_RESIZE|GDK_FUNC_MOVE| + GDK_FUNC_MINIMIZE|GDK_FUNC_MAXIMIZE); if (pbuf){ GList *l=NULL; l=g_list_append(l,pbuf);