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), |