diff --git a/src/include/pw3270/plugin.h b/src/include/pw3270/plugin.h index abf2c21..8fe3fdb 100644 --- a/src/include/pw3270/plugin.h +++ b/src/include/pw3270/plugin.h @@ -46,6 +46,11 @@ LIB3270_EXPORT void pw3270_plugin_start(GtkWidget *window); LIB3270_EXPORT void pw3270_plugin_stop(GtkWidget *window); + // plugins + LIB3270_EXPORT void pw3270_init_plugins(GtkWidget *widget); + LIB3270_EXPORT void pw3270_deinit_plugins(GtkWidget *widget); + LIB3270_EXPORT int pw3270_setup_plugin_action(GtkAction *action, GtkWidget *widget, const gchar *name); + #ifdef __cplusplus } #endif diff --git a/src/pw3270/Makefile.in b/src/pw3270/Makefile.in index c4b6c38..a6e9e0d 100644 --- a/src/pw3270/Makefile.in +++ b/src/pw3270/Makefile.in @@ -56,10 +56,10 @@ include uiparser/sources.mak #---[ Targets ]---------------------------------------------------------------- -APP_SOURCES= main.c plugin.c @APP_GUI_SRC@ +APP_SOURCES= main.c @APP_GUI_SRC@ LIB_SOURCES= window.c actions.c fonts.c dialog.c print.c colors.c \ - filetransfer.c tools.c \ + filetransfer.c tools.c plugin.c \ $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) \ $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \ $(foreach SRC, $(COMMON_SRC), common/$(SRC)) diff --git a/src/pw3270/actions.c b/src/pw3270/actions.c index c2917ca..255040d 100644 --- a/src/pw3270/actions.c +++ b/src/pw3270/actions.c @@ -32,6 +32,7 @@ #include "globals.h" #include "uiparser/parser.h" #include + #include #include "filetransfer.h" #include #include @@ -47,7 +48,7 @@ #define TOGGLE_GDKDEBUG LIB3270_TOGGLE_COUNT+1 #ifdef X3270_TRACE - #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); + #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); #else #define trace_action(a,w) /* */ #endif // X3270_TRACE @@ -88,13 +89,6 @@ static void connect_action(GtkAction *action, GtkWidget *widget) hostname_action(action,widget); } -/* -static void nop_action(GtkAction *action, GtkWidget *widget) -{ - trace_action(action,widget); -} -*/ - static void disconnect_action(GtkAction *action, GtkWidget *widget) { trace_action(action,widget); @@ -289,6 +283,10 @@ static void connect_standard_action(GtkAction *action, GtkWidget *widget, const if(!g_ascii_strcasecmp(name,"screensizes")) return; + // Check for plugin actions + if(!pw3270_setup_plugin_action(action, widget, name)) + return; + // Not-found, disable action gtk_action_set_sensitive(action,FALSE); } diff --git a/src/pw3270/globals.h b/src/pw3270/globals.h index c529519..48fa171 100644 --- a/src/pw3270/globals.h +++ b/src/pw3270/globals.h @@ -77,9 +77,6 @@ G_GNUC_INTERNAL void upload_action(GtkAction *action, GtkWidget *widget); G_GNUC_INTERNAL void print_settings_action(GtkAction *action, GtkWidget *widget); - // plugins - G_GNUC_INTERNAL void init_plugins(GtkWidget *widget); - G_GNUC_INTERNAL void deinit_plugins(GtkWidget *widget); diff --git a/src/pw3270/main.c b/src/pw3270/main.c index e99c689..97ccb0c 100644 --- a/src/pw3270/main.c +++ b/src/pw3270/main.c @@ -282,7 +282,7 @@ int main(int argc, char *argv[]) else pw3270_restore_window(toplevel,"toplevel"); - init_plugins(toplevel); + pw3270_init_plugins(toplevel); gtk_window_present(GTK_WINDOW(toplevel)); #ifdef HAVE_GTKMAC @@ -291,7 +291,7 @@ int main(int argc, char *argv[]) gtk_main(); - deinit_plugins(toplevel); + pw3270_deinit_plugins(toplevel); } diff --git a/src/pw3270/plugin.c b/src/pw3270/plugin.c index 0078609..091497f 100644 --- a/src/pw3270/plugin.c +++ b/src/pw3270/plugin.c @@ -125,7 +125,7 @@ } - G_GNUC_INTERNAL void init_plugins(GtkWidget *widget) + LIB3270_EXPORT void pw3270_init_plugins(GtkWidget *widget) { #if defined(DEBUG) load("." G_DIR_SEPARATOR_S "plugins", widget); @@ -137,7 +137,7 @@ } - G_GNUC_INTERNAL void deinit_plugins(GtkWidget *widget) + LIB3270_EXPORT void pw3270_deinit_plugins(GtkWidget *widget) { int f; @@ -168,3 +168,44 @@ hPlugin = NULL; nPlugin = 0; } + + LIB3270_EXPORT int pw3270_setup_plugin_action(GtkAction *action, GtkWidget *widget, const gchar *name) + { + int f; + gchar * fname; + + if(!hPlugin) + return ENOENT; + + // Search for plugin setup calls + fname = g_strdup_printf("pw3270_setup_action_%s",name); + for(f=0;f