From 4f0a5e997f6cd503e0bf6e9154a682169134f80e Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Wed, 26 May 2021 22:12:46 -0300 Subject: [PATCH] Adding method to vinculate dialog with toplevel, preserving the icon. --- src/dialogs/dialog.c | 4 ++-- src/dialogs/load.c | 2 +- src/dialogs/print/settingsdialog.c | 2 +- src/dialogs/save/save.c | 2 +- src/dialogs/security.c | 3 ++- src/dialogs/settings/dialog.c | 4 ++-- src/dialogs/settings/host.c | 2 +- src/dialogs/transfer.c | 2 +- src/filetransfer/transfer.c | 4 ++-- src/filetransfer/v3270ft.c | 3 ++- src/include/v3270/tools.h | 4 ++++ src/terminal/actions.c | 2 +- src/terminal/actions/dialog.c | 4 +++- src/testprogram/toolbar.c | 2 +- src/tools/dialog.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/trace/tracewindow.c | 3 ++- v3270.cbp | 3 +++ 17 files changed, 86 insertions(+), 17 deletions(-) create mode 100644 src/tools/dialog.c diff --git a/src/dialogs/dialog.c b/src/dialogs/dialog.c index f578a36..e62a342 100644 --- a/src/dialogs/dialog.c +++ b/src/dialogs/dialog.c @@ -80,9 +80,9 @@ // Setup window gtk_window_set_title(GTK_WINDOW(dialog),title); gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); - gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(widget))); - gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); + gtk_dialog_set_toplevel(dialog,widget); + gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL); diff --git a/src/dialogs/load.c b/src/dialogs/load.c index 70a1fa5..d38d70b 100644 --- a/src/dialogs/load.c +++ b/src/dialogs/load.c @@ -246,7 +246,7 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ if(filename && *filename) gtk_entry_set_text(GTK_ENTRY(dialog->filename),filename); - gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(widget))); + gtk_dialog_set_toplevel(GTK_WIDGET(dialog),widget); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); diff --git a/src/dialogs/print/settingsdialog.c b/src/dialogs/print/settingsdialog.c index 66ef8ac..52134d8 100644 --- a/src/dialogs/print/settingsdialog.c +++ b/src/dialogs/print/settingsdialog.c @@ -463,7 +463,7 @@ LIB3270_EXPORT GtkWidget * v3270_ft_settings_dialog_new(GtkWidget *parent) if(parent) { - gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(parent))); + gtk_dialog_set_toplevel(dialog,parent); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); } diff --git a/src/dialogs/save/save.c b/src/dialogs/save/save.c index 915c077..b34d7f3 100644 --- a/src/dialogs/save/save.c +++ b/src/dialogs/save/save.c @@ -386,7 +386,7 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); #endif // G_OS_UNIX - gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(widget))); + gtk_dialog_set_toplevel(dialog,widget); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); diff --git a/src/dialogs/security.c b/src/dialogs/security.c index 35e9ebb..9cf82df 100644 --- a/src/dialogs/security.c +++ b/src/dialogs/security.c @@ -36,6 +36,7 @@ #include #include #include + #include #include @@ -237,7 +238,7 @@ gtk_window_set_title(GTK_WINDOW(dialog),_("About security")); gtk_window_set_default_size(GTK_WINDOW(dialog), 800, 500); - gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(widget))); + gtk_dialog_set_toplevel(dialog,widget); gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),v3270_security_dialog_new(widget),TRUE,TRUE,2); diff --git a/src/dialogs/settings/dialog.c b/src/dialogs/settings/dialog.c index 69ff8a9..cc6cc7f 100644 --- a/src/dialogs/settings/dialog.c +++ b/src/dialogs/settings/dialog.c @@ -344,7 +344,7 @@ void v3270_settings_popup_dialog(GtkWidget *widget, GtkWidget *terminal, gboolea gtk_window_set_title(GTK_WINDOW(dialog),settings->title); gtk_container_add(GTK_CONTAINER(dialog), widget); - gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(terminal))); + gtk_dialog_set_toplevel(dialog,terminal); gtk_window_set_modal(GTK_WINDOW(dialog),modal); @@ -368,7 +368,7 @@ GtkWidget * v3270_settings_get_edit_dialog(GtkWidget *settings, GtkWidget *termi gtk_container_add(GTK_CONTAINER(dialog), settings); - gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(terminal))); + gtk_dialog_set_toplevel(dialog,terminal); gtk_window_set_modal(GTK_WINDOW(dialog),modal); gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); diff --git a/src/dialogs/settings/host.c b/src/dialogs/settings/host.c index d7efffe..135e842 100644 --- a/src/dialogs/settings/host.c +++ b/src/dialogs/settings/host.c @@ -599,7 +599,7 @@ LIB3270_EXPORT void v3270_select_host(GtkWidget *widget) gtk_window_set_title(GTK_WINDOW(dialog), v3270_settings_get_title(settings)); gtk_container_add(GTK_CONTAINER(dialog), settings); - gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(widget))); + gtk_dialog_set_toplevel(dialog,widget); gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); v3270_settings_dialog_set_terminal_widget(dialog, widget); diff --git a/src/dialogs/transfer.c b/src/dialogs/transfer.c index 4a0229f..80f84c2 100644 --- a/src/dialogs/transfer.c +++ b/src/dialogs/transfer.c @@ -188,7 +188,7 @@ LIB3270_EXPORT gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION opt g_signal_connect(save_button,"clicked",G_CALLBACK(save_activity_clicked),activity); } - gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(widget))); + gtk_dialog_set_toplevel(dialog,widget); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); diff --git a/src/filetransfer/transfer.c b/src/filetransfer/transfer.c index 3c615bd..48e8110 100644 --- a/src/filetransfer/transfer.c +++ b/src/filetransfer/transfer.c @@ -30,6 +30,7 @@ #include #include "private.h" + #include /*--[ Statics ]--------------------------------------------------------------------------------------*/ @@ -138,8 +139,7 @@ LIB3270_EXPORT gint v3270ft_transfer(GtkWidget *dialog, H3270 *session) { GtkWidget * progress = v3270ftprogress_new(); gint rc = GTK_RESPONSE_NONE; - gtk_window_set_transient_for(GTK_WINDOW(progress),GTK_WINDOW(dialog)); -// gtk_window_set_deletable(progress,FALSE); + gtk_dialog_set_toplevel(progress,dialog); v3270ft_select_first(dialog); v3270ftprogress_set_session(progress,session); diff --git a/src/filetransfer/v3270ft.c b/src/filetransfer/v3270ft.c index 6fdbd45..cd4e058 100644 --- a/src/filetransfer/v3270ft.c +++ b/src/filetransfer/v3270ft.c @@ -37,6 +37,7 @@ #include #include + #include #include "private.h" @@ -743,7 +744,7 @@ LIB3270_EXPORT GtkWidget * v3270ft_new(GtkWidget *parent) { #endif - gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(parent))); + gtk_dialog_set_toplevel(dialog,parent); return dialog; } diff --git a/src/include/v3270/tools.h b/src/include/v3270/tools.h index e68e20f..7679ca1 100644 --- a/src/include/v3270/tools.h +++ b/src/include/v3270/tools.h @@ -43,6 +43,10 @@ /// @brief Bind file chooser with entry field. LIB3270_EXPORT void gtk_entry_bind_to_filechooser(GtkWidget *widget, GtkFileChooserAction action, const gchar *title, const gchar *icon_name, const gchar *pattern, const gchar *name); + /// @brief Bind dialog with toplevel + LIB3270_EXPORT void gtk_dialog_set_toplevel(GtkWidget *dialog, GtkWidget *widget); + + G_END_DECLS #endif // V3270_TOOLS_H_INCLUDED diff --git a/src/terminal/actions.c b/src/terminal/actions.c index 3ed2869..1b0152e 100644 --- a/src/terminal/actions.c +++ b/src/terminal/actions.c @@ -71,7 +71,7 @@ void v3270_activate(GtkWidget *widget) { gtk_container_add(GTK_CONTAINER(dialog), v3270_host_settings_new()); gtk_window_set_title(GTK_WINDOW(dialog),_("Setup host properties")); - gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(widget))); + gtk_dialog_set_toplevel(dialog,widget); v3270_settings_dialog_set_terminal_widget(dialog, widget); g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL); diff --git a/src/terminal/actions/dialog.c b/src/terminal/actions/dialog.c index 49ae146..3d2d058 100644 --- a/src/terminal/actions/dialog.c +++ b/src/terminal/actions/dialog.c @@ -36,6 +36,7 @@ #include #include #include + #include #define V3270_TYPE_DIALOG_ACTION (V3270DialogAction_get_type()) #define V3270_DIALOG_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), V3270_TYPE_DIALOG_ACTION, V3270DialogAction)) @@ -125,8 +126,9 @@ GtkWidget * window = gtk_widget_get_toplevel(terminal); if(window) { + gtk_dialog_set_toplevel(action->dialog,window); gtk_window_set_attached_to(GTK_WINDOW(action->dialog), window); - gtk_window_set_transient_for(GTK_WINDOW(action->dialog),GTK_WINDOW(window)); + gtk_dialog_set_toplevel(action->dialog,window); } g_signal_connect(action->dialog,"destroy",G_CALLBACK(on_destroy),action); diff --git a/src/testprogram/toolbar.c b/src/testprogram/toolbar.c index 9a7c988..47a58c4 100644 --- a/src/testprogram/toolbar.c +++ b/src/testprogram/toolbar.c @@ -87,7 +87,7 @@ gtk_container_add(GTK_CONTAINER(dialog), widgets[ix]); } - gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(terminal))); + gtk_dialog_set_toplevel(dialog,terminal); v3270_settings_dialog_set_terminal_widget(dialog, terminal); diff --git a/src/tools/dialog.c b/src/tools/dialog.c new file mode 100644 index 0000000..45cf7ae --- /dev/null +++ b/src/tools/dialog.c @@ -0,0 +1,57 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como - e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + + /** + * @brief Usefull extensions for GtkDialog. + * + */ + + #include + #include + #include + + LIB3270_EXPORT void gtk_dialog_set_toplevel(GtkWidget *dialog, GtkWidget *widget) { + + if(widget) { + + GtkWidget * toplevel = GTK_WINDOW(gtk_widget_get_toplevel(widget)); + + gtk_window_set_transient_for( + GTK_WINDOW(dialog), + toplevel + ); + + gtk_window_set_icon( + GTK_WINDOW(dialog), + gtk_window_get_icon(toplevel) + ); + + } + + } diff --git a/src/trace/tracewindow.c b/src/trace/tracewindow.c index 99f9592..3f7630c 100644 --- a/src/trace/tracewindow.c +++ b/src/trace/tracewindow.c @@ -38,6 +38,7 @@ #include #include + #include #define ENABLE_NLS @@ -89,7 +90,7 @@ GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); GtkWidget * trace = v3270_trace_new(widget); - gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(gtk_widget_get_toplevel(widget))); + gtk_dialog_set_toplevel(window,widget); gtk_window_set_destroy_with_parent(GTK_WINDOW(window),TRUE); // Set window title and default size diff --git a/v3270.cbp b/v3270.cbp index 4e800d8..181d36d 100644 --- a/v3270.cbp +++ b/v3270.cbp @@ -409,6 +409,9 @@ + + -- libgit2 0.21.2