Commit d008acb5f0b13d5faa725988972959c497b2e6cb

Authored by Perry Werneck
1 parent 27646cda

Refactoring window & application actions.

@@ -33,6 +33,8 @@ INSTALL_PACKAGES=@INSTALL_PACKAGES@ @@ -33,6 +33,8 @@ INSTALL_PACKAGES=@INSTALL_PACKAGES@
33 SOURCES= \ 33 SOURCES= \
34 $(wildcard src/objects/actions/*.c) \ 34 $(wildcard src/objects/actions/*.c) \
35 $(wildcard src/objects/actions/lib3270/*.c) \ 35 $(wildcard src/objects/actions/lib3270/*.c) \
  36 + $(wildcard src/objects/application/*.c) \
  37 + $(wildcard src/objects/application/actions/*.c) \
36 $(wildcard src/objects/window/*.c) \ 38 $(wildcard src/objects/window/*.c) \
37 $(wildcard src/objects/window/actions/*.c) \ 39 $(wildcard src/objects/window/actions/*.c) \
38 $(wildcard src/objects/terminal/*.c) \ 40 $(wildcard src/objects/terminal/*.c) \
@@ -79,6 +79,19 @@ @@ -79,6 +79,19 @@
79 <Unit filename="src/objects/actions/window.c"> 79 <Unit filename="src/objects/actions/window.c">
80 <Option compilerVar="CC" /> 80 <Option compilerVar="CC" />
81 </Unit> 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 <Unit filename="src/objects/toolbar/actions.c"> 95 <Unit filename="src/objects/toolbar/actions.c">
83 <Option compilerVar="CC" /> 96 <Option compilerVar="CC" />
84 </Unit> 97 </Unit>
@@ -89,13 +102,13 @@ @@ -89,13 +102,13 @@
89 <Unit filename="src/objects/toolbar/toolbutton.c"> 102 <Unit filename="src/objects/toolbar/toolbutton.c">
90 <Option compilerVar="CC" /> 103 <Option compilerVar="CC" />
91 </Unit> 104 </Unit>
92 - <Unit filename="src/objects/window/actions/about.c"> 105 + <Unit filename="src/objects/window/actions/close.c">
93 <Option compilerVar="CC" /> 106 <Option compilerVar="CC" />
94 </Unit> 107 </Unit>
95 - <Unit filename="src/objects/window/actions/window.c"> 108 + <Unit filename="src/objects/window/actions/open.c">
96 <Option compilerVar="CC" /> 109 <Option compilerVar="CC" />
97 </Unit> 110 </Unit>
98 - <Unit filename="src/objects/window/application.c"> 111 + <Unit filename="src/objects/window/actions/preferences.c">
99 <Option compilerVar="CC" /> 112 <Option compilerVar="CC" />
100 </Unit> 113 </Unit>
101 <Unit filename="src/objects/window/private.h" /> 114 <Unit filename="src/objects/window/private.h" />
src/objects/application/actions/about.c 0 → 100644
@@ -0,0 +1,128 @@ @@ -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 +
src/objects/application/actions/preferences.c 0 → 100644
@@ -0,0 +1,38 @@ @@ -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 +
src/objects/application/actions/window.c 0 → 100644
@@ -0,0 +1,71 @@ @@ -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 + }
src/objects/application/application.c 0 → 100644
@@ -0,0 +1,334 @@ @@ -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 + }
src/objects/application/private.h 0 → 100644
@@ -0,0 +1,57 @@ @@ -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,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 -  
src/objects/window/actions/close.c 0 → 100644
@@ -0,0 +1,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_close_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/open.c 0 → 100644
@@ -0,0 +1,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 +
src/objects/window/actions/preferences.c 0 → 100644
@@ -0,0 +1,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,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,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,10 +65,8 @@
65 G_GNUC_INTERNAL GtkWidget * pw3270_setup_image_button(GtkWidget *button, const gchar *image_name); 65 G_GNUC_INTERNAL GtkWidget * pw3270_setup_image_button(GtkWidget *button, const gchar *image_name);
66 66
67 // Actions 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 #endif // PRIVATE_H_INCLUDED 72 #endif // PRIVATE_H_INCLUDED
src/objects/window/window.c
@@ -102,17 +102,17 @@ @@ -102,17 +102,17 @@
102 102
103 { 103 {
104 .name = "open", 104 .name = "open",
105 - .activate = pw3270_application_generic_activated, 105 + .activate = pw3270_window_open_activated,
106 }, 106 },
107 107
108 { 108 {
109 .name = "close", 109 .name = "close",
110 - .activate = pw3270_application_generic_activated, 110 + .activate = pw3270_window_close_activated,
111 }, 111 },
112 112
113 { 113 {
114 .name = "preferences", 114 .name = "preferences",
115 - .activate = pw3270_application_generic_activated, 115 + .activate = pw3270_window_preferences_activated,
116 }, 116 },
117 117
118 }; 118 };