diff --git a/src/classlib/remote.cc b/src/classlib/remote.cc index f9748f4..eefd8c4 100644 --- a/src/classlib/remote.cc +++ b/src/classlib/remote.cc @@ -222,7 +222,9 @@ dbus_message_unref(msg); throw e; + return -1; } + dbus_message_unref(msg); } return -1; } @@ -982,6 +984,59 @@ { return query_intval("setClipboard", DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID); } + + int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...) + { + DBusMessage * msg = dbus_message_new_method_call( this->dest, // Destination + this->path, // Path + this->intf, // Interface + "showPopup"); // method + + if (!msg) + { + throw exception("%s","Error creating DBUS message for popup"); + return -1; + } + else + { + char text[4096]; + char * ptr = text; + va_list arg_ptr; + dbus_int32_t i = (dbus_int32_t) id; + + va_start(arg_ptr, fmt); + vsnprintf(text,4095,fmt,arg_ptr); + va_end(arg_ptr); + + if(!dbus_message_append_args(msg, DBUS_TYPE_INT32, &i, DBUS_TYPE_STRING, &title, DBUS_TYPE_STRING, &message, DBUS_TYPE_STRING, &ptr, DBUS_TYPE_INVALID)) + { + dbus_message_unref(msg); + throw exception("%s","Cant append args for popup message"); + } + else + { + DBusMessage * reply; + DBusError error; + + dbus_error_init(&error); + reply = dbus_connection_send_with_reply_and_block(conn,msg,DBUS_TIMEOUT_INFINITE,&error); + dbus_message_unref(msg); + + if(!reply) + { + exception e = exception("%s",error.message); + dbus_error_free(&error); + throw e; + return -1; + } + + return get_intval(reply); + + } + } + return 0; + } + #endif // HAVE_DBUS }; diff --git a/src/plugins/dbus3270/gobject.c b/src/plugins/dbus3270/gobject.c index 1be7787..a8518c0 100644 --- a/src/plugins/dbus3270/gobject.c +++ b/src/plugins/dbus3270/gobject.c @@ -446,3 +446,9 @@ void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBu dbus_g_method_return(context,v3270_set_script(widget,*text,mode != 0)); } + +void pw3270_dbus_show_popup(PW3270Dbus *object, int id, const gchar *title, const gchar *msg, const gchar *text, DBusGMethodInvocation *context) +{ + lib3270_popup_dialog(pw3270_dbus_get_session_handle(object), (LIB3270_NOTIFY) id , title, msg, "%s", text); + dbus_g_method_return(context,0); +} diff --git a/src/plugins/dbus3270/pw3270dbus.xml b/src/plugins/dbus3270/pw3270dbus.xml index 921eee1..6c9ca10 100644 --- a/src/plugins/dbus3270/pw3270dbus.xml +++ b/src/plugins/dbus3270/pw3270dbus.xml @@ -142,6 +142,13 @@ + + + + + + + diff --git a/src/plugins/dbus3270/service.h b/src/plugins/dbus3270/service.h index 342f0b2..926cdf4 100644 --- a/src/plugins/dbus3270/service.h +++ b/src/plugins/dbus3270/service.h @@ -91,6 +91,8 @@ void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context); + void pw3270_dbus_show_popup(PW3270Dbus *object, int id, const gchar *title, const gchar *msg, const gchar *text, DBusGMethodInvocation *context); + // Actions void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context); void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context); diff --git a/src/pw3270/v3270/widget.c b/src/pw3270/v3270/widget.c index f0c0af1..1c900f4 100644 --- a/src/pw3270/v3270/widget.c +++ b/src/pw3270/v3270/widget.c @@ -217,10 +217,10 @@ void v3270_popup_message(GtkWidget *widget, LIB3270_NOTIFY type , const gchar *t if(message) { dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",message); - if(text) + if(text && *text) gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),"%s",text); } - else if(text) + else if(text && *text) { dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",text); } -- libgit2 0.21.2