Commit 957aa5c9e902c78298c264ee15e5318e0658e6bc
1 parent
11ac88cd
Exists in
master
and in
1 other branch
Adding signal for customized action fire.
Showing
3 changed files
with
30 additions
and
52 deletions
Show diff stats
src/include/internals.h
| @@ -118,6 +118,11 @@ | @@ -118,6 +118,11 @@ | ||
| 118 | V3270_SIGNAL_LOAD_POPUP_RESPONSE, ///< @brief Load popup response (GTK_RESPONSE_NONE to show popup). | 118 | V3270_SIGNAL_LOAD_POPUP_RESPONSE, ///< @brief Load popup response (GTK_RESPONSE_NONE to show popup). |
| 119 | V3270_SIGNAL_SAVE_POPUP_RESPONSE, ///< @brief Save popup response. | 119 | V3270_SIGNAL_SAVE_POPUP_RESPONSE, ///< @brief Save popup response. |
| 120 | 120 | ||
| 121 | + // | ||
| 122 | + // Misc signals | ||
| 123 | + // | ||
| 124 | + V3270_SIGNAL_FIRE_ACTION, ///< @brief Fire action by name. | ||
| 125 | + | ||
| 121 | V3270_SIGNAL_LAST | 126 | V3270_SIGNAL_LAST |
| 122 | }; | 127 | }; |
| 123 | 128 |
src/terminal/callbacks.c
| @@ -398,58 +398,6 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title | @@ -398,58 +398,6 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title | ||
| 398 | g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_update_oia, data, g_free); | 398 | g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_update_oia, data, g_free); |
| 399 | } | 399 | } |
| 400 | 400 | ||
| 401 | - /* | ||
| 402 | - static int popup_ssl_error(H3270 *session, int rc, const char *title, const char *summary, const char *body) | ||
| 403 | - { | ||
| 404 | - GtkWidget *terminal = (GtkWidget *) lib3270_get_user_data(session); | ||
| 405 | - | ||
| 406 | - debug("%s.summary=\"%s\"",__FUNCTION__,summary); | ||
| 407 | - debug("%s.body=\"%s\"",__FUNCTION__,body ? body : "undefined"); | ||
| 408 | - | ||
| 409 | - if(terminal && GTK_IS_V3270(terminal)) | ||
| 410 | - { | ||
| 411 | - GtkWidget * dialog = gtk_message_dialog_new_with_markup( | ||
| 412 | - GTK_WINDOW(gtk_widget_get_toplevel(terminal)), | ||
| 413 | - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | ||
| 414 | - GTK_MESSAGE_WARNING, | ||
| 415 | - GTK_BUTTONS_NONE, | ||
| 416 | - "%s", | ||
| 417 | - summary | ||
| 418 | - ); | ||
| 419 | - | ||
| 420 | - gtk_window_set_title(GTK_WINDOW(dialog), title); | ||
| 421 | - | ||
| 422 | - if(body && *body) | ||
| 423 | - { | ||
| 424 | - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",body); | ||
| 425 | - } | ||
| 426 | - else if(rc) | ||
| 427 | - { | ||
| 428 | - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_( "The error code was %d"),rc); | ||
| 429 | - } | ||
| 430 | - | ||
| 431 | - gtk_dialog_add_buttons( | ||
| 432 | - GTK_DIALOG(dialog), | ||
| 433 | - _("Cancel"), GTK_RESPONSE_CANCEL, | ||
| 434 | - _("Continue"), GTK_RESPONSE_APPLY, | ||
| 435 | - NULL | ||
| 436 | - ); | ||
| 437 | - | ||
| 438 | - gtk_dialog_set_default_response(GTK_DIALOG (dialog),GTK_RESPONSE_CANCEL); | ||
| 439 | - | ||
| 440 | - gtk_widget_show_all(dialog); | ||
| 441 | - int rc = gtk_dialog_run(GTK_DIALOG(dialog)); | ||
| 442 | - gtk_widget_destroy(dialog); | ||
| 443 | - | ||
| 444 | - if(rc == GTK_RESPONSE_APPLY) | ||
| 445 | - return 0; | ||
| 446 | - | ||
| 447 | - } | ||
| 448 | - | ||
| 449 | - return -1; | ||
| 450 | - } | ||
| 451 | - */ | ||
| 452 | - | ||
| 453 | static int popup(H3270 *hSession, const LIB3270_POPUP *popup, unsigned char wait) { | 401 | static int popup(H3270 *hSession, const LIB3270_POPUP *popup, unsigned char wait) { |
| 454 | 402 | ||
| 455 | GtkResponseType response = v3270_popup_dialog_show( | 403 | GtkResponseType response = v3270_popup_dialog_show( |
| @@ -464,6 +412,21 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title | @@ -464,6 +412,21 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title | ||
| 464 | 412 | ||
| 465 | } | 413 | } |
| 466 | 414 | ||
| 415 | + static int action(H3270 *hSession, const char *name) { | ||
| 416 | + | ||
| 417 | + guint response = ENOENT; | ||
| 418 | + | ||
| 419 | + v3270_signal_emit( | ||
| 420 | + GTK_WIDGET(lib3270_get_user_data(hSession)), | ||
| 421 | + V3270_SIGNAL_FIRE_ACTION, | ||
| 422 | + name, | ||
| 423 | + &response | ||
| 424 | + ); | ||
| 425 | + | ||
| 426 | + return response; | ||
| 427 | + } | ||
| 428 | + | ||
| 429 | + | ||
| 467 | void v3270_install_callbacks(v3270 *widget) | 430 | void v3270_install_callbacks(v3270 *widget) |
| 468 | { | 431 | { |
| 469 | struct lib3270_session_callbacks *cbk; | 432 | struct lib3270_session_callbacks *cbk; |
| @@ -517,6 +480,7 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title | @@ -517,6 +480,7 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title | ||
| 517 | cbk->save = save; | 480 | cbk->save = save; |
| 518 | cbk->load = load; | 481 | cbk->load = load; |
| 519 | cbk->popup = popup; | 482 | cbk->popup = popup; |
| 483 | + cbk->action = action; | ||
| 520 | 484 | ||
| 521 | } | 485 | } |
| 522 | 486 |
src/terminal/widget.c
| @@ -498,6 +498,15 @@ static void finalize(GObject *object) { | @@ -498,6 +498,15 @@ static void finalize(GObject *object) { | ||
| 498 | v3270_UINT__POINTER, | 498 | v3270_UINT__POINTER, |
| 499 | G_TYPE_UINT, 1, G_TYPE_POINTER); | 499 | G_TYPE_UINT, 1, G_TYPE_POINTER); |
| 500 | 500 | ||
| 501 | + v3270_widget_signal[V3270_SIGNAL_FIRE_ACTION] = | ||
| 502 | + g_signal_new( I_("fire-action"), | ||
| 503 | + G_OBJECT_CLASS_TYPE (gobject_class), | ||
| 504 | + G_SIGNAL_RUN_LAST, | ||
| 505 | + 0, | ||
| 506 | + NULL, NULL, | ||
| 507 | + v3270_UINT__POINTER, | ||
| 508 | + G_TYPE_UINT, 1, G_TYPE_POINTER); | ||
| 509 | + | ||
| 501 | v3270_widget_signal[V3270_SIGNAL_SAVE_POPUP_RESPONSE] = | 510 | v3270_widget_signal[V3270_SIGNAL_SAVE_POPUP_RESPONSE] = |
| 502 | g_signal_new( I_("save-popup-response"), | 511 | g_signal_new( I_("save-popup-response"), |
| 503 | G_OBJECT_CLASS_TYPE (gobject_class), | 512 | G_OBJECT_CLASS_TYPE (gobject_class), |