Commit d008acb5f0b13d5faa725988972959c497b2e6cb

Authored by Perry Werneck
1 parent 27646cda

Refactoring window & application actions.

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" />
... ...
src/objects/application/actions/about.c 0 → 100644
... ... @@ -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 @@
  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 @@
  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 @@
  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 @@
  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   -
src/objects/window/actions/close.c 0 → 100644
... ... @@ -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 @@
  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 @@
  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 };
... ...