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,6 +46,11 @@ | ||
46 | LIB3270_EXPORT void pw3270_plugin_start(GtkWidget *window); | 46 | LIB3270_EXPORT void pw3270_plugin_start(GtkWidget *window); |
47 | LIB3270_EXPORT void pw3270_plugin_stop(GtkWidget *window); | 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 | #ifdef __cplusplus | 54 | #ifdef __cplusplus |
50 | } | 55 | } |
51 | #endif | 56 | #endif |
src/pw3270/Makefile.in
@@ -56,10 +56,10 @@ include uiparser/sources.mak | @@ -56,10 +56,10 @@ include uiparser/sources.mak | ||
56 | 56 | ||
57 | #---[ Targets ]---------------------------------------------------------------- | 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 | LIB_SOURCES= window.c actions.c fonts.c dialog.c print.c colors.c \ | 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 | $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) \ | 63 | $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) \ |
64 | $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \ | 64 | $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \ |
65 | $(foreach SRC, $(COMMON_SRC), common/$(SRC)) | 65 | $(foreach SRC, $(COMMON_SRC), common/$(SRC)) |
src/pw3270/actions.c
@@ -32,6 +32,7 @@ | @@ -32,6 +32,7 @@ | ||
32 | #include "globals.h" | 32 | #include "globals.h" |
33 | #include "uiparser/parser.h" | 33 | #include "uiparser/parser.h" |
34 | #include <pw3270/v3270.h> | 34 | #include <pw3270/v3270.h> |
35 | + #include <pw3270/plugin.h> | ||
35 | #include "filetransfer.h" | 36 | #include "filetransfer.h" |
36 | #include <lib3270/actions.h> | 37 | #include <lib3270/actions.h> |
37 | #include <lib3270/selection.h> | 38 | #include <lib3270/selection.h> |
@@ -47,7 +48,7 @@ | @@ -47,7 +48,7 @@ | ||
47 | #define TOGGLE_GDKDEBUG LIB3270_TOGGLE_COUNT+1 | 48 | #define TOGGLE_GDKDEBUG LIB3270_TOGGLE_COUNT+1 |
48 | 49 | ||
49 | #ifdef X3270_TRACE | 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 | #else | 52 | #else |
52 | #define trace_action(a,w) /* */ | 53 | #define trace_action(a,w) /* */ |
53 | #endif // X3270_TRACE | 54 | #endif // X3270_TRACE |
@@ -88,13 +89,6 @@ static void connect_action(GtkAction *action, GtkWidget *widget) | @@ -88,13 +89,6 @@ static void connect_action(GtkAction *action, GtkWidget *widget) | ||
88 | hostname_action(action,widget); | 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 | static void disconnect_action(GtkAction *action, GtkWidget *widget) | 92 | static void disconnect_action(GtkAction *action, GtkWidget *widget) |
99 | { | 93 | { |
100 | trace_action(action,widget); | 94 | trace_action(action,widget); |
@@ -289,6 +283,10 @@ static void connect_standard_action(GtkAction *action, GtkWidget *widget, const | @@ -289,6 +283,10 @@ static void connect_standard_action(GtkAction *action, GtkWidget *widget, const | ||
289 | if(!g_ascii_strcasecmp(name,"screensizes")) | 283 | if(!g_ascii_strcasecmp(name,"screensizes")) |
290 | return; | 284 | return; |
291 | 285 | ||
286 | + // Check for plugin actions | ||
287 | + if(!pw3270_setup_plugin_action(action, widget, name)) | ||
288 | + return; | ||
289 | + | ||
292 | // Not-found, disable action | 290 | // Not-found, disable action |
293 | gtk_action_set_sensitive(action,FALSE); | 291 | gtk_action_set_sensitive(action,FALSE); |
294 | } | 292 | } |
src/pw3270/globals.h
@@ -77,9 +77,6 @@ | @@ -77,9 +77,6 @@ | ||
77 | G_GNUC_INTERNAL void upload_action(GtkAction *action, GtkWidget *widget); | 77 | G_GNUC_INTERNAL void upload_action(GtkAction *action, GtkWidget *widget); |
78 | G_GNUC_INTERNAL void print_settings_action(GtkAction *action, GtkWidget *widget); | 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,7 +282,7 @@ int main(int argc, char *argv[]) | ||
282 | else | 282 | else |
283 | pw3270_restore_window(toplevel,"toplevel"); | 283 | pw3270_restore_window(toplevel,"toplevel"); |
284 | 284 | ||
285 | - init_plugins(toplevel); | 285 | + pw3270_init_plugins(toplevel); |
286 | gtk_window_present(GTK_WINDOW(toplevel)); | 286 | gtk_window_present(GTK_WINDOW(toplevel)); |
287 | 287 | ||
288 | #ifdef HAVE_GTKMAC | 288 | #ifdef HAVE_GTKMAC |
@@ -291,7 +291,7 @@ int main(int argc, char *argv[]) | @@ -291,7 +291,7 @@ int main(int argc, char *argv[]) | ||
291 | 291 | ||
292 | gtk_main(); | 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,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 | #if defined(DEBUG) | 130 | #if defined(DEBUG) |
131 | load("." G_DIR_SEPARATOR_S "plugins", widget); | 131 | load("." G_DIR_SEPARATOR_S "plugins", widget); |
@@ -137,7 +137,7 @@ | @@ -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 | int f; | 142 | int f; |
143 | 143 | ||
@@ -168,3 +168,44 @@ | @@ -168,3 +168,44 @@ | ||
168 | hPlugin = NULL; | 168 | hPlugin = NULL; |
169 | nPlugin = 0; | 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 | + } |