static void handle_event(struct inotify_event *ievent) { char *event_filename; char *dirname = NULL; char *fullname; assert(ievent); if (ievent->len) { event_filename = ievent->name; } else { return; } for (size_t i = 0; i < wds_count; i++) { if (wds[i] == ievent->wd) { dirname = dirnames[i]; break; } } assert(dirname); fullname = strjoin(dirname, "/", event_filename, NULL); switch (ievent->mask & (IN_CLOSE_WRITE | IN_CREATE)) { case IN_CLOSE_WRITE: // We don't treat directories modifications if (ievent->mask & IN_ISDIR) { break; } if (!is_valid_filename(event_filename)) { break; } reload_callback(callback_arg, fullname); break; case IN_CREATE: // recursively watch new dirs if (!(ievent->mask & IN_ISDIR)) { break; } livecoding_watch_directory(fullname); break; default: break; } free(fullname); }
void File_Browser::_reload_callback() { reload_callback(true); }