Commit 2b27f48edb3c46d3f6e2243dd7b97862a5ca9aa0
1 parent
b70bb2fc
Exists in
master
and in
5 other branches
Incluindo suporte a popups na interface dbus
Showing
5 changed files
with
72 additions
and
2 deletions
Show diff stats
src/classlib/remote.cc
| @@ -222,7 +222,9 @@ | @@ -222,7 +222,9 @@ | ||
| 222 | 222 | ||
| 223 | dbus_message_unref(msg); | 223 | dbus_message_unref(msg); |
| 224 | throw e; | 224 | throw e; |
| 225 | + return -1; | ||
| 225 | } | 226 | } |
| 227 | + dbus_message_unref(msg); | ||
| 226 | } | 228 | } |
| 227 | return -1; | 229 | return -1; |
| 228 | } | 230 | } |
| @@ -982,6 +984,59 @@ | @@ -982,6 +984,59 @@ | ||
| 982 | { | 984 | { |
| 983 | return query_intval("setClipboard", DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID); | 985 | return query_intval("setClipboard", DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID); |
| 984 | } | 986 | } |
| 987 | + | ||
| 988 | + int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...) | ||
| 989 | + { | ||
| 990 | + DBusMessage * msg = dbus_message_new_method_call( this->dest, // Destination | ||
| 991 | + this->path, // Path | ||
| 992 | + this->intf, // Interface | ||
| 993 | + "showPopup"); // method | ||
| 994 | + | ||
| 995 | + if (!msg) | ||
| 996 | + { | ||
| 997 | + throw exception("%s","Error creating DBUS message for popup"); | ||
| 998 | + return -1; | ||
| 999 | + } | ||
| 1000 | + else | ||
| 1001 | + { | ||
| 1002 | + char text[4096]; | ||
| 1003 | + char * ptr = text; | ||
| 1004 | + va_list arg_ptr; | ||
| 1005 | + dbus_int32_t i = (dbus_int32_t) id; | ||
| 1006 | + | ||
| 1007 | + va_start(arg_ptr, fmt); | ||
| 1008 | + vsnprintf(text,4095,fmt,arg_ptr); | ||
| 1009 | + va_end(arg_ptr); | ||
| 1010 | + | ||
| 1011 | + 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)) | ||
| 1012 | + { | ||
| 1013 | + dbus_message_unref(msg); | ||
| 1014 | + throw exception("%s","Cant append args for popup message"); | ||
| 1015 | + } | ||
| 1016 | + else | ||
| 1017 | + { | ||
| 1018 | + DBusMessage * reply; | ||
| 1019 | + DBusError error; | ||
| 1020 | + | ||
| 1021 | + dbus_error_init(&error); | ||
| 1022 | + reply = dbus_connection_send_with_reply_and_block(conn,msg,DBUS_TIMEOUT_INFINITE,&error); | ||
| 1023 | + dbus_message_unref(msg); | ||
| 1024 | + | ||
| 1025 | + if(!reply) | ||
| 1026 | + { | ||
| 1027 | + exception e = exception("%s",error.message); | ||
| 1028 | + dbus_error_free(&error); | ||
| 1029 | + throw e; | ||
| 1030 | + return -1; | ||
| 1031 | + } | ||
| 1032 | + | ||
| 1033 | + return get_intval(reply); | ||
| 1034 | + | ||
| 1035 | + } | ||
| 1036 | + } | ||
| 1037 | + return 0; | ||
| 1038 | + } | ||
| 1039 | + | ||
| 985 | #endif // HAVE_DBUS | 1040 | #endif // HAVE_DBUS |
| 986 | 1041 | ||
| 987 | }; | 1042 | }; |
src/plugins/dbus3270/gobject.c
| @@ -446,3 +446,9 @@ void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBu | @@ -446,3 +446,9 @@ void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBu | ||
| 446 | 446 | ||
| 447 | dbus_g_method_return(context,v3270_set_script(widget,*text,mode != 0)); | 447 | dbus_g_method_return(context,v3270_set_script(widget,*text,mode != 0)); |
| 448 | } | 448 | } |
| 449 | + | ||
| 450 | +void pw3270_dbus_show_popup(PW3270Dbus *object, int id, const gchar *title, const gchar *msg, const gchar *text, DBusGMethodInvocation *context) | ||
| 451 | +{ | ||
| 452 | + lib3270_popup_dialog(pw3270_dbus_get_session_handle(object), (LIB3270_NOTIFY) id , title, msg, "%s", text); | ||
| 453 | + dbus_g_method_return(context,0); | ||
| 454 | +} |
src/plugins/dbus3270/pw3270dbus.xml
| @@ -142,6 +142,13 @@ | @@ -142,6 +142,13 @@ | ||
| 142 | <arg type="i" name="status" direction="in" /> | 142 | <arg type="i" name="status" direction="in" /> |
| 143 | <arg type="i" name="result" direction="out" /> | 143 | <arg type="i" name="result" direction="out" /> |
| 144 | </method> | 144 | </method> |
| 145 | + <method name="showPopup"> | ||
| 146 | + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | ||
| 147 | + <arg type="i" name="id" direction="in" /> | ||
| 148 | + <arg type="s" name="title" direction="in" /> | ||
| 149 | + <arg type="s" name="msg" direction="in" /> | ||
| 150 | + <arg type="s" name="text" direction="in" /> | ||
| 151 | + </method> | ||
| 145 | </interface> | 152 | </interface> |
| 146 | 153 | ||
| 147 | </node> | 154 | </node> |
src/plugins/dbus3270/service.h
| @@ -91,6 +91,8 @@ | @@ -91,6 +91,8 @@ | ||
| 91 | 91 | ||
| 92 | void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context); | 92 | void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context); |
| 93 | 93 | ||
| 94 | + void pw3270_dbus_show_popup(PW3270Dbus *object, int id, const gchar *title, const gchar *msg, const gchar *text, DBusGMethodInvocation *context); | ||
| 95 | + | ||
| 94 | // Actions | 96 | // Actions |
| 95 | void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context); | 97 | void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context); |
| 96 | void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context); | 98 | void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context); |
src/pw3270/v3270/widget.c
| @@ -217,10 +217,10 @@ void v3270_popup_message(GtkWidget *widget, LIB3270_NOTIFY type , const gchar *t | @@ -217,10 +217,10 @@ void v3270_popup_message(GtkWidget *widget, LIB3270_NOTIFY type , const gchar *t | ||
| 217 | if(message) | 217 | if(message) |
| 218 | { | 218 | { |
| 219 | dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",message); | 219 | dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",message); |
| 220 | - if(text) | 220 | + if(text && *text) |
| 221 | gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),"%s",text); | 221 | gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),"%s",text); |
| 222 | } | 222 | } |
| 223 | - else if(text) | 223 | + else if(text && *text) |
| 224 | { | 224 | { |
| 225 | dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",text); | 225 | dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",text); |
| 226 | } | 226 | } |