Commit a112b670bfca3a44f8c299659560a273ac6111dc
1 parent
cb78e38c
Exists in
master
and in
5 other branches
Iniciando inclusao de suporte para "plugin actions"
Showing
6 changed files
with
58 additions
and
17 deletions
Show diff stats
src/include/pw3270/plugin.h
... | ... | @@ -46,6 +46,11 @@ |
46 | 46 | LIB3270_EXPORT void pw3270_plugin_start(GtkWidget *window); |
47 | 47 | LIB3270_EXPORT void pw3270_plugin_stop(GtkWidget *window); |
48 | 48 | |
49 | + // plugins | |
50 | + LIB3270_EXPORT void pw3270_init_plugins(GtkWidget *widget); | |
51 | + LIB3270_EXPORT void pw3270_deinit_plugins(GtkWidget *widget); | |
52 | + LIB3270_EXPORT int pw3270_setup_plugin_action(GtkAction *action, GtkWidget *widget, const gchar *name); | |
53 | + | |
49 | 54 | #ifdef __cplusplus |
50 | 55 | } |
51 | 56 | #endif | ... | ... |
src/pw3270/Makefile.in
... | ... | @@ -56,10 +56,10 @@ include uiparser/sources.mak |
56 | 56 | |
57 | 57 | #---[ Targets ]---------------------------------------------------------------- |
58 | 58 | |
59 | -APP_SOURCES= main.c plugin.c @APP_GUI_SRC@ | |
59 | +APP_SOURCES= main.c @APP_GUI_SRC@ | |
60 | 60 | |
61 | 61 | LIB_SOURCES= window.c actions.c fonts.c dialog.c print.c colors.c \ |
62 | - filetransfer.c tools.c \ | |
62 | + filetransfer.c tools.c plugin.c \ | |
63 | 63 | $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) \ |
64 | 64 | $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \ |
65 | 65 | $(foreach SRC, $(COMMON_SRC), common/$(SRC)) | ... | ... |
src/pw3270/actions.c
... | ... | @@ -32,6 +32,7 @@ |
32 | 32 | #include "globals.h" |
33 | 33 | #include "uiparser/parser.h" |
34 | 34 | #include <pw3270/v3270.h> |
35 | + #include <pw3270/plugin.h> | |
35 | 36 | #include "filetransfer.h" |
36 | 37 | #include <lib3270/actions.h> |
37 | 38 | #include <lib3270/selection.h> |
... | ... | @@ -47,7 +48,7 @@ |
47 | 48 | #define TOGGLE_GDKDEBUG LIB3270_TOGGLE_COUNT+1 |
48 | 49 | |
49 | 50 | #ifdef X3270_TRACE |
50 | - #define trace_action(a,w) lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p\n",gtk_action_get_name(a),w); | |
51 | + #define trace_action(a,w) lib3270_trace_event(v3270_get_session(w),"Action %s activated on widget %p\n",gtk_action_get_name(a),w); | |
51 | 52 | #else |
52 | 53 | #define trace_action(a,w) /* */ |
53 | 54 | #endif // X3270_TRACE |
... | ... | @@ -88,13 +89,6 @@ static void connect_action(GtkAction *action, GtkWidget *widget) |
88 | 89 | hostname_action(action,widget); |
89 | 90 | } |
90 | 91 | |
91 | -/* | |
92 | -static void nop_action(GtkAction *action, GtkWidget *widget) | |
93 | -{ | |
94 | - trace_action(action,widget); | |
95 | -} | |
96 | -*/ | |
97 | - | |
98 | 92 | static void disconnect_action(GtkAction *action, GtkWidget *widget) |
99 | 93 | { |
100 | 94 | trace_action(action,widget); |
... | ... | @@ -289,6 +283,10 @@ static void connect_standard_action(GtkAction *action, GtkWidget *widget, const |
289 | 283 | if(!g_ascii_strcasecmp(name,"screensizes")) |
290 | 284 | return; |
291 | 285 | |
286 | + // Check for plugin actions | |
287 | + if(!pw3270_setup_plugin_action(action, widget, name)) | |
288 | + return; | |
289 | + | |
292 | 290 | // Not-found, disable action |
293 | 291 | gtk_action_set_sensitive(action,FALSE); |
294 | 292 | } | ... | ... |
src/pw3270/globals.h
... | ... | @@ -77,9 +77,6 @@ |
77 | 77 | G_GNUC_INTERNAL void upload_action(GtkAction *action, GtkWidget *widget); |
78 | 78 | G_GNUC_INTERNAL void print_settings_action(GtkAction *action, GtkWidget *widget); |
79 | 79 | |
80 | - // plugins | |
81 | - G_GNUC_INTERNAL void init_plugins(GtkWidget *widget); | |
82 | - G_GNUC_INTERNAL void deinit_plugins(GtkWidget *widget); | |
83 | 80 | |
84 | 81 | |
85 | 82 | ... | ... |
src/pw3270/main.c
... | ... | @@ -282,7 +282,7 @@ int main(int argc, char *argv[]) |
282 | 282 | else |
283 | 283 | pw3270_restore_window(toplevel,"toplevel"); |
284 | 284 | |
285 | - init_plugins(toplevel); | |
285 | + pw3270_init_plugins(toplevel); | |
286 | 286 | gtk_window_present(GTK_WINDOW(toplevel)); |
287 | 287 | |
288 | 288 | #ifdef HAVE_GTKMAC |
... | ... | @@ -291,7 +291,7 @@ int main(int argc, char *argv[]) |
291 | 291 | |
292 | 292 | gtk_main(); |
293 | 293 | |
294 | - deinit_plugins(toplevel); | |
294 | + pw3270_deinit_plugins(toplevel); | |
295 | 295 | |
296 | 296 | } |
297 | 297 | ... | ... |
src/pw3270/plugin.c
... | ... | @@ -125,7 +125,7 @@ |
125 | 125 | |
126 | 126 | } |
127 | 127 | |
128 | - G_GNUC_INTERNAL void init_plugins(GtkWidget *widget) | |
128 | + LIB3270_EXPORT void pw3270_init_plugins(GtkWidget *widget) | |
129 | 129 | { |
130 | 130 | #if defined(DEBUG) |
131 | 131 | load("." G_DIR_SEPARATOR_S "plugins", widget); |
... | ... | @@ -137,7 +137,7 @@ |
137 | 137 | |
138 | 138 | } |
139 | 139 | |
140 | - G_GNUC_INTERNAL void deinit_plugins(GtkWidget *widget) | |
140 | + LIB3270_EXPORT void pw3270_deinit_plugins(GtkWidget *widget) | |
141 | 141 | { |
142 | 142 | int f; |
143 | 143 | |
... | ... | @@ -168,3 +168,44 @@ |
168 | 168 | hPlugin = NULL; |
169 | 169 | nPlugin = 0; |
170 | 170 | } |
171 | + | |
172 | + LIB3270_EXPORT int pw3270_setup_plugin_action(GtkAction *action, GtkWidget *widget, const gchar *name) | |
173 | + { | |
174 | + int f; | |
175 | + gchar * fname; | |
176 | + | |
177 | + if(!hPlugin) | |
178 | + return ENOENT; | |
179 | + | |
180 | + // Search for plugin setup calls | |
181 | + fname = g_strdup_printf("pw3270_setup_action_%s",name); | |
182 | + for(f=0;f<nPlugin;f++) | |
183 | + { | |
184 | + int (*setup)(GtkAction *action, GtkWidget *widget); | |
185 | + | |
186 | + if(g_module_symbol(hPlugin[f], fname, (gpointer) &setup)) | |
187 | + { | |
188 | + g_free(fname); | |
189 | + return setup(action,widget); | |
190 | + } | |
191 | + } | |
192 | + g_free(fname); | |
193 | + | |
194 | + // Search for activation callbacks | |
195 | + fname = g_strdup_printf("pw3270_action_%s_activated",name); | |
196 | + for(f=0;f<nPlugin;f++) | |
197 | + { | |
198 | + void (*call)(GtkAction *action, GtkWidget *widget); | |
199 | + | |
200 | + if(g_module_symbol(hPlugin[f], fname, (gpointer) &call)) | |
201 | + { | |
202 | + g_signal_connect(action,"activate",G_CALLBACK(call),widget); | |
203 | + g_free(fname); | |
204 | + return 0; | |
205 | + } | |
206 | + } | |
207 | + g_free(fname); | |
208 | + | |
209 | + return ENOENT; | |
210 | + | |
211 | + } | ... | ... |