Commit af9aeaa3c6a42d8af27dd4539923321302f3d814

Authored by Perry Werneck
1 parent 12679f38
Exists in master and in 1 other branch develop

Updating plugin engine.

server/pw3270-plugin-ipc.cbp
... ... @@ -131,6 +131,7 @@
131 131 <Option compilerVar="CC" />
132 132 </Unit>
133 133 <Unit filename="src/include/config.h.in" />
  134 + <Unit filename="src/include/internals.h" />
134 135 <Unit filename="src/include/ipc-glib.h" />
135 136 <Unit filename="src/plugin/plugin.c">
136 137 <Option compilerVar="CC" />
... ...
server/src/core/getproperties.c
... ... @@ -32,7 +32,7 @@
32 32 *
33 33 */
34 34  
35   -#include <config.h>
  35 +#include <internals.h>
36 36 #include <ipc-glib.h>
37 37 #include <lib3270.h>
38 38 #include <lib3270/properties.h>
... ...
server/src/core/linux/gobject.c
... ... @@ -32,6 +32,7 @@
32 32 *
33 33 */
34 34  
  35 +#include <internals.h>
35 36 #include "gobject.h"
36 37 #include <lib3270.h>
37 38 #include <lib3270/actions.h>
... ...
server/src/core/linux/gobject.h
... ... @@ -37,13 +37,9 @@
37 37  
38 38 #define LINUX_GOBJECT_H_INCLUDED
39 39  
40   - #include <config.h>
  40 + #include <internals.h>
41 41  
42   - #define ENABLE_NLS
43   - #define GETTEXT_PACKAGE PACKAGE_NAME
44   -
45   - #include <libintl.h>
46   - #include <glib/gi18n.h>
  42 + #include <glib.h>
47 43 #include <gio/gio.h>
48 44  
49 45 #include <lib3270.h>
... ...
server/src/core/linux/start.c
... ... @@ -226,31 +226,24 @@ void ipc3270_export_object(GObject *object, const char *name, GError **error) {
226 226 return;
227 227 }
228 228  
229   - g_autofree gchar *basename = g_strdup(name);
230   - {
231   - gchar *ptr = strrchr(basename,':');
232   - if(ptr)
233   - *ptr = 0;
234   - }
235   -
236 229 g_dbus_connection_set_exit_on_close(ipc->dbus.connection,FALSE);
237 230  
238 231 char id = lib3270_get_session_id(ipc->hSession);
239 232  
240 233 if(id) {
241 234  
242   - if(register_object(ipc,basename,id))
  235 + if(register_object(ipc,name,id))
243 236 return;
244 237  
245 238 }
246 239  
247 240 for(id='a'; id < 'z' && !ipc->dbus.id && !*error; id++) {
248 241  
249   - if(register_object(ipc,basename,id))
  242 + if(register_object(ipc,name,id))
250 243 return;
251 244  
252 245 }
253 246  
254   - g_message("Can't register IPC object for session \"%s\"",basename);
  247 + g_message("Can't register IPC object for session \"%s\"",name);
255 248  
256 249 }
... ...
server/src/core/methods/private.h
... ... @@ -36,7 +36,7 @@
36 36  
37 37 #define IPC_METHODS_H_INCLUDED
38 38  
39   - #include <config.h>
  39 + #include <internals.h>
40 40 #include <lib3270.h>
41 41 #include <ipc-glib.h>
42 42  
... ...
server/src/include/internals.h 0 → 100644
... ... @@ -0,0 +1,59 @@
  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. Registro no INPI sob
  5 + * o nome G3270.
  6 + *
  7 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  8 + *
  9 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  10 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  11 + * Free Software Foundation.
  12 + *
  13 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  14 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  15 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  16 + * obter mais detalhes.
  17 + *
  18 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  19 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  20 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  21 + *
  22 + * Este programa está nomeado como - e possui - linhas de código.
  23 + *
  24 + * Contatos:
  25 + *
  26 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  27 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  28 + *
  29 + */
  30 +
  31 + /**
  32 + * @brief Internal definitions for pw3270 IPC plugin.
  33 + *
  34 + * @author Perry Werneck <perry.werneck@gmail.com>
  35 + *
  36 + */
  37 +
  38 +#ifndef INTERNALS_H_INCLUDED
  39 +
  40 + #define INTERNALS_H_INCLUDED
  41 +
  42 + #include <config.h>
  43 +
  44 + #define ENABLE_NLS
  45 + #define GETTEXT_PACKAGE PACKAGE_NAME
  46 +
  47 + #include <glib.h>
  48 + #include <glib/gi18n-lib.h>
  49 +
  50 + #include <lib3270.h>
  51 + #include <lib3270/log.h>
  52 + #include <v3270.h>
  53 +
  54 + G_BEGIN_DECLS
  55 +
  56 +
  57 + G_END_DECLS
  58 +
  59 +#endif // PW3270_IPC_H_INCLUDED
... ...
server/src/include/ipc-glib.h
... ... @@ -157,12 +157,6 @@
157 157 #define g_autofree __attribute__((cleanup(ipc3270_autoptr_cleanup_generic_gfree)))
158 158 #endif // ! GLIB(2,44,0)
159 159  
160   - #ifdef DEBUG
161   - #define debug( fmt, ... ) fprintf(stderr,"%s(%d) " fmt "\n", __FILE__, (int) __LINE__, __VA_ARGS__ ); fflush(stderr);
162   - #else
163   - #define debug(...) /* __VA_ARGS */
164   - #endif
165   -
166 160 typedef struct _ipc_method_int_arg {
167 161 const gchar *name;
168 162 int (*call)(H3270 *hSession, int keycode);
... ...
server/src/plugin/plugin.c
... ... @@ -34,41 +34,51 @@
34 34 *
35 35 */
36 36  
37   - #define ENABLE_NLS
38   - #define GETTEXT_PACKAGE PACKAGE_NAME
39   -
40   - #include <libintl.h>
41   - #include <glib/gi18n.h>
42   - #include <gio/gio.h>
43   -
44 37 #include "private.h"
45 38 #include <v3270.h>
46 39 #include <ipc-glib.h>
47 40  
48   - int pw3270_plugin_stop(GtkWidget G_GNUC_UNUSED(*window), GtkWidget *terminal) {
49   - debug("%s(%p)",__FUNCTION__,g_object_get_data(G_OBJECT(terminal),"ipc-object-info"));
50   - g_object_set_data(G_OBJECT(terminal), "ipc-object-info", NULL);
51   - return 0;
52   - }
  41 + int pw3270_plugin_page_added(GtkWidget *terminal) {
  42 +
  43 + // Creates IPC, associate it with the terminal window.
  44 +
  45 + g_return_val_if_fail(GTK_IS_V3270(terminal),EINVAL);
53 46  
54   - int pw3270_plugin_start(GtkWidget *window, GtkWidget *terminal) {
  47 + // Build session name.
  48 + g_autofree gchar * session_name = g_strdup(v3270_get_session_name(terminal));
  49 + {
  50 + gchar *ptr = strchr(session_name,':');
  51 + if(ptr)
  52 + *ptr = 0;
55 53  
56   - // Creates IPC, associate it with the terminal window
  54 + for(ptr=session_name;*ptr;ptr++) {
  55 +
  56 + if(!g_ascii_isalnum(*ptr)) {
  57 + *ptr = '_';
  58 + } else {
  59 + *ptr = g_ascii_tolower(*ptr);
  60 + }
  61 +
  62 + }
  63 +
  64 + }
  65 +
  66 + debug("Session name for widget %p is \"%s\"",terminal,session_name);
  67 +
  68 + // Create IPC object
57 69 GObject * ipc = ipc3270_new();
58 70 g_object_set_data_full(G_OBJECT(terminal), "ipc-object-info", ipc, g_object_unref);
59 71  
60   - debug("Name: \"%s\"",v3270_get_session_name(terminal));
61   -
62 72 // Set session handle, this starts the IPC communication.
63 73 GError * error = NULL;
64 74  
65 75 ipc3270_set_terminal_widget(ipc,terminal);
66   - ipc3270_export_object(ipc,v3270_get_session_name(terminal),&error);
  76 + ipc3270_export_object(ipc,session_name,&error);
67 77  
68 78 if(error) {
69 79  
70 80 GtkWidget *dialog = gtk_message_dialog_new(
71   - GTK_WINDOW(window),
  81 + GTK_WINDOW(gtk_widget_get_toplevel(terminal)),
72 82 GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
73 83 GTK_MESSAGE_ERROR,
74 84 GTK_BUTTONS_OK,
... ... @@ -82,7 +92,7 @@
82 92  
83 93 gtk_widget_show_all(dialog);
84 94  
85   - return 0;
  95 + return -1;
86 96  
87 97 }
88 98  
... ... @@ -92,7 +102,27 @@
92 102 v3270_set_session_name(terminal, widget_name);
93 103 }
94 104  
95   - return 0;
  105 + return 0;
  106 +
  107 + }
  108 +
  109 + int pw3270_plugin_page_removed(GtkWidget *terminal) {
  110 +
  111 + if(GTK_IS_V3270(terminal)) {
  112 + debug("%s(%p)",__FUNCTION__,g_object_get_data(G_OBJECT(terminal),"ipc-object-info"));
  113 + g_object_set_data(G_OBJECT(terminal), "ipc-object-info", NULL);
  114 + return 0;
  115 + }
  116 +
  117 + return -1;
  118 + }
  119 +
  120 + int pw3270_plugin_start(GtkWidget G_GNUC_UNUSED(*window), GtkWidget *terminal) {
  121 + return pw3270_plugin_page_added(terminal);
  122 + }
  123 +
  124 + int pw3270_plugin_stop(GtkWidget G_GNUC_UNUSED(*window), GtkWidget *terminal) {
  125 + return pw3270_plugin_page_removed(terminal);
96 126 }
97 127  
98 128  
... ...
server/src/plugin/private.h
... ... @@ -37,16 +37,17 @@
37 37  
38 38 #define PRIVATE_H_INCLUDED
39 39  
40   - #include <config.h>
  40 + #include <internals.h>
41 41 #include <ipc-glib.h>
42 42  
  43 + G_BEGIN_DECLS
  44 +
43 45 int pw3270_plugin_start(GtkWidget *window, GtkWidget *terminal);
44 46 int pw3270_plugin_stop(GtkWidget *window, GtkWidget *terminal);
45 47  
46   - #ifdef DEBUG
47   - #define debug( fmt, ... ) fprintf(stderr,"%s(%d) " fmt "\n", __FILE__, (int) __LINE__, __VA_ARGS__ ); fflush(stderr);
48   - #else
49   - #define debug(...) /* __VA_ARGS */
50   - #endif
  48 + int pw3270_plugin_page_added(GtkWidget *terminal);
  49 + int pw3270_plugin_page_removed(GtkWidget *terminal);
  50 +
  51 + G_END_DECLS
51 52  
52 53 #endif // PRIVATE_H_INCLUDED
... ...