Commit 957aa5c9e902c78298c264ee15e5318e0658e6bc

Authored by Perry Werneck
1 parent 11ac88cd
Exists in master and in 1 other branch develop

Adding signal for customized action fire.

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