]> git.saurik.com Git - wxWidgets.git/commitdiff
call OnExec() taking wxString argument from OnExecute() by default
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 12 Jan 2008 21:04:10 +0000 (21:04 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 12 Jan 2008 21:04:10 +0000 (21:04 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51185 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/ipcconn.tex
include/wx/ipcbase.h
src/common/ipcbase.cpp

index 9228db687bf1e3e2c5684710eacaa9e41e82357a..ebe250a96d668e61ef7b03054ac7ec79ffc55643 100644 (file)
@@ -157,6 +157,8 @@ Deprecated methods and their replacements
 - wxXmlProperty class was renamed to wxXmlAttribute in order to use standard
   terminology. Corresponding wxXmlNode methods were renamed to use
   "Attribute" instead of "Property" or "Prop" in their names.
+- wxConnection::OnExecute() is not formally deprecated yet but new code should
+  use simpler OnExec() version which is called with wxString argument
 
 
 Major new features in this release
index 88e791ef7943d6f4e6515bbf775a2fd1f6c8eb3a..fee3d59ff990cf279c40b7796d3085a0728e2162 100644 (file)
@@ -117,7 +117,7 @@ to be called. Returns true if successful.
 Called by the client application to execute a command on the
 server. Can also be used to transfer arbitrary data to the server
 (similar to \helpref{wxConnection::Poke}{wxconnectionpoke} in
-that respect). Causes the server connection's \helpref{wxConnection::OnExecute}{wxconnectiononexecute
+that respect). Causes the server connection's \helpref{wxConnection::OnExec}{wxconnectiononexec
 member to be called. Returns true if successful.
 
 \membersection{wxConnection::Disconnect}\label{wxconnectiondisconnect}
@@ -150,9 +150,9 @@ applications should generally override {\bf OnDisconnect}
 (finally calling the inherited method as well) so that they know
 the connection object is no longer available.
 
-\membersection{wxConnection::OnExecute}\label{wxconnectiononexecute}
+\membersection{wxConnection::OnExec}\label{wxconnectiononexec}
 
-\func{virtual bool}{OnExecute}{\param{const wxString\& }{topic}, \param{const void* }{data}, \param{size\_t }{size}, \param{wxIPCFormat}{ format}}
+\func{virtual bool}{OnExec}{\param{const wxString\& }{topic}, \param{const wxString\& }{data}}
 
 Message sent to the server application when the client notifies
 it to execute the given data, using \helpref{Execute}{wxconnectionexecute}.
index f3987ac4afd333fbbf59f83322fc3944b5cbcf0e..56de3c8d35fc720f595910d818e84f9218bb4007 100644 (file)
@@ -127,12 +127,19 @@ public:
 
 
   // Callbacks to SERVER - override at will
-  virtual bool OnExecute(const wxString& WXUNUSED(topic),
-                         const void *WXUNUSED(data),
-                         size_t WXUNUSED(size),
-                         wxIPCFormat WXUNUSED(format))
+  virtual bool OnExec(const wxString& WXUNUSED(topic),
+                      const wxString& WXUNUSED(data))
       { return false; }
 
+  // deprecated function kept for backwards compatibility: usually you will
+  // want to override OnExec() above instead which receives its data in a more
+  // convenient format
+  virtual bool OnExecute(const wxString& topic,
+                         const void *data,
+                         size_t size,
+                         wxIPCFormat format)
+      { return OnExec(topic, GetTextFromData(data, size, format)); }
+
   virtual const void *OnRequest(const wxString& WXUNUSED(topic),
                                 const wxString& WXUNUSED(item),
                                 size_t *size,
@@ -166,6 +173,17 @@ public:
   virtual bool OnDisconnect() { delete this; return true; }
 
 
+  // converts from the data and format into a wxString automatically
+  //
+  // this function accepts data in all of wxIPC_TEXT, wxIPC_UNICODETEXT, and
+  // wxIPC_UTF8TEXT formats but asserts if the format is anything else
+  //
+  // notice that the size parameter here contains the total size of the data,
+  // including the terminating '\0' or L'\0'
+  static
+  wxString GetTextFromData(const void *data, size_t size, wxIPCFormat format);
+
+
   // return a buffer at least this size, reallocating buffer if needed
   // returns NULL if using an inadequate user buffer which can't be resized
   void *GetBufferAtLeast(size_t bytes);
@@ -184,7 +202,7 @@ private:
   bool          m_deletebufferwhendone;
 
 protected:
-  bool          m_connected;   
+  bool          m_connected;
 
   DECLARE_NO_ASSIGN_CLASS(wxConnectionBase)
   DECLARE_CLASS(wxConnectionBase)
index 0de6f3b045204f938ad5675f830f09502a3d1d57..ee7e34278f476aa8ade3961f13d5afce635bc042 100644 (file)
@@ -59,12 +59,59 @@ wxConnectionBase::wxConnectionBase(const wxConnectionBase& copy)
 }
 
 
-wxConnectionBase::~wxConnectionBase(void)
+wxConnectionBase::~wxConnectionBase()
 {
-  if ( m_deletebufferwhendone && m_buffer )
+  if ( m_deletebufferwhendone )
     delete m_buffer;
 }
 
+/* static */
+wxString wxConnectionBase::GetTextFromData(const void* data,
+                                           size_t size,
+                                           wxIPCFormat fmt)
+{
+    wxString s;
+    switch ( fmt )
+    {
+        case wxIPC_TEXT:
+            // normally the string should be NUL-terminated and size should
+            // include the total size of the buffer, including NUL -- but don't
+            // crash (by trying to access (size_t)-1 bytes) if it doesn't
+            if ( size )
+                size--;
+
+            s = wxString(wx_static_cast(const char *, data), size);
+            break;
+
+#if wxUSE_UNICODE
+        // TODO: we should handle both wxIPC_UTF16TEXT and wxIPC_UTF32TEXT here
+        //       for inter-platform IPC
+        case wxIPC_UNICODETEXT:
+            wxASSERT_MSG( !(size % sizeof(wchar_t)), "invalid buffer size" );
+            if ( size )
+            {
+                size /= sizeof(wchar_t);
+                size--;
+            }
+
+            s = wxString(wx_static_cast(const wchar_t *, data), size);
+            break;
+
+        case wxIPC_UTF8TEXT:
+            if ( size )
+                size--;
+
+            s = wxString::FromUTF8(wx_static_cast(const char *, data), size);
+            break;
+#endif // wxUSE_UNICODE
+
+        default:
+            wxFAIL_MSG( "non-string IPC format in GetTextFromData()" );
+    }
+
+    return s;
+}
+
 void *wxConnectionBase::GetBufferAtLeast( size_t bytes )
 {
   if ( m_buffersize >= bytes )