Commit 2b27f48edb3c46d3f6e2243dd7b97862a5ca9aa0

Authored by perry.werneck@gmail.com
1 parent b70bb2fc

Incluindo suporte a popups na interface dbus

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 }