From b96bf923d686c4c22e8a442599b9857f095a2e23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Wed, 24 Jun 2015 23:11:44 +0200 Subject: [PATCH] Make some sub-windows transient --- gtk/audio_assistant.c | 2 +- gtk/buddylookup.c | 2 +- gtk/calllogs.c | 32 ++++++++++++++++---------------- gtk/config-fetching.c | 4 ++-- gtk/friendlist.c | 12 +++++------- gtk/incall_view.c | 2 +- gtk/linphone.h | 4 ++-- gtk/logging.c | 2 +- gtk/main.c | 20 ++++++++++++++------ gtk/propertybox.c | 11 ++++++----- gtk/utils.c | 2 +- 11 files changed, 50 insertions(+), 43 deletions(-) diff --git a/gtk/audio_assistant.c b/gtk/audio_assistant.c index 815752a2d..718802a73 100644 --- a/gtk/audio_assistant.c +++ b/gtk/audio_assistant.c @@ -497,7 +497,7 @@ void linphone_gtk_show_audio_assistant(void){ GtkWidget *end_page; if(audio_assistant!=NULL) return; - w=audio_assistant=linphone_gtk_create_window("audio_assistant"); + w=audio_assistant=linphone_gtk_create_window("audio_assistant", linphone_gtk_get_main_window()); gtk_window_set_resizable (GTK_WINDOW(w), FALSE); gtk_window_set_title(GTK_WINDOW(w),_("Audio Assistant")); diff --git a/gtk/buddylookup.c b/gtk/buddylookup.c index 4a6cb8d7a..3251611d2 100644 --- a/gtk/buddylookup.c +++ b/gtk/buddylookup.c @@ -71,7 +71,7 @@ GtkWidget * linphone_gtk_show_buddy_lookup_window(SipSetupContext *ctx){ GtkCellRenderer *renderer,*pbuf_renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; - GtkWidget *w=linphone_gtk_create_window("buddylookup"); + GtkWidget *w=linphone_gtk_create_window("buddylookup", NULL); GtkWidget *results=linphone_gtk_get_widget(w,"search_results"); GtkProgressBar *pb=GTK_PROGRESS_BAR(linphone_gtk_get_widget(w,"progressbar")); diff --git a/gtk/calllogs.c b/gtk/calllogs.c index d6895ae33..a6af60257 100644 --- a/gtk/calllogs.c +++ b/gtk/calllogs.c @@ -88,7 +88,7 @@ void linphone_gtk_call_log_add_contact(GtkWidget *w){ if (la != NULL){ char *uri=linphone_address_as_string(la); lf=linphone_friend_new_with_address(uri); - linphone_gtk_show_contact(lf, GTK_WINDOW(main_window)); + linphone_gtk_show_contact(lf, main_window); ms_free(uri); } } @@ -399,18 +399,18 @@ void linphone_gtk_call_log_response(GtkWidget *w, guint response_id){ gtk_widget_destroy(w); } -GtkWidget * linphone_gtk_show_call_logs(void){ - GtkWidget *mw=linphone_gtk_get_main_window(); - - GtkWidget *w=(GtkWidget*)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"call_logs"); - if (w==NULL){ - w=linphone_gtk_create_window("call_logs"); -// gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"call_back_button")), -// create_pixmap (linphone_gtk_get_ui_config("callback_button","status-green.png"))); - g_object_set_data(G_OBJECT(mw),"call_logs",w); - g_signal_connect(G_OBJECT(w),"response",(GCallback)linphone_gtk_call_log_response,NULL); - gtk_widget_show(w); - linphone_gtk_call_log_update(w); - }else gtk_window_present(GTK_WINDOW(w)); - return w; -} +// GtkWidget * linphone_gtk_show_call_logs(void){ +// GtkWidget *mw=linphone_gtk_get_main_window(); +// +// GtkWidget *w=(GtkWidget*)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"call_logs"); +// if (w==NULL){ +// w=linphone_gtk_create_window("call_logs"); +// // gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"call_back_button")), +// // create_pixmap (linphone_gtk_get_ui_config("callback_button","status-green.png"))); +// g_object_set_data(G_OBJECT(mw),"call_logs",w); +// g_signal_connect(G_OBJECT(w),"response",(GCallback)linphone_gtk_call_log_response,NULL); +// gtk_widget_show(w); +// linphone_gtk_call_log_update(w); +// }else gtk_window_present(GTK_WINDOW(w)); +// return w; +// } diff --git a/gtk/config-fetching.c b/gtk/config-fetching.c index e275662e1..b1794eea9 100644 --- a/gtk/config-fetching.c +++ b/gtk/config-fetching.c @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. void linphone_gtk_set_configuration_uri(void){ - GtkWidget *w=linphone_gtk_create_window("config-uri"); + GtkWidget *w=linphone_gtk_create_window("config-uri", linphone_gtk_get_main_window()); GtkWidget *entry=linphone_gtk_get_widget(w,"uri_entry"); const char *uri=linphone_core_get_provisioning_uri(linphone_gtk_get_core()); if (uri) gtk_entry_set_text(GTK_ENTRY(entry),uri); @@ -52,7 +52,7 @@ void linphone_gtk_config_uri_cancel(GtkWidget *button){ GtkWidget * linphone_gtk_show_config_fetching(void){ LinphoneCore *lc=linphone_gtk_get_core(); - GtkWidget *w=linphone_gtk_create_window("provisioning-fetch"); + GtkWidget *w=linphone_gtk_create_window("provisioning-fetch", linphone_gtk_get_main_window()); g_message("Fetching started"); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(w),_("fetching from %s"),linphone_core_get_provisioning_uri(lc)); #if GTK_CHECK_VERSION(2,20,0) diff --git a/gtk/friendlist.c b/gtk/friendlist.c index 838ee1e93..2164e1505 100644 --- a/gtk/friendlist.c +++ b/gtk/friendlist.c @@ -149,7 +149,7 @@ static void linphone_gtk_set_selection_to_uri_bar(GtkTreeView *treeview){ } void linphone_gtk_add_contact(void){ - GtkWidget *w=linphone_gtk_create_window("contact"); + GtkWidget *w=linphone_gtk_create_window("contact", linphone_gtk_get_main_window()); int presence_enabled=linphone_gtk_get_ui_config_int("use_subscribe_notify",1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"show_presence")),presence_enabled); @@ -168,7 +168,7 @@ void linphone_gtk_edit_contact(GtkWidget *button){ if (gtk_tree_selection_get_selected (select, &model, &iter)) { gtk_tree_model_get (model, &iter,FRIEND_ID , &lf, -1); - linphone_gtk_show_contact(lf, GTK_WINDOW(w)); + linphone_gtk_show_contact(lf, w); } } @@ -488,7 +488,7 @@ static void icon_press_handler(GtkEntry *entry){ lf=linphone_friend_new(); if (lf!=NULL){ linphone_friend_set_address(lf,addr); - linphone_gtk_show_contact(lf, GTK_WINDOW(w)); + linphone_gtk_show_contact(lf, w); } linphone_address_destroy(addr); } @@ -870,8 +870,8 @@ void linphone_gtk_show_friends(void){ ms_list_free(sorted); } -void linphone_gtk_show_contact(LinphoneFriend *lf, GtkWindow *parent){ - GtkWidget *w=linphone_gtk_create_window("contact"); +void linphone_gtk_show_contact(LinphoneFriend *lf, GtkWidget *parent){ + GtkWidget *w=linphone_gtk_create_window("contact", parent); char *uri; const char *name; const LinphoneAddress *f_uri=linphone_friend_get_address(lf); @@ -890,8 +890,6 @@ void linphone_gtk_show_contact(LinphoneFriend *lf, GtkWindow *parent){ linphone_friend_get_inc_subscribe_policy(lf)==LinphoneSPAccept); g_object_set_data(G_OBJECT(w),"friend_ref",(gpointer)lf); - gtk_window_set_transient_for(GTK_WINDOW(w), parent); - gtk_widget_show(w); } diff --git a/gtk/incall_view.c b/gtk/incall_view.c index f291afcb5..cb7d1ac0c 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -338,7 +338,7 @@ static void linphone_gtk_show_call_stats(LinphoneCall *call){ GtkWidget *call_stats=(GtkWidget*)g_object_get_data(G_OBJECT(w),"call_stats"); if (call_stats==NULL){ guint tid; - call_stats=linphone_gtk_create_window("call_statistics"); + call_stats=linphone_gtk_create_window("call_statistics", NULL); g_object_set_data(G_OBJECT(w),"call_stats",call_stats); g_object_set_data(G_OBJECT(call_stats),"call",linphone_call_ref(call)); tid=g_timeout_add(1000,(GSourceFunc)refresh_call_stats,call_stats); diff --git a/gtk/linphone.h b/gtk/linphone.h index a8cf417b4..b4bbf02c2 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -84,7 +84,7 @@ GtkWidget *_gtk_image_new_from_memory_at_scale(const void *data, gint len, gint GdkPixbuf *_gdk_pixbuf_new_from_memory_at_scale(const void *data, gint len, gint w, gint h, gboolean preserve_ratio); LINPHONE_PUBLIC void linphone_gtk_destroy_window(GtkWidget *window); -LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_window(const char *window_name); +LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_window(const char *window_name, GtkWidget *parent); LINPHONE_PUBLIC GtkWidget *linphone_gtk_get_widget(GtkWidget *window, const char *name); LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_name); @@ -147,7 +147,7 @@ LINPHONE_PUBLIC void linphone_gtk_friend_list_set_active_address(const LinphoneA LINPHONE_PUBLIC const LinphoneAddress *linphone_gtk_friend_list_get_active_address(void); LINPHONE_PUBLIC void linphone_gtk_notebook_tab_select(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer data); LINPHONE_PUBLIC void linphone_gtk_show_friends(void); -LINPHONE_PUBLIC void linphone_gtk_show_contact(LinphoneFriend* lf, GtkWindow* parent); +LINPHONE_PUBLIC void linphone_gtk_show_contact(LinphoneFriend *lf, GtkWidget *parent); LINPHONE_PUBLIC void linphone_gtk_buddy_info_updated(LinphoneCore *lc, LinphoneFriend *lf); /*functions controlling the different views*/ diff --git a/gtk/logging.c b/gtk/logging.c index c91f51138..00d40227a 100644 --- a/gtk/logging.c +++ b/gtk/logging.c @@ -209,7 +209,7 @@ void linphone_gtk_log_hide(void){ void linphone_gtk_create_log_window(void){ GtkTextBuffer *b; - log_window=linphone_gtk_create_window("log"); + log_window=linphone_gtk_create_window("log", NULL); b=gtk_text_view_get_buffer(GTK_TEXT_VIEW(linphone_gtk_get_widget(log_window,"textview"))); gtk_text_buffer_create_tag(b,"red","foreground","red",NULL); gtk_text_buffer_create_tag(b,"orange","foreground","orange",NULL); diff --git a/gtk/main.c b/gtk/main.c index 2f37fd843..147738bba 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -379,7 +379,7 @@ void linphone_gtk_destroy_window(GtkWidget *widget) { g_object_unref (G_OBJECT (builder)); } -GtkWidget *linphone_gtk_create_window(const char *window_name){ +GtkWidget *linphone_gtk_create_window(const char *window_name, GtkWidget *parent){ GError* error = NULL; GtkBuilder* builder = gtk_builder_new (); char path[512]; @@ -402,6 +402,12 @@ GtkWidget *linphone_gtk_create_window(const char *window_name){ g_object_set_data(G_OBJECT(w), "builder",builder); gtk_builder_connect_signals(builder,w); linphone_gtk_configure_window(w,window_name); + if(parent) { + gtk_window_set_modal(GTK_WINDOW(w), TRUE); + gtk_window_set_transient_for(GTK_WINDOW(w), GTK_WINDOW(parent)); + } else { + gtk_window_set_modal(GTK_WINDOW(w), FALSE); + } return w; } @@ -527,8 +533,10 @@ void linphone_gtk_show_about(void){ linphone_gtk_get_ui_config("logo","linphone-banner.png")); static const char *defcfg="defcfg"; - about=linphone_gtk_create_window("about"); + about=linphone_gtk_create_window("about", the_ui); + gtk_about_dialog_set_url_hook(about_url_clicked,NULL,NULL); + memset(&filestat,0,sizeof(filestat)); if (stat(license_file,&filestat)!=0){ license_file="COPYING"; @@ -1053,7 +1061,7 @@ static void linphone_gtk_notify_recv(LinphoneCore *lc, LinphoneFriend * fid){ static void linphone_gtk_new_subscriber_response(GtkWidget *dialog, guint response_id, LinphoneFriend *lf){ switch(response_id){ case GTK_RESPONSE_YES: - linphone_gtk_show_contact(lf, GTK_WINDOW(the_ui)); + linphone_gtk_show_contact(lf, the_ui); break; default: linphone_core_reject_subscriber(linphone_gtk_get_core(),lf); @@ -1135,7 +1143,7 @@ void linphone_gtk_password_ok(GtkWidget *w){ } static void linphone_gtk_auth_info_requested(LinphoneCore *lc, const char *realm, const char *username, const char *domain){ - GtkWidget *w=linphone_gtk_create_window("password"); + GtkWidget *w=linphone_gtk_create_window("password", the_ui); GtkWidget *label=linphone_gtk_get_widget(w,"message"); LinphoneAuthInfo *info; gchar *msg; @@ -1871,7 +1879,7 @@ void linphone_gtk_create_keypad(GtkWidget *button){ if(k!=NULL){ gtk_widget_destroy(k); } - keypad=linphone_gtk_create_window("keypad"); + keypad=linphone_gtk_create_window("keypad", NULL); linphone_gtk_connect_digits(keypad); linphone_gtk_init_dtmf_table(keypad); g_object_set_data(G_OBJECT(mw),"keypad",(gpointer)keypad); @@ -2190,7 +2198,7 @@ core_start: return 0; } - the_ui=linphone_gtk_create_window("main"); + the_ui=linphone_gtk_create_window("main", NULL); g_object_set_data(G_OBJECT(the_ui),"is_created",GINT_TO_POINTER(FALSE)); diff --git a/gtk/propertybox.c b/gtk/propertybox.c index 7ecc43c61..ae628d2c1 100644 --- a/gtk/propertybox.c +++ b/gtk/propertybox.c @@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "linphone.h" #include "linphone_tunnel.h" #include "lpconfig.h" +#include "config.h" void linphone_gtk_fill_combo_box(GtkWidget *combo, const char **devices, const char *selected, DeviceCap cap){ const char **p=devices; @@ -153,7 +154,7 @@ static void linphone_gtk_ldap_load_settings(GtkWidget* param) void linphone_gtk_show_ldap_config(GtkWidget* button) { GtkWidget* param = gtk_widget_get_toplevel(button); - GtkWidget* ldap_config = linphone_gtk_create_window("ldap"); + GtkWidget* ldap_config = linphone_gtk_create_window("ldap", param); linphone_gtk_ldap_load_settings(ldap_config); // to refresh parameters when the ldap config is destroyed @@ -998,7 +999,7 @@ void linphone_gtk_proxy_address_changed(GtkEditable *editable){ } void linphone_gtk_show_proxy_config(GtkWidget *pb, LinphoneProxyConfig *cfg){ - GtkWidget *w=linphone_gtk_create_window("sip_account"); + GtkWidget *w=linphone_gtk_create_window("sip_account", gtk_widget_get_toplevel(pb)); const char *tmp; gboolean is_new=FALSE; @@ -1581,7 +1582,7 @@ void linphone_gtk_show_parameters(void){ int min_port = 0, max_port = 0; if (pb==NULL) { - pb=linphone_gtk_create_window("parameters"); + pb=linphone_gtk_create_window("parameters", linphone_gtk_get_main_window()); g_object_set_data(G_OBJECT(mw),"parameters",pb); }else { gtk_widget_show(pb); @@ -1765,7 +1766,7 @@ void linphone_gtk_edit_tunnel_closed(GtkWidget *button){ } void linphone_gtk_edit_tunnel(GtkButton *button){ - GtkWidget *w=linphone_gtk_create_window("tunnel_config"); + GtkWidget *w=linphone_gtk_create_window("tunnel_config", gtk_widget_get_toplevel(GTK_WIDGET(button))); LinphoneCore *lc=linphone_gtk_get_core(); LinphoneTunnel *tunnel=linphone_core_get_tunnel(lc); const MSList *configs; @@ -1863,7 +1864,7 @@ static int read_dscp(GtkWidget *entry){ void linphone_gtk_dscp_edit(void){ LinphoneCore *lc=linphone_gtk_get_core(); - GtkWidget *widget=linphone_gtk_create_window("dscp_settings"); + GtkWidget *widget=linphone_gtk_create_window("dscp_settings", linphone_gtk_get_main_window()); show_dscp(linphone_gtk_get_widget(widget,"sip_dscp"), linphone_core_get_sip_dscp(lc)); show_dscp(linphone_gtk_get_widget(widget,"audio_dscp"), diff --git a/gtk/utils.c b/gtk/utils.c index c03ea462b..fc3ebde92 100644 --- a/gtk/utils.c +++ b/gtk/utils.c @@ -30,7 +30,7 @@ void *linphone_gtk_wait(LinphoneCore *lc, void *ctx, LinphoneWaitingState ws, co switch(ws){ case LinphoneWaitingStart: gdk_threads_enter(); - w=linphone_gtk_create_window("waiting"); + w=linphone_gtk_create_window("waiting", NULL); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(linphone_gtk_get_main_window())); gtk_window_set_position(GTK_WINDOW(w),GTK_WIN_POS_CENTER_ON_PARENT); if (purpose) {