Commit d008acb5f0b13d5faa725988972959c497b2e6cb
1 parent
27646cda
Exists in
master
and in
4 other branches
Refactoring window & application actions.
Showing
15 changed files
with
763 additions
and
551 deletions
Show diff stats
Makefile.in
| ... | ... | @@ -33,6 +33,8 @@ INSTALL_PACKAGES=@INSTALL_PACKAGES@ |
| 33 | 33 | SOURCES= \ |
| 34 | 34 | $(wildcard src/objects/actions/*.c) \ |
| 35 | 35 | $(wildcard src/objects/actions/lib3270/*.c) \ |
| 36 | + $(wildcard src/objects/application/*.c) \ | |
| 37 | + $(wildcard src/objects/application/actions/*.c) \ | |
| 36 | 38 | $(wildcard src/objects/window/*.c) \ |
| 37 | 39 | $(wildcard src/objects/window/actions/*.c) \ |
| 38 | 40 | $(wildcard src/objects/terminal/*.c) \ | ... | ... |
pw3270.cbp
| ... | ... | @@ -79,6 +79,19 @@ |
| 79 | 79 | <Unit filename="src/objects/actions/window.c"> |
| 80 | 80 | <Option compilerVar="CC" /> |
| 81 | 81 | </Unit> |
| 82 | + <Unit filename="src/objects/application/actions/about.c"> | |
| 83 | + <Option compilerVar="CC" /> | |
| 84 | + </Unit> | |
| 85 | + <Unit filename="src/objects/application/actions/preferences.c"> | |
| 86 | + <Option compilerVar="CC" /> | |
| 87 | + </Unit> | |
| 88 | + <Unit filename="src/objects/application/actions/window.c"> | |
| 89 | + <Option compilerVar="CC" /> | |
| 90 | + </Unit> | |
| 91 | + <Unit filename="src/objects/application/application.c"> | |
| 92 | + <Option compilerVar="CC" /> | |
| 93 | + </Unit> | |
| 94 | + <Unit filename="src/objects/application/private.h" /> | |
| 82 | 95 | <Unit filename="src/objects/toolbar/actions.c"> |
| 83 | 96 | <Option compilerVar="CC" /> |
| 84 | 97 | </Unit> |
| ... | ... | @@ -89,13 +102,13 @@ |
| 89 | 102 | <Unit filename="src/objects/toolbar/toolbutton.c"> |
| 90 | 103 | <Option compilerVar="CC" /> |
| 91 | 104 | </Unit> |
| 92 | - <Unit filename="src/objects/window/actions/about.c"> | |
| 105 | + <Unit filename="src/objects/window/actions/close.c"> | |
| 93 | 106 | <Option compilerVar="CC" /> |
| 94 | 107 | </Unit> |
| 95 | - <Unit filename="src/objects/window/actions/window.c"> | |
| 108 | + <Unit filename="src/objects/window/actions/open.c"> | |
| 96 | 109 | <Option compilerVar="CC" /> |
| 97 | 110 | </Unit> |
| 98 | - <Unit filename="src/objects/window/application.c"> | |
| 111 | + <Unit filename="src/objects/window/actions/preferences.c"> | |
| 99 | 112 | <Option compilerVar="CC" /> |
| 100 | 113 | </Unit> |
| 101 | 114 | <Unit filename="src/objects/window/private.h" /> | ... | ... |
| ... | ... | @@ -0,0 +1,128 @@ |
| 1 | +/* | |
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | + * | |
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | + * | |
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | + * Free Software Foundation. | |
| 11 | + * | |
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | + * obter mais detalhes. | |
| 16 | + * | |
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | + * | |
| 21 | + * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | + * | |
| 23 | + * Contatos: | |
| 24 | + * | |
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | + * | |
| 28 | + */ | |
| 29 | + | |
| 30 | + #include "../private.h" | |
| 31 | + #include <pw3270/application.h> | |
| 32 | + | |
| 33 | + void pw3270_application_about_activated(GSimpleAction G_GNUC_UNUSED(* action), GVariant G_GNUC_UNUSED(*parameter), gpointer application) { | |
| 34 | + | |
| 35 | + static const gchar *authors[] = | |
| 36 | + { | |
| 37 | + "Perry Werneck <perry.werneck@gmail.com>", | |
| 38 | + "Paul Mattes <Paul.Mattes@usa.net>", | |
| 39 | + "Georgia Tech Research Corporation (GTRC)", | |
| 40 | + "and others", | |
| 41 | + NULL | |
| 42 | + }; | |
| 43 | + | |
| 44 | + static const gchar *license = | |
| 45 | + N_( "This program is free software; you can redistribute it and/or " | |
| 46 | + "modify it under the terms of the GNU General Public License as " | |
| 47 | + "published by the Free Software Foundation; either version 2 of the " | |
| 48 | + "License, or (at your option) any later version.\n\n" | |
| 49 | + "This program is distributed in the hope that it will be useful, " | |
| 50 | + "but WITHOUT ANY WARRANTY; without even the implied warranty of " | |
| 51 | + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " | |
| 52 | + "GNU General Public License for more details.\n\n" | |
| 53 | + "You should have received a copy of the GNU General Public License " | |
| 54 | + "along with this program; if not, write to the Free Software " | |
| 55 | + "Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 " | |
| 56 | + "USA" ); | |
| 57 | + | |
| 58 | + GtkAboutDialog * dialog = GTK_ABOUT_DIALOG(gtk_about_dialog_new()); | |
| 59 | + | |
| 60 | + // Associate with the window | |
| 61 | + { | |
| 62 | + GtkWindow * window = gtk_application_get_active_window(GTK_APPLICATION(application)); | |
| 63 | + if(window) { | |
| 64 | + gtk_window_set_transient_for(GTK_WINDOW(dialog), window); | |
| 65 | + } | |
| 66 | + } | |
| 67 | + | |
| 68 | + // Get application logo | |
| 69 | + { | |
| 70 | + lib3270_autoptr(char) logo = lib3270_build_data_filename(G_STRINGIFY(PRODUCT_NAME) "-logo.png",NULL); | |
| 71 | + | |
| 72 | + if(g_file_test(logo,G_FILE_TEST_EXISTS)) { | |
| 73 | + GError * error = NULL; | |
| 74 | + GdkPixbuf * pix = gdk_pixbuf_new_from_file(logo,&error); | |
| 75 | + | |
| 76 | + gtk_about_dialog_set_logo(dialog,pix); | |
| 77 | + | |
| 78 | + if(pix) { | |
| 79 | + | |
| 80 | + g_object_unref(pix); | |
| 81 | + | |
| 82 | + } else { | |
| 83 | + | |
| 84 | + g_warning("Can't load %s: %s",logo,error->message); | |
| 85 | + g_error_free(error); | |
| 86 | + | |
| 87 | + } | |
| 88 | + | |
| 89 | + } else { | |
| 90 | + | |
| 91 | + g_message("%s: %s",logo,strerror(ENOENT)); | |
| 92 | + | |
| 93 | + } | |
| 94 | + | |
| 95 | + } | |
| 96 | + | |
| 97 | + // Set version | |
| 98 | + { | |
| 99 | +#ifdef PACKAGE_RELEASE | |
| 100 | + g_autofree gchar * version = g_strdup_printf(_("Version %s-%s"),PACKAGE_VERSION,G_STRINGIFY(PACKAGE_RELEASE)); | |
| 101 | +#else | |
| 102 | + g_autofree gchar * version = g_strdup_printf(_("Version %s-%s"),PACKAGE_VERSION,G_STRINGIFY(BUILD_DATE)); | |
| 103 | +#endif // PACKAGE_REVISION | |
| 104 | + | |
| 105 | + gtk_about_dialog_set_version(dialog,version); | |
| 106 | + } | |
| 107 | + | |
| 108 | + // Set comments | |
| 109 | + { | |
| 110 | + g_autofree gchar * comments = g_strdup_printf(_( "3270 terminal emulator for GTK %d.%d" ),GTK_MAJOR_VERSION,GTK_MINOR_VERSION); | |
| 111 | + gtk_about_dialog_set_comments(dialog, comments); | |
| 112 | + } | |
| 113 | + | |
| 114 | + gtk_about_dialog_set_copyright(dialog, "Copyright © 2008 Banco do Brasil S.A." ); | |
| 115 | + gtk_about_dialog_set_license(dialog, gettext( license ) ); | |
| 116 | + gtk_about_dialog_set_wrap_license(dialog,TRUE); | |
| 117 | + gtk_about_dialog_set_website(dialog,"https://portal.softwarepublico.gov.br/social/pw3270/"); | |
| 118 | + gtk_about_dialog_set_website_label(dialog,_( "Brazilian Public Software Portal" )); | |
| 119 | + gtk_about_dialog_set_authors(dialog,authors); | |
| 120 | + gtk_about_dialog_set_translator_credits(dialog,_("translator-credits")); | |
| 121 | + | |
| 122 | + g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL); | |
| 123 | + g_signal_connect(dialog,"response",G_CALLBACK(gtk_widget_destroy),NULL); | |
| 124 | + gtk_widget_show_all(GTK_WIDGET(dialog)); | |
| 125 | + | |
| 126 | + | |
| 127 | + } | |
| 128 | + | ... | ... |
| ... | ... | @@ -0,0 +1,38 @@ |
| 1 | +/* | |
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | + * | |
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | + * | |
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | + * Free Software Foundation. | |
| 11 | + * | |
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | + * obter mais detalhes. | |
| 16 | + * | |
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | + * | |
| 21 | + * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | + * | |
| 23 | + * Contatos: | |
| 24 | + * | |
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | + * | |
| 28 | + */ | |
| 29 | + | |
| 30 | + #include "../private.h" | |
| 31 | + #include <pw3270/application.h> | |
| 32 | + | |
| 33 | + void pw3270_application_preferences_activated(GSimpleAction G_GNUC_UNUSED(* action), GVariant G_GNUC_UNUSED(*parameter), gpointer application) { | |
| 34 | + | |
| 35 | + debug("%s",__FUNCTION__); | |
| 36 | + | |
| 37 | + } | |
| 38 | + | ... | ... |
| ... | ... | @@ -0,0 +1,71 @@ |
| 1 | +/* | |
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | + * | |
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | + * | |
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | + * Free Software Foundation. | |
| 11 | + * | |
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | + * obter mais detalhes. | |
| 16 | + * | |
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | + * | |
| 21 | + * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | + * | |
| 23 | + * Contatos: | |
| 24 | + * | |
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | + * | |
| 28 | + * References: | |
| 29 | + * | |
| 30 | + * https://fossies.org/linux/gtk+/examples/plugman.c | |
| 31 | + * | |
| 32 | + */ | |
| 33 | + | |
| 34 | + #include "../private.h" | |
| 35 | + #include <pw3270/application.h> | |
| 36 | + | |
| 37 | + | |
| 38 | + void pw3270_application_quit_activated(GSimpleAction * action, GVariant *parameter, gpointer application) { | |
| 39 | + | |
| 40 | + g_print("Exiting application\n"); | |
| 41 | + | |
| 42 | + /* | |
| 43 | + GList *list = gtk_application_get_windows(GTK_APPLICATION(application)); | |
| 44 | + | |
| 45 | + while(list) { | |
| 46 | + | |
| 47 | + GtkWidget * window = GTK_WIDGET(list->data); | |
| 48 | + list = list->next; | |
| 49 | + | |
| 50 | + gtk_widget_destroy(window); | |
| 51 | + | |
| 52 | + } | |
| 53 | + */ | |
| 54 | + | |
| 55 | + g_application_quit(G_APPLICATION(application)); | |
| 56 | + | |
| 57 | + } | |
| 58 | + | |
| 59 | + void pw3270_application_new_tab_activated(GSimpleAction * action, GVariant *parameter, gpointer application) { | |
| 60 | + | |
| 61 | + debug("%s",__FUNCTION__); | |
| 62 | + pw3270_terminal_new(GTK_WIDGET(gtk_application_get_active_window(GTK_APPLICATION(application)))); | |
| 63 | + | |
| 64 | + } | |
| 65 | + | |
| 66 | + void pw3270_application_new_window_activated(GSimpleAction * action, GVariant *parameter, gpointer application) { | |
| 67 | + | |
| 68 | + debug("%s",__FUNCTION__); | |
| 69 | + g_application_activate(application); | |
| 70 | + | |
| 71 | + } | ... | ... |
| ... | ... | @@ -0,0 +1,334 @@ |
| 1 | +/* | |
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | + * | |
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | + * | |
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | + * Free Software Foundation. | |
| 11 | + * | |
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | + * obter mais detalhes. | |
| 16 | + * | |
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | + * | |
| 21 | + * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | + * | |
| 23 | + * Contatos: | |
| 24 | + * | |
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | + * | |
| 28 | + * References: | |
| 29 | + * | |
| 30 | + * https://fossies.org/linux/gtk+/examples/plugman.c | |
| 31 | + * | |
| 32 | + */ | |
| 33 | + | |
| 34 | + #include "private.h" | |
| 35 | + #include <pw3270/application.h> | |
| 36 | + | |
| 37 | + enum { | |
| 38 | + PROP_ZERO, | |
| 39 | + PROP_UI_STYLE, | |
| 40 | + | |
| 41 | + NUM_PROPERTIES | |
| 42 | + }; | |
| 43 | + | |
| 44 | + static GParamSpec * props[NUM_PROPERTIES]; | |
| 45 | + | |
| 46 | + struct _pw3270ApplicationClass { | |
| 47 | + GtkApplicationClass parent_class; | |
| 48 | + }; | |
| 49 | + | |
| 50 | + struct _pw3270Application { | |
| 51 | + GtkApplication parent; | |
| 52 | + | |
| 53 | + GSettings * settings; | |
| 54 | + | |
| 55 | + PW3270_UI_STYLE ui_style; | |
| 56 | + | |
| 57 | + }; | |
| 58 | + | |
| 59 | + static void startup(GApplication * application); | |
| 60 | + static void activate(GApplication * application); | |
| 61 | + static void open(GApplication * application, GFile **files, gint n_files, const gchar *hint); | |
| 62 | + static void finalize(GObject *object); | |
| 63 | + | |
| 64 | + G_DEFINE_TYPE(pw3270Application, pw3270Application, GTK_TYPE_APPLICATION); | |
| 65 | + | |
| 66 | + static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec G_GNUC_UNUSED(*pspec)) { | |
| 67 | + | |
| 68 | + switch (prop_id) { | |
| 69 | + case PROP_UI_STYLE: | |
| 70 | + g_value_set_uint(value,pw3270_application_get_ui_style(G_APPLICATION(object))); | |
| 71 | + break; | |
| 72 | + | |
| 73 | + default: | |
| 74 | + g_assert_not_reached (); | |
| 75 | + } | |
| 76 | + | |
| 77 | + } | |
| 78 | + | |
| 79 | + static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec G_GNUC_UNUSED(*pspec)) { | |
| 80 | + | |
| 81 | + switch (prop_id) { | |
| 82 | + case PROP_UI_STYLE: | |
| 83 | + pw3270_application_set_ui_style(G_APPLICATION(object),g_value_get_uint(value)); | |
| 84 | + break; | |
| 85 | + | |
| 86 | + default: | |
| 87 | + g_assert_not_reached (); | |
| 88 | + } | |
| 89 | + | |
| 90 | + } | |
| 91 | + | |
| 92 | + static void pw3270Application_class_init(pw3270ApplicationClass *klass) { | |
| 93 | + | |
| 94 | + GApplicationClass *application_class = G_APPLICATION_CLASS(klass); | |
| 95 | + GObjectClass *object_class = G_OBJECT_CLASS(klass); | |
| 96 | + | |
| 97 | + object_class->get_property = get_property; | |
| 98 | + object_class->set_property = set_property; | |
| 99 | + object_class->finalize = finalize; | |
| 100 | + | |
| 101 | + application_class->startup = startup; | |
| 102 | + application_class->activate = activate; | |
| 103 | + application_class->open = open; | |
| 104 | + | |
| 105 | + props[PROP_UI_STYLE] = | |
| 106 | + g_param_spec_uint( | |
| 107 | + "ui-style", | |
| 108 | + _("UI Type"), | |
| 109 | + _("The code of the User interface type"), | |
| 110 | + PW3270_UI_STYLE_CLASSICAL, | |
| 111 | + PW3270_UI_STYLE_GNOME, | |
| 112 | +#ifdef _WIN32 | |
| 113 | + PW3270_UI_STYLE_CLASSICAL, | |
| 114 | +#else | |
| 115 | + PW3270_UI_STYLE_GNOME, | |
| 116 | +#endif // _WIN32 | |
| 117 | + G_PARAM_READABLE|G_PARAM_WRITABLE | |
| 118 | + ); | |
| 119 | + | |
| 120 | + | |
| 121 | + g_object_class_install_properties(object_class, NUM_PROPERTIES, props); | |
| 122 | + | |
| 123 | + } | |
| 124 | + | |
| 125 | + static void pw3270Application_init(pw3270Application *app) { | |
| 126 | + | |
| 127 | +#ifdef _WIN32 | |
| 128 | + app->ui_style = PW3270_UI_STYLE_CLASSICAL; | |
| 129 | +#else | |
| 130 | + app->ui_style = PW3270_UI_STYLE_GNOME; | |
| 131 | +#endif // _WIN32 | |
| 132 | + | |
| 133 | + // Get settings | |
| 134 | + { | |
| 135 | + g_autofree gchar * path = g_strconcat("/apps/" PACKAGE_NAME "/", g_get_application_name(),"/",NULL); | |
| 136 | + debug("path=%s",path); | |
| 137 | + | |
| 138 | +#ifdef DEBUG | |
| 139 | + GError * error = NULL; | |
| 140 | + GSettingsSchemaSource * source = | |
| 141 | + g_settings_schema_source_new_from_directory( | |
| 142 | + ".", | |
| 143 | + NULL, | |
| 144 | + TRUE, | |
| 145 | + &error | |
| 146 | + ); | |
| 147 | + | |
| 148 | + g_assert_no_error(error); | |
| 149 | + | |
| 150 | + GSettingsSchema * schema = | |
| 151 | + g_settings_schema_source_lookup( | |
| 152 | + source, | |
| 153 | + "br.com.bb." PACKAGE_NAME, | |
| 154 | + TRUE); | |
| 155 | + | |
| 156 | + g_settings_schema_source_unref(source); | |
| 157 | + | |
| 158 | + app->settings = g_settings_new_full(schema, NULL, path); | |
| 159 | + | |
| 160 | +#else | |
| 161 | + | |
| 162 | + app->settings = g_settings_new_with_path("br.com.bb." PACKAGE_NAME, path); | |
| 163 | + | |
| 164 | +#endif // DEBUG | |
| 165 | + | |
| 166 | + } | |
| 167 | + | |
| 168 | + // Bind properties | |
| 169 | + if(app->settings) { | |
| 170 | + g_object_ref_sink(G_OBJECT(app->settings)); | |
| 171 | + g_settings_bind(app->settings, "ui-style", app, "ui-style", G_SETTINGS_BIND_DEFAULT); | |
| 172 | + } | |
| 173 | + | |
| 174 | + } | |
| 175 | + | |
| 176 | + static void finalize(GObject *object) { | |
| 177 | + | |
| 178 | + pw3270Application * application = PW3270_APPLICATION(object); | |
| 179 | + | |
| 180 | + if(application->settings) { | |
| 181 | + g_object_unref(application->settings); | |
| 182 | + application->settings = NULL; | |
| 183 | + } | |
| 184 | + | |
| 185 | + | |
| 186 | + G_OBJECT_CLASS(pw3270Application_parent_class)->finalize(object); | |
| 187 | + | |
| 188 | + } | |
| 189 | + | |
| 190 | + GtkApplication * pw3270_application_new(const gchar *application_id, GApplicationFlags flags) { | |
| 191 | + | |
| 192 | + return g_object_new( | |
| 193 | + PW3270_TYPE_APPLICATION, | |
| 194 | + "application-id", application_id, | |
| 195 | + "flags", flags, | |
| 196 | + NULL); | |
| 197 | + | |
| 198 | + } | |
| 199 | + | |
| 200 | + void startup(GApplication *application) { | |
| 201 | + | |
| 202 | + G_APPLICATION_CLASS(pw3270Application_parent_class)->startup(application); | |
| 203 | + | |
| 204 | + // | |
| 205 | + // Setup application default actions. | |
| 206 | + // | |
| 207 | + static GActionEntry actions[] = { | |
| 208 | + { | |
| 209 | + .name = "about", | |
| 210 | + .activate = pw3270_application_about_activated, | |
| 211 | + }, | |
| 212 | + | |
| 213 | + { | |
| 214 | + .name = "preferences", | |
| 215 | + .activate = pw3270_application_preferences_activated, | |
| 216 | + }, | |
| 217 | + | |
| 218 | + { | |
| 219 | + .name = "quit", | |
| 220 | + .activate = pw3270_application_quit_activated, | |
| 221 | + }, | |
| 222 | + | |
| 223 | + { | |
| 224 | + .name = "new.tab", | |
| 225 | + .activate = pw3270_application_new_tab_activated, | |
| 226 | + }, | |
| 227 | + | |
| 228 | + { | |
| 229 | + .name = "new.window", | |
| 230 | + .activate = pw3270_application_new_window_activated, | |
| 231 | + }, | |
| 232 | + | |
| 233 | + { | |
| 234 | + .name = "open", | |
| 235 | + .activate = pw3270_application_generic_activated, | |
| 236 | + }, | |
| 237 | + | |
| 238 | + { | |
| 239 | + .name = "open.tab", | |
| 240 | + .activate = pw3270_application_generic_activated, | |
| 241 | + }, | |
| 242 | + | |
| 243 | + { | |
| 244 | + .name = "open.window", | |
| 245 | + .activate = pw3270_application_generic_activated, | |
| 246 | + }, | |
| 247 | + }; | |
| 248 | + | |
| 249 | + g_action_map_add_action_entries( | |
| 250 | + G_ACTION_MAP(application), | |
| 251 | + actions, | |
| 252 | + G_N_ELEMENTS(actions), | |
| 253 | + application | |
| 254 | + ); | |
| 255 | + | |
| 256 | + // | |
| 257 | + // Setup application menus | |
| 258 | + // | |
| 259 | + GtkBuilder * builder = gtk_builder_new_from_file("ui/application.xml"); | |
| 260 | + | |
| 261 | + if(gtk_application_prefers_app_menu(GTK_APPLICATION(application))) | |
| 262 | + gtk_application_set_app_menu(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "app-menu"))); | |
| 263 | + | |
| 264 | + if(pw3270_application_get_ui_style(application) == PW3270_UI_STYLE_CLASSICAL) | |
| 265 | + gtk_application_set_menubar(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "menubar"))); | |
| 266 | + | |
| 267 | + g_object_unref(builder); | |
| 268 | + | |
| 269 | + } | |
| 270 | + | |
| 271 | + void activate(GApplication *application) { | |
| 272 | + | |
| 273 | + GtkWidget * window = pw3270_application_window_new(GTK_APPLICATION(application)); | |
| 274 | + | |
| 275 | + // Create terminal widget | |
| 276 | + pw3270_terminal_new(window); | |
| 277 | + pw3270_window_set_current_page(window,0); | |
| 278 | + | |
| 279 | + // Present the new window | |
| 280 | + gtk_window_present(GTK_WINDOW(window)); | |
| 281 | + | |
| 282 | + } | |
| 283 | + | |
| 284 | + void open(GApplication *application, GFile **files, gint n_files, const gchar G_GNUC_UNUSED(*hint)) { | |
| 285 | + | |
| 286 | + GtkWindow * window = gtk_application_get_active_window(GTK_APPLICATION(application)); | |
| 287 | + | |
| 288 | + debug("%s was called with %d files (active_window=%p)", __FUNCTION__, n_files, window); | |
| 289 | + | |
| 290 | + if(!window) | |
| 291 | + window = GTK_WINDOW(pw3270_application_window_new(GTK_APPLICATION(application))); | |
| 292 | + | |
| 293 | + // Add tabs to the window | |
| 294 | + gint file; | |
| 295 | + gint last = -1; | |
| 296 | + | |
| 297 | + for(file = 0; file < n_files; file++) { | |
| 298 | + last = pw3270_window_append_page(GTK_WIDGET(window), files[file]); | |
| 299 | + } | |
| 300 | + | |
| 301 | + gtk_window_present(window); | |
| 302 | + | |
| 303 | + if(last != -1) | |
| 304 | + pw3270_window_set_current_page(GTK_WIDGET(window),last); | |
| 305 | + | |
| 306 | + } | |
| 307 | + | |
| 308 | + void pw3270_application_set_ui_style(GApplication *app, PW3270_UI_STYLE type) { | |
| 309 | + | |
| 310 | + g_return_if_fail(PW3270_IS_APPLICATION(app)); | |
| 311 | + | |
| 312 | + pw3270Application * application = PW3270_APPLICATION(app); | |
| 313 | + | |
| 314 | + if(application->ui_style == type) | |
| 315 | + return; | |
| 316 | + | |
| 317 | + application->ui_style = type; | |
| 318 | + g_object_notify_by_pspec(G_OBJECT(app), props[PROP_UI_STYLE]); | |
| 319 | + | |
| 320 | + } | |
| 321 | + | |
| 322 | + PW3270_UI_STYLE pw3270_application_get_ui_style(GApplication *app) { | |
| 323 | + | |
| 324 | + g_return_val_if_fail(PW3270_IS_APPLICATION(app),PW3270_UI_STYLE_CLASSICAL); | |
| 325 | + return PW3270_APPLICATION(app)->ui_style; | |
| 326 | + | |
| 327 | + } | |
| 328 | + | |
| 329 | + GSettings * pw3270_application_get_settings(GApplication *app) { | |
| 330 | + | |
| 331 | + g_return_val_if_fail(PW3270_IS_APPLICATION(app),NULL); | |
| 332 | + return PW3270_APPLICATION(app)->settings; | |
| 333 | + | |
| 334 | + } | ... | ... |
| ... | ... | @@ -0,0 +1,57 @@ |
| 1 | +/* | |
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | + * | |
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | + * | |
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | + * Free Software Foundation. | |
| 11 | + * | |
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | + * obter mais detalhes. | |
| 16 | + * | |
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | + * | |
| 21 | + * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | + * | |
| 23 | + * Contatos: | |
| 24 | + * | |
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | + * | |
| 28 | + */ | |
| 29 | + | |
| 30 | +#ifndef PRIVATE_H_INCLUDED | |
| 31 | + | |
| 32 | + #define PRIVATE_H_INCLUDED | |
| 33 | + | |
| 34 | + #include <config.h> | |
| 35 | + | |
| 36 | + #ifndef GETTEXT_PACKAGE | |
| 37 | + #define GETTEXT_PACKAGE PACKAGE_NAME | |
| 38 | + #endif | |
| 39 | + | |
| 40 | + #include <libintl.h> | |
| 41 | + #include <glib/gi18n.h> | |
| 42 | + #include <gtk/gtk.h> | |
| 43 | + | |
| 44 | + #include <pw3270/window.h> | |
| 45 | + #include <v3270.h> | |
| 46 | + #include <lib3270.h> | |
| 47 | + #include <lib3270/log.h> | |
| 48 | + | |
| 49 | + // Actions | |
| 50 | + G_GNUC_INTERNAL void pw3270_application_generic_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 51 | + G_GNUC_INTERNAL void pw3270_application_quit_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 52 | + G_GNUC_INTERNAL void pw3270_application_new_tab_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 53 | + G_GNUC_INTERNAL void pw3270_application_new_window_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 54 | + G_GNUC_INTERNAL void pw3270_application_about_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 55 | + G_GNUC_INTERNAL void pw3270_application_preferences_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 56 | + | |
| 57 | +#endif // PRIVATE_H_INCLUDED | ... | ... |
src/objects/window/actions/about.c
| ... | ... | @@ -1,128 +0,0 @@ |
| 1 | -/* | |
| 2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | - * | |
| 6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | - * | |
| 8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | - * Free Software Foundation. | |
| 11 | - * | |
| 12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | - * obter mais detalhes. | |
| 16 | - * | |
| 17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | - * | |
| 21 | - * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | - * | |
| 23 | - * Contatos: | |
| 24 | - * | |
| 25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | - * | |
| 28 | - */ | |
| 29 | - | |
| 30 | - #include "../private.h" | |
| 31 | - #include <pw3270/application.h> | |
| 32 | - | |
| 33 | - void pw3270_application_about_activated(GSimpleAction G_GNUC_UNUSED(* action), GVariant G_GNUC_UNUSED(*parameter), gpointer application) { | |
| 34 | - | |
| 35 | - static const gchar *authors[] = | |
| 36 | - { | |
| 37 | - "Perry Werneck <perry.werneck@gmail.com>", | |
| 38 | - "Paul Mattes <Paul.Mattes@usa.net>", | |
| 39 | - "Georgia Tech Research Corporation (GTRC)", | |
| 40 | - "and others", | |
| 41 | - NULL | |
| 42 | - }; | |
| 43 | - | |
| 44 | - static const gchar *license = | |
| 45 | - N_( "This program is free software; you can redistribute it and/or " | |
| 46 | - "modify it under the terms of the GNU General Public License as " | |
| 47 | - "published by the Free Software Foundation; either version 2 of the " | |
| 48 | - "License, or (at your option) any later version.\n\n" | |
| 49 | - "This program is distributed in the hope that it will be useful, " | |
| 50 | - "but WITHOUT ANY WARRANTY; without even the implied warranty of " | |
| 51 | - "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " | |
| 52 | - "GNU General Public License for more details.\n\n" | |
| 53 | - "You should have received a copy of the GNU General Public License " | |
| 54 | - "along with this program; if not, write to the Free Software " | |
| 55 | - "Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 " | |
| 56 | - "USA" ); | |
| 57 | - | |
| 58 | - GtkAboutDialog * dialog = GTK_ABOUT_DIALOG(gtk_about_dialog_new()); | |
| 59 | - | |
| 60 | - // Associate with the window | |
| 61 | - { | |
| 62 | - GtkWindow * window = gtk_application_get_active_window(GTK_APPLICATION(application)); | |
| 63 | - if(window) { | |
| 64 | - gtk_window_set_transient_for(GTK_WINDOW(dialog), window); | |
| 65 | - } | |
| 66 | - } | |
| 67 | - | |
| 68 | - // Get application logo | |
| 69 | - { | |
| 70 | - lib3270_autoptr(char) logo = lib3270_build_data_filename(G_STRINGIFY(PRODUCT_NAME) "-logo.png",NULL); | |
| 71 | - | |
| 72 | - if(g_file_test(logo,G_FILE_TEST_EXISTS)) { | |
| 73 | - GError * error = NULL; | |
| 74 | - GdkPixbuf * pix = gdk_pixbuf_new_from_file(logo,&error); | |
| 75 | - | |
| 76 | - gtk_about_dialog_set_logo(dialog,pix); | |
| 77 | - | |
| 78 | - if(pix) { | |
| 79 | - | |
| 80 | - g_object_unref(pix); | |
| 81 | - | |
| 82 | - } else { | |
| 83 | - | |
| 84 | - g_warning("Can't load %s: %s",logo,error->message); | |
| 85 | - g_error_free(error); | |
| 86 | - | |
| 87 | - } | |
| 88 | - | |
| 89 | - } else { | |
| 90 | - | |
| 91 | - g_message("%s: %s",logo,strerror(ENOENT)); | |
| 92 | - | |
| 93 | - } | |
| 94 | - | |
| 95 | - } | |
| 96 | - | |
| 97 | - // Set version | |
| 98 | - { | |
| 99 | -#ifdef PACKAGE_RELEASE | |
| 100 | - g_autofree gchar * version = g_strdup_printf(_("Version %s-%s"),PACKAGE_VERSION,G_STRINGIFY(PACKAGE_RELEASE)); | |
| 101 | -#else | |
| 102 | - g_autofree gchar * version = g_strdup_printf(_("Version %s-%s"),PACKAGE_VERSION,G_STRINGIFY(BUILD_DATE)); | |
| 103 | -#endif // PACKAGE_REVISION | |
| 104 | - | |
| 105 | - gtk_about_dialog_set_version(dialog,version); | |
| 106 | - } | |
| 107 | - | |
| 108 | - // Set comments | |
| 109 | - { | |
| 110 | - g_autofree gchar * comments = g_strdup_printf(_( "3270 terminal emulator for GTK %d.%d" ),GTK_MAJOR_VERSION,GTK_MINOR_VERSION); | |
| 111 | - gtk_about_dialog_set_comments(dialog, comments); | |
| 112 | - } | |
| 113 | - | |
| 114 | - gtk_about_dialog_set_copyright(dialog, "Copyright © 2008 Banco do Brasil S.A." ); | |
| 115 | - gtk_about_dialog_set_license(dialog, gettext( license ) ); | |
| 116 | - gtk_about_dialog_set_wrap_license(dialog,TRUE); | |
| 117 | - gtk_about_dialog_set_website(dialog,"https://portal.softwarepublico.gov.br/social/pw3270/"); | |
| 118 | - gtk_about_dialog_set_website_label(dialog,_( "Brazilian Public Software Portal" )); | |
| 119 | - gtk_about_dialog_set_authors(dialog,authors); | |
| 120 | - gtk_about_dialog_set_translator_credits(dialog,_("translator-credits")); | |
| 121 | - | |
| 122 | - g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL); | |
| 123 | - g_signal_connect(dialog,"response",G_CALLBACK(gtk_widget_destroy),NULL); | |
| 124 | - gtk_widget_show_all(GTK_WIDGET(dialog)); | |
| 125 | - | |
| 126 | - | |
| 127 | - } | |
| 128 | - |
| ... | ... | @@ -0,0 +1,37 @@ |
| 1 | +/* | |
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | + * | |
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | + * | |
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | + * Free Software Foundation. | |
| 11 | + * | |
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | + * obter mais detalhes. | |
| 16 | + * | |
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | + * | |
| 21 | + * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | + * | |
| 23 | + * Contatos: | |
| 24 | + * | |
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | + * | |
| 28 | + */ | |
| 29 | + | |
| 30 | + #include "../private.h" | |
| 31 | + | |
| 32 | + void pw3270_window_close_activated(GSimpleAction G_GNUC_UNUSED(* action), GVariant G_GNUC_UNUSED(*parameter), gpointer application) { | |
| 33 | + | |
| 34 | + debug("%s",__FUNCTION__); | |
| 35 | + | |
| 36 | + } | |
| 37 | + | ... | ... |
| ... | ... | @@ -0,0 +1,37 @@ |
| 1 | +/* | |
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | + * | |
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | + * | |
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | + * Free Software Foundation. | |
| 11 | + * | |
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | + * obter mais detalhes. | |
| 16 | + * | |
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | + * | |
| 21 | + * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | + * | |
| 23 | + * Contatos: | |
| 24 | + * | |
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | + * | |
| 28 | + */ | |
| 29 | + | |
| 30 | + #include "../private.h" | |
| 31 | + | |
| 32 | + void pw3270_window_open_activated(GSimpleAction G_GNUC_UNUSED(* action), GVariant G_GNUC_UNUSED(*parameter), gpointer application) { | |
| 33 | + | |
| 34 | + debug("%s",__FUNCTION__); | |
| 35 | + | |
| 36 | + } | |
| 37 | + | ... | ... |
| ... | ... | @@ -0,0 +1,37 @@ |
| 1 | +/* | |
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | + * | |
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | + * | |
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | + * Free Software Foundation. | |
| 11 | + * | |
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | + * obter mais detalhes. | |
| 16 | + * | |
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | + * | |
| 21 | + * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | + * | |
| 23 | + * Contatos: | |
| 24 | + * | |
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | + * | |
| 28 | + */ | |
| 29 | + | |
| 30 | + #include "../private.h" | |
| 31 | + | |
| 32 | + void pw3270_window_preferences_activated(GSimpleAction G_GNUC_UNUSED(* action), GVariant G_GNUC_UNUSED(*parameter), gpointer application) { | |
| 33 | + | |
| 34 | + debug("%s",__FUNCTION__); | |
| 35 | + | |
| 36 | + } | |
| 37 | + | ... | ... |
src/objects/window/actions/window.c
| ... | ... | @@ -1,71 +0,0 @@ |
| 1 | -/* | |
| 2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | - * | |
| 6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | - * | |
| 8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | - * Free Software Foundation. | |
| 11 | - * | |
| 12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | - * obter mais detalhes. | |
| 16 | - * | |
| 17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | - * | |
| 21 | - * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | - * | |
| 23 | - * Contatos: | |
| 24 | - * | |
| 25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | - * | |
| 28 | - * References: | |
| 29 | - * | |
| 30 | - * https://fossies.org/linux/gtk+/examples/plugman.c | |
| 31 | - * | |
| 32 | - */ | |
| 33 | - | |
| 34 | - #include "../private.h" | |
| 35 | - #include <pw3270/application.h> | |
| 36 | - | |
| 37 | - | |
| 38 | - void pw3270_application_quit_activated(GSimpleAction * action, GVariant *parameter, gpointer application) { | |
| 39 | - | |
| 40 | - g_print("Exiting application\n"); | |
| 41 | - | |
| 42 | - /* | |
| 43 | - GList *list = gtk_application_get_windows(GTK_APPLICATION(application)); | |
| 44 | - | |
| 45 | - while(list) { | |
| 46 | - | |
| 47 | - GtkWidget * window = GTK_WIDGET(list->data); | |
| 48 | - list = list->next; | |
| 49 | - | |
| 50 | - gtk_widget_destroy(window); | |
| 51 | - | |
| 52 | - } | |
| 53 | - */ | |
| 54 | - | |
| 55 | - g_application_quit(G_APPLICATION(application)); | |
| 56 | - | |
| 57 | - } | |
| 58 | - | |
| 59 | - void pw3270_application_new_tab_activated(GSimpleAction * action, GVariant *parameter, gpointer application) { | |
| 60 | - | |
| 61 | - debug("%s",__FUNCTION__); | |
| 62 | - pw3270_terminal_new(GTK_WIDGET(gtk_application_get_active_window(GTK_APPLICATION(application)))); | |
| 63 | - | |
| 64 | - } | |
| 65 | - | |
| 66 | - void pw3270_application_new_window_activated(GSimpleAction * action, GVariant *parameter, gpointer application) { | |
| 67 | - | |
| 68 | - debug("%s",__FUNCTION__); | |
| 69 | - g_application_activate(application); | |
| 70 | - | |
| 71 | - } |
src/objects/window/application.c
| ... | ... | @@ -1,341 +0,0 @@ |
| 1 | -/* | |
| 2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
| 5 | - * | |
| 6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | - * | |
| 8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | - * Free Software Foundation. | |
| 11 | - * | |
| 12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | - * obter mais detalhes. | |
| 16 | - * | |
| 17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
| 19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 | - * | |
| 21 | - * Este programa está nomeado como - e possui - linhas de código. | |
| 22 | - * | |
| 23 | - * Contatos: | |
| 24 | - * | |
| 25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | - * | |
| 28 | - * References: | |
| 29 | - * | |
| 30 | - * https://fossies.org/linux/gtk+/examples/plugman.c | |
| 31 | - * | |
| 32 | - */ | |
| 33 | - | |
| 34 | - #include "private.h" | |
| 35 | - #include <pw3270/application.h> | |
| 36 | - | |
| 37 | - enum { | |
| 38 | - PROP_ZERO, | |
| 39 | - PROP_UI_STYLE, | |
| 40 | - | |
| 41 | - NUM_PROPERTIES | |
| 42 | - }; | |
| 43 | - | |
| 44 | - static GParamSpec * props[NUM_PROPERTIES]; | |
| 45 | - | |
| 46 | - struct _pw3270ApplicationClass { | |
| 47 | - GtkApplicationClass parent_class; | |
| 48 | - }; | |
| 49 | - | |
| 50 | - struct _pw3270Application { | |
| 51 | - GtkApplication parent; | |
| 52 | - | |
| 53 | - GSettings * settings; | |
| 54 | - | |
| 55 | - PW3270_UI_STYLE ui_style; | |
| 56 | - | |
| 57 | - }; | |
| 58 | - | |
| 59 | - static void startup(GApplication * application); | |
| 60 | - static void activate(GApplication * application); | |
| 61 | - static void open(GApplication * application, GFile **files, gint n_files, const gchar *hint); | |
| 62 | - static void finalize(GObject *object); | |
| 63 | - | |
| 64 | - G_DEFINE_TYPE(pw3270Application, pw3270Application, GTK_TYPE_APPLICATION); | |
| 65 | - | |
| 66 | - static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { | |
| 67 | - | |
| 68 | - switch (prop_id) { | |
| 69 | - case PROP_UI_STYLE: | |
| 70 | - g_value_set_uint(value,pw3270_application_get_ui_style(G_APPLICATION(object))); | |
| 71 | - break; | |
| 72 | - | |
| 73 | - default: | |
| 74 | - g_assert_not_reached (); | |
| 75 | - } | |
| 76 | - | |
| 77 | - } | |
| 78 | - | |
| 79 | - static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { | |
| 80 | - | |
| 81 | - switch (prop_id) { | |
| 82 | - case PROP_UI_STYLE: | |
| 83 | - pw3270_application_set_ui_style(G_APPLICATION(object),g_value_get_uint(value)); | |
| 84 | - break; | |
| 85 | - | |
| 86 | - default: | |
| 87 | - g_assert_not_reached (); | |
| 88 | - } | |
| 89 | - | |
| 90 | - } | |
| 91 | - | |
| 92 | - static void pw3270Application_class_init(pw3270ApplicationClass *klass) { | |
| 93 | - | |
| 94 | - GApplicationClass *application_class = G_APPLICATION_CLASS(klass); | |
| 95 | - GObjectClass *object_class = G_OBJECT_CLASS(klass); | |
| 96 | - | |
| 97 | - object_class->get_property = get_property; | |
| 98 | - object_class->set_property = set_property; | |
| 99 | - object_class->finalize = finalize; | |
| 100 | - | |
| 101 | - application_class->startup = startup; | |
| 102 | - application_class->activate = activate; | |
| 103 | - application_class->open = open; | |
| 104 | - | |
| 105 | - props[PROP_UI_STYLE] = | |
| 106 | - g_param_spec_uint( | |
| 107 | - "ui-style", | |
| 108 | - _("UI Type"), | |
| 109 | - _("The code of the User interface type"), | |
| 110 | - PW3270_UI_STYLE_CLASSICAL, | |
| 111 | - PW3270_UI_STYLE_GNOME, | |
| 112 | -#ifdef _WIN32 | |
| 113 | - PW3270_UI_STYLE_CLASSICAL, | |
| 114 | -#else | |
| 115 | - PW3270_UI_STYLE_GNOME, | |
| 116 | -#endif // _WIN32 | |
| 117 | - G_PARAM_READABLE|G_PARAM_WRITABLE | |
| 118 | - ); | |
| 119 | - | |
| 120 | - | |
| 121 | - g_object_class_install_properties(object_class, NUM_PROPERTIES, props); | |
| 122 | - | |
| 123 | - } | |
| 124 | - | |
| 125 | - static void pw3270Application_init(pw3270Application *app) { | |
| 126 | - | |
| 127 | -#ifdef _WIN32 | |
| 128 | - app->ui_style = PW3270_UI_STYLE_CLASSICAL; | |
| 129 | -#else | |
| 130 | - app->ui_style = PW3270_UI_STYLE_GNOME; | |
| 131 | -#endif // _WIN32 | |
| 132 | - | |
| 133 | - // Get settings | |
| 134 | - { | |
| 135 | - g_autofree gchar * path = g_strconcat("/apps/" PACKAGE_NAME "/", g_get_application_name(),"/",NULL); | |
| 136 | - debug("path=%s",path); | |
| 137 | - | |
| 138 | -#ifdef DEBUG | |
| 139 | - GError * error = NULL; | |
| 140 | - GSettingsSchemaSource * source = | |
| 141 | - g_settings_schema_source_new_from_directory( | |
| 142 | - ".", | |
| 143 | - NULL, | |
| 144 | - TRUE, | |
| 145 | - &error | |
| 146 | - ); | |
| 147 | - | |
| 148 | - g_assert_no_error(error); | |
| 149 | - | |
| 150 | - GSettingsSchema * schema = | |
| 151 | - g_settings_schema_source_lookup( | |
| 152 | - source, | |
| 153 | - "br.com.bb." PACKAGE_NAME, | |
| 154 | - TRUE); | |
| 155 | - | |
| 156 | - g_settings_schema_source_unref(source); | |
| 157 | - | |
| 158 | - app->settings = g_settings_new_full(schema, NULL, path); | |
| 159 | - | |
| 160 | -#else | |
| 161 | - | |
| 162 | - app->settings = g_settings_new_with_path("br.com.bb." PACKAGE_NAME, path); | |
| 163 | - | |
| 164 | -#endif // DEBUG | |
| 165 | - | |
| 166 | - } | |
| 167 | - | |
| 168 | - // Bind properties | |
| 169 | - if(app->settings) { | |
| 170 | - g_object_ref_sink(G_OBJECT(app->settings)); | |
| 171 | - g_settings_bind(app->settings, "ui-style", app, "ui-style", G_SETTINGS_BIND_DEFAULT); | |
| 172 | - } | |
| 173 | - | |
| 174 | - } | |
| 175 | - | |
| 176 | - static void finalize(GObject *object) { | |
| 177 | - | |
| 178 | - pw3270Application * application = PW3270_APPLICATION(object); | |
| 179 | - | |
| 180 | - if(application->settings) { | |
| 181 | - g_object_unref(application->settings); | |
| 182 | - application->settings = NULL; | |
| 183 | - } | |
| 184 | - | |
| 185 | - | |
| 186 | - G_OBJECT_CLASS(pw3270Application_parent_class)->finalize(object); | |
| 187 | - | |
| 188 | - } | |
| 189 | - | |
| 190 | - GtkApplication * pw3270_application_new(const gchar *application_id, GApplicationFlags flags) { | |
| 191 | - | |
| 192 | - return g_object_new( | |
| 193 | - PW3270_TYPE_APPLICATION, | |
| 194 | - "application-id", application_id, | |
| 195 | - "flags", G_APPLICATION_HANDLES_OPEN, | |
| 196 | - NULL); | |
| 197 | - | |
| 198 | - } | |
| 199 | - | |
| 200 | - void startup(GApplication *application) { | |
| 201 | - | |
| 202 | - G_APPLICATION_CLASS(pw3270Application_parent_class)->startup(application); | |
| 203 | - | |
| 204 | - // | |
| 205 | - // Setup application default actions. | |
| 206 | - // | |
| 207 | - static GActionEntry actions[] = { | |
| 208 | - { | |
| 209 | - .name = "about", | |
| 210 | - .activate = pw3270_application_about_activated, | |
| 211 | - }, | |
| 212 | - | |
| 213 | - { | |
| 214 | - .name = "preferences", | |
| 215 | - .activate = pw3270_application_generic_activated, | |
| 216 | - }, | |
| 217 | - | |
| 218 | - { | |
| 219 | - .name = "quit", | |
| 220 | - .activate = pw3270_application_quit_activated, | |
| 221 | - }, | |
| 222 | - | |
| 223 | - { | |
| 224 | - .name = "new.tab", | |
| 225 | - .activate = pw3270_application_new_tab_activated, | |
| 226 | - }, | |
| 227 | - | |
| 228 | - { | |
| 229 | - .name = "new.window", | |
| 230 | - .activate = pw3270_application_new_window_activated, | |
| 231 | - }, | |
| 232 | - | |
| 233 | - { | |
| 234 | - .name = "open", | |
| 235 | - .activate = pw3270_application_generic_activated, | |
| 236 | - }, | |
| 237 | - | |
| 238 | - { | |
| 239 | - .name = "open.tab", | |
| 240 | - .activate = pw3270_application_generic_activated, | |
| 241 | - }, | |
| 242 | - | |
| 243 | - { | |
| 244 | - .name = "open.window", | |
| 245 | - .activate = pw3270_application_generic_activated, | |
| 246 | - }, | |
| 247 | - }; | |
| 248 | - | |
| 249 | - g_action_map_add_action_entries( | |
| 250 | - G_ACTION_MAP(application), | |
| 251 | - actions, | |
| 252 | - G_N_ELEMENTS(actions), | |
| 253 | - application | |
| 254 | - ); | |
| 255 | - | |
| 256 | - // | |
| 257 | - // Setup application menus | |
| 258 | - // | |
| 259 | - GtkBuilder * builder = gtk_builder_new_from_file("ui/application.xml"); | |
| 260 | - | |
| 261 | - if(gtk_application_prefers_app_menu(GTK_APPLICATION(application))) | |
| 262 | - gtk_application_set_app_menu(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "app-menu"))); | |
| 263 | - | |
| 264 | - if(pw3270_application_get_ui_style(application) == PW3270_UI_STYLE_CLASSICAL) | |
| 265 | - gtk_application_set_menubar(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "menubar"))); | |
| 266 | - | |
| 267 | - g_object_unref(builder); | |
| 268 | - | |
| 269 | - } | |
| 270 | - | |
| 271 | - void activate(GApplication *application) { | |
| 272 | - | |
| 273 | - GtkWidget * window = pw3270_application_window_new(GTK_APPLICATION(application)); | |
| 274 | - | |
| 275 | - debug("%s","************************************************"); | |
| 276 | - debug("Action win.copy is %p",g_action_map_lookup_action(G_ACTION_MAP(window),"win.copy")); | |
| 277 | - debug("Action app.copy is %p",g_action_map_lookup_action(G_ACTION_MAP(window),"app.copy")); | |
| 278 | - debug("Action win.copy is %p",g_action_map_lookup_action(G_ACTION_MAP(application),"win.copy")); | |
| 279 | - debug("Action copy is %p",g_action_map_lookup_action(G_ACTION_MAP(application),"copy")); | |
| 280 | - debug("%s","************************************************"); | |
| 281 | - | |
| 282 | - // Create terminal widget | |
| 283 | - pw3270_terminal_new(window); | |
| 284 | - pw3270_window_set_current_page(window,0); | |
| 285 | - | |
| 286 | - // Present the new window | |
| 287 | - gtk_window_present(GTK_WINDOW(window)); | |
| 288 | - | |
| 289 | - } | |
| 290 | - | |
| 291 | - void open(GApplication *application, GFile **files, gint n_files, const gchar *hint) { | |
| 292 | - | |
| 293 | - GtkWindow * window = gtk_application_get_active_window(GTK_APPLICATION(application)); | |
| 294 | - | |
| 295 | - debug("%s was called with %d files (active_window=%p)", __FUNCTION__, n_files, window); | |
| 296 | - | |
| 297 | - if(!window) | |
| 298 | - window = GTK_WINDOW(pw3270_application_window_new(GTK_APPLICATION(application))); | |
| 299 | - | |
| 300 | - // Add tabs to the window | |
| 301 | - gint file; | |
| 302 | - gint last = -1; | |
| 303 | - | |
| 304 | - for(file = 0; file < n_files; file++) { | |
| 305 | - last = pw3270_window_append_page(GTK_WIDGET(window), files[file]); | |
| 306 | - } | |
| 307 | - | |
| 308 | - gtk_window_present(window); | |
| 309 | - | |
| 310 | - if(last != -1) | |
| 311 | - pw3270_window_set_current_page(GTK_WIDGET(window),last); | |
| 312 | - | |
| 313 | - } | |
| 314 | - | |
| 315 | - void pw3270_application_set_ui_style(GApplication *app, PW3270_UI_STYLE type) { | |
| 316 | - | |
| 317 | - g_return_if_fail(PW3270_IS_APPLICATION(app)); | |
| 318 | - | |
| 319 | - pw3270Application * application = PW3270_APPLICATION(app); | |
| 320 | - | |
| 321 | - if(application->ui_style == type) | |
| 322 | - return; | |
| 323 | - | |
| 324 | - application->ui_style = type; | |
| 325 | - g_object_notify_by_pspec(G_OBJECT(app), props[PROP_UI_STYLE]); | |
| 326 | - | |
| 327 | - } | |
| 328 | - | |
| 329 | - PW3270_UI_STYLE pw3270_application_get_ui_style(GApplication *app) { | |
| 330 | - | |
| 331 | - g_return_val_if_fail(PW3270_IS_APPLICATION(app),PW3270_UI_STYLE_CLASSICAL); | |
| 332 | - return PW3270_APPLICATION(app)->ui_style; | |
| 333 | - | |
| 334 | - } | |
| 335 | - | |
| 336 | - GSettings * pw3270_application_get_settings(GApplication *app) { | |
| 337 | - | |
| 338 | - g_return_val_if_fail(PW3270_IS_APPLICATION(app),NULL); | |
| 339 | - return PW3270_APPLICATION(app)->settings; | |
| 340 | - | |
| 341 | - } |
src/objects/window/private.h
| ... | ... | @@ -65,10 +65,8 @@ |
| 65 | 65 | G_GNUC_INTERNAL GtkWidget * pw3270_setup_image_button(GtkWidget *button, const gchar *image_name); |
| 66 | 66 | |
| 67 | 67 | // Actions |
| 68 | - G_GNUC_INTERNAL void pw3270_application_generic_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 69 | - G_GNUC_INTERNAL void pw3270_application_quit_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 70 | - G_GNUC_INTERNAL void pw3270_application_new_tab_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 71 | - G_GNUC_INTERNAL void pw3270_application_new_window_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 72 | - G_GNUC_INTERNAL void pw3270_application_about_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 68 | + G_GNUC_INTERNAL void pw3270_window_open_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 69 | + G_GNUC_INTERNAL void pw3270_window_close_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 70 | + G_GNUC_INTERNAL void pw3270_window_preferences_activated(GSimpleAction * action, GVariant *parameter, gpointer application); | |
| 73 | 71 | |
| 74 | 72 | #endif // PRIVATE_H_INCLUDED | ... | ... |
src/objects/window/window.c
| ... | ... | @@ -102,17 +102,17 @@ |
| 102 | 102 | |
| 103 | 103 | { |
| 104 | 104 | .name = "open", |
| 105 | - .activate = pw3270_application_generic_activated, | |
| 105 | + .activate = pw3270_window_open_activated, | |
| 106 | 106 | }, |
| 107 | 107 | |
| 108 | 108 | { |
| 109 | 109 | .name = "close", |
| 110 | - .activate = pw3270_application_generic_activated, | |
| 110 | + .activate = pw3270_window_close_activated, | |
| 111 | 111 | }, |
| 112 | 112 | |
| 113 | 113 | { |
| 114 | 114 | .name = "preferences", |
| 115 | - .activate = pw3270_application_generic_activated, | |
| 115 | + .activate = pw3270_window_preferences_activated, | |
| 116 | 116 | }, |
| 117 | 117 | |
| 118 | 118 | }; | ... | ... |