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