diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 30f5997..461a3ad 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -810,7 +810,7 @@ static void autoreplier_config_init(LinphoneCore *lc) } */ -bool_t linphone_core_tunnel_available(){ +bool_t linphone_core_tunnel_available(void){ #ifdef TUNNEL_ENABLED return TRUE; #else diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index b9cd9ca..7f0b18c 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -1077,7 +1077,7 @@ void linphone_core_init_default_params(LinphoneCore*lc, LinphoneCallParams *para /** * True if tunnel support was compiled. */ -bool_t linphone_core_tunnel_available(); +bool_t linphone_core_tunnel_available(void); /** * Update tunnel using configuration. diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 42d5ff8..1553e04 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -47,6 +47,7 @@ linphone_SOURCES= \ loginframe.c \ singleinstance.c \ conference.c \ + gtkstubs.c \ linphone.h linphone_LDADD=$(ORTP_LIBS) \ diff --git a/gtk/call_logs.ui b/gtk/call_logs.ui index 34c6ba3..e9e404c 100644 --- a/gtk/call_logs.ui +++ b/gtk/call_logs.ui @@ -1,6 +1,6 @@ - + 500 diff --git a/gtk/contact.ui b/gtk/contact.ui index 25ec2be..9963ce2 100644 --- a/gtk/contact.ui +++ b/gtk/contact.ui @@ -1,6 +1,6 @@ - + False diff --git a/gtk/linphone.h b/gtk/linphone.h index 57b5620..d2d0463 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -45,6 +45,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #undef LINPHONE_VERSION #define LINPHONE_VERSION LINPHONE_VERSION_DATE #endif +//Compilation fixes for old gtk versions +#include "gtkstubs.h" GdkPixbuf * create_pixbuf(const gchar *filename); GdkPixbufAnimation *create_pixbuf_animation(const gchar *filename); diff --git a/gtk/log.ui b/gtk/log.ui index 1192534..d7bf38a 100644 --- a/gtk/log.ui +++ b/gtk/log.ui @@ -1,6 +1,6 @@ - + 540 diff --git a/gtk/main.c b/gtk/main.c index 73e99cc..0b04fb8 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -50,6 +50,7 @@ const char *this_program_ident_string="linphone_ident_string=" LINPHONE_VERSION; static LinphoneCore *the_core=NULL; static GtkWidget *the_ui=NULL; +static GtkWidget *the_icon_menu=NULL; static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphoneProxyConfig *cfg, LinphoneRegistrationState rs, const char *msg); static void linphone_gtk_notify_recv(LinphoneCore *lc, LinphoneFriend * fid); @@ -242,6 +243,10 @@ GtkWidget *linphone_gtk_get_main_window(){ return the_ui; } +GtkWidget *linphone_gtk_get_icon_menu(){ + return the_icon_menu; +} + static void linphone_gtk_configure_window(GtkWidget *w, const char *window_name){ static const char *icon_path=NULL; static const char *hiddens=NULL; @@ -333,6 +338,14 @@ GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_n GtkWidget *linphone_gtk_get_widget(GtkWidget *window, const char *name){ GtkBuilder *builder=(GtkBuilder*)g_object_get_data(G_OBJECT(window),"builder"); GObject *w; + if (window==the_icon_menu) { + GList *menu_items=gtk_container_get_children(GTK_CONTAINER(window)); + while (menu_items) { + if (strcmp(gtk_widget_get_name(GTK_WIDGET(menu_items->data)),name) == 0) + return GTK_WIDGET(menu_items->data); + menu_items=menu_items->next; + } + } if (builder==NULL){ g_error("Fail to retrieve builder from window !"); return NULL; @@ -764,9 +777,15 @@ void linphone_gtk_answer_clicked(GtkWidget *button){ void linphone_gtk_enable_video(GtkWidget *w){ gboolean val=gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w)); - GtkWidget *selfview_item=linphone_gtk_get_widget(linphone_gtk_get_main_window(),"selfview_item"); + GtkWidget *selfview_item_menu=linphone_gtk_get_widget(linphone_gtk_get_main_window(),"selfview_item"); + GtkWidget *selfview_item_icon=linphone_gtk_get_widget(linphone_gtk_get_icon_menu(),"selfview_item_icon"); + GtkWidget *video_item_menu=linphone_gtk_get_widget(linphone_gtk_get_main_window(),"enable_video_item"); + GtkWidget *video_item_icon=linphone_gtk_get_widget(linphone_gtk_get_icon_menu(),"enable_video_item_icon"); linphone_core_enable_video(linphone_gtk_get_core(),val,val); - gtk_widget_set_sensitive(selfview_item,val); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(video_item_menu),val); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(video_item_icon),val); + gtk_widget_set_sensitive(selfview_item_menu,val); + gtk_widget_set_sensitive(selfview_item_icon,val); if (val){ linphone_core_enable_video_preview(linphone_gtk_get_core(), linphone_gtk_get_ui_config_int("videoselfview",VIDEOSELFVIEW_DEFAULT)); @@ -778,6 +797,10 @@ void linphone_gtk_enable_video(GtkWidget *w){ void linphone_gtk_enable_self_view(GtkWidget *w){ gboolean val=gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w)); LinphoneCore *lc=linphone_gtk_get_core(); + GtkWidget *selfview_item_menu=linphone_gtk_get_widget(linphone_gtk_get_main_window(),"selfview_item"); + GtkWidget *selfview_item_icon=linphone_gtk_get_widget(linphone_gtk_get_icon_menu(),"selfview_item_icon"); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(selfview_item_menu),val); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(selfview_item_icon),val); linphone_core_enable_video_preview(lc,val); linphone_core_enable_self_view(lc,val); linphone_gtk_set_ui_config_int("videoselfview",val); @@ -1165,6 +1188,23 @@ static GtkWidget *create_icon_menu(){ gchar *tmp; const gchar *homesite; + menu_item=gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES,NULL); + gtk_widget_show(menu_item); + gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item); + g_signal_connect(G_OBJECT(menu_item),"activate",(GCallback)linphone_gtk_show_parameters,NULL); + + menu_item=gtk_check_menu_item_new_with_label("Enable video"); + gtk_widget_set_name(GTK_WIDGET(menu_item),"enable_video_item_icon"); + gtk_widget_show(menu_item); + gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item); + g_signal_connect(G_OBJECT(menu_item),"toggled",(GCallback)linphone_gtk_enable_video,NULL); + + menu_item=gtk_check_menu_item_new_with_label("Enable self-view"); + gtk_widget_set_name(GTK_WIDGET(menu_item),"selfview_item_icon"); + gtk_widget_show(menu_item); + gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item); + g_signal_connect(G_OBJECT(menu_item),"toggled",(GCallback)linphone_gtk_enable_self_view,NULL); + homesite=linphone_gtk_get_ui_config("home","http://www.linphone.org"); menu_item=gtk_image_menu_item_new_with_label(_("Website link")); tmp=g_strdup(homesite); @@ -1183,6 +1223,7 @@ static GtkWidget *create_icon_menu(){ gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item); g_signal_connect_swapped(G_OBJECT(menu_item),"activate",(GCallback)linphone_gtk_show_about,NULL); + menu_item=gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT,NULL); gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item); @@ -1200,7 +1241,7 @@ static void handle_icon_click() { } } -static void linphone_gtk_init_status_icon(){ +static GtkWidget * linphone_gtk_init_status_icon(){ const char *icon_path=linphone_gtk_get_ui_config("icon",LINPHONE_ICON); const char *call_icon_path=linphone_gtk_get_ui_config("start_call_icon","startcall-green.png"); GdkPixbuf *pbuf=create_pixbuf(icon_path); @@ -1219,6 +1260,7 @@ static void linphone_gtk_init_status_icon(){ g_object_weak_ref(G_OBJECT(icon),(GWeakNotify)g_object_unref,pbuf); pbuf=create_pixbuf(call_icon_path); g_object_set_data(G_OBJECT(icon),"call_icon",pbuf); + return GTK_WIDGET(menu); } static gboolean do_icon_blink(GtkStatusIcon *gi){ @@ -1346,10 +1388,14 @@ static void linphone_gtk_check_menu_items(void){ bool_t selfview=linphone_gtk_get_ui_config_int("videoselfview",VIDEOSELFVIEW_DEFAULT); GtkWidget *selfview_item=linphone_gtk_get_widget( linphone_gtk_get_main_window(),"selfview_item"); + GtkWidget *selfview_item_icon=linphone_gtk_get_widget( + linphone_gtk_get_icon_menu(),"selfview_item_icon"); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(linphone_gtk_get_widget( linphone_gtk_get_main_window(),"enable_video_item")), video_enabled); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(selfview_item),selfview); gtk_widget_set_sensitive(selfview_item,video_enabled); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(selfview_item_icon),selfview); + gtk_widget_set_sensitive(selfview_item_icon,video_enabled); } static gboolean linphone_gtk_can_manage_accounts(){ @@ -1719,10 +1765,10 @@ int main(int argc, char *argv[]){ /* do not lower timeouts under 30 ms because it exhibits a bug on gtk+/win32, with cpu running 20% all the time...*/ gtk_timeout_add(30,(GtkFunction)linphone_gtk_iterate,(gpointer)linphone_gtk_get_core()); gtk_timeout_add(30,(GtkFunction)linphone_gtk_check_logs,(gpointer)NULL); - linphone_gtk_init_main_window(); #ifndef HAVE_GTK_OSX - linphone_gtk_init_status_icon(); + the_icon_menu=linphone_gtk_init_status_icon(); #endif + linphone_gtk_init_main_window(); if (!iconified){ linphone_gtk_show_main_window(); linphone_gtk_check_soundcards(); diff --git a/gtk/main.ui b/gtk/main.ui index 2cfe555..2a38300 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -1,6 +1,6 @@ - + False diff --git a/gtk/parameters.ui b/gtk/parameters.ui index 2403b33..df9806f 100644 --- a/gtk/parameters.ui +++ b/gtk/parameters.ui @@ -1,6 +1,6 @@ - + 500 diff --git a/gtk/propertybox.c b/gtk/propertybox.c index 30890c7..c45f34e 100644 --- a/gtk/propertybox.c +++ b/gtk/propertybox.c @@ -989,7 +989,7 @@ void linphone_gtk_show_parameters(void){ g_signal_connect(G_OBJECT(linphone_gtk_get_widget(pb,"proto_combo")),"changed",(GCallback)linphone_gtk_proto_changed,NULL); - if (linphone_core_tunnel_available(lc)){ + if (linphone_core_tunnel_available()){ gtk_widget_set_visible(GTK_WIDGET(linphone_gtk_get_widget(pb,"tunnel_edit_button")), TRUE); gtk_widget_set_visible(GTK_WIDGET(linphone_gtk_get_widget(pb,"tunnel_label")), TRUE); } diff --git a/gtk/tunnel_config.ui b/gtk/tunnel_config.ui index c10ddf2..b985c0b 100644 --- a/gtk/tunnel_config.ui +++ b/gtk/tunnel_config.ui @@ -1,6 +1,6 @@ - + 3600