From: Vadim Zeitlin Date: Sat, 23 Apr 2011 11:17:33 +0000 (+0000) Subject: Fix file paths in wxFileSystemWatcherEvent under OS X. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f3b1d0fc56fd93f17244c186d7f961797efc35e3?ds=inline Fix file paths in wxFileSystemWatcherEvent under OS X. The separator between the watched directory and the name of the file in the generated event was missing, add it now. Closes #13161. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67581 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/unix/fswatcher_kqueue.cpp b/src/unix/fswatcher_kqueue.cpp index 2c7296a4e0..41ecbdede7 100644 --- a/src/unix/fswatcher_kqueue.cpp +++ b/src/unix/fswatcher_kqueue.cpp @@ -297,7 +297,8 @@ protected: while ( nflags ) { // when monitoring dir, this means create/delete - if ( nflags & NOTE_WRITE && wxDirExists(w.GetPath()) ) + const wxString basepath = w.GetPath(); + if ( nflags & NOTE_WRITE && wxDirExists(basepath) ) { // NOTE_LINK is set when the dir was created, but we // don't care - we look for new names in directory @@ -308,6 +309,7 @@ protected: wxArrayString changedFiles; wxArrayInt changedFlags; FindChanges(w, changedFiles, changedFlags); + wxArrayString::iterator it = changedFiles.begin(); wxArrayInt::iterator changeType = changedFlags.begin(); for ( ; it != changedFiles.end(); ++it, ++changeType ) @@ -315,11 +317,13 @@ protected: wxFileName path; if ( wxDirExists(*it) ) { - path = wxFileName::DirName(w.GetPath() + *it); + path = wxFileName::DirName( + basepath + wxFileName::GetPathSeparator() + *it + ); } else { - path = wxFileName::FileName(w.GetPath() + *it); + path.Assign(basepath, *it); } wxFileSystemWatcherEvent event(*changeType, path, path); @@ -333,28 +337,28 @@ protected: // still we couldn't be sure we have the right name... nflags &= ~NOTE_RENAME; wxFileSystemWatcherEvent event(wxFSW_EVENT_RENAME, - w.GetPath(), wxFileName()); + basepath, wxFileName()); SendEvent(event); } else if ( nflags & NOTE_WRITE || nflags & NOTE_EXTEND ) { nflags &= ~(NOTE_WRITE | NOTE_EXTEND); wxFileSystemWatcherEvent event(wxFSW_EVENT_MODIFY, - w.GetPath(), w.GetPath()); + basepath, basepath); SendEvent(event); } else if ( nflags & NOTE_DELETE ) { nflags &= ~(NOTE_DELETE); wxFileSystemWatcherEvent event(wxFSW_EVENT_DELETE, - w.GetPath(), w.GetPath()); + basepath, basepath); SendEvent(event); } else if ( nflags & NOTE_ATTRIB ) { nflags &= ~(NOTE_ATTRIB); wxFileSystemWatcherEvent event(wxFSW_EVENT_ACCESS, - w.GetPath(), w.GetPath()); + basepath, basepath); SendEvent(event); }