Commit d008acb5f0b13d5faa725988972959c497b2e6cb
1 parent
27646cda
Exists in
master
and in
4 other branches
Refactoring window & application actions.
Showing
15 changed files
with
763 additions
and
551 deletions
Show diff stats
Makefile.in
@@ -33,6 +33,8 @@ INSTALL_PACKAGES=@INSTALL_PACKAGES@ | @@ -33,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) \ |
pw3270.cbp
@@ -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" /> |
@@ -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 | + |
@@ -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 | + |
@@ -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 | + } |
@@ -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 | + } |
@@ -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 | - |
@@ -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 | + |
@@ -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 | + |
@@ -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 | }; |