diff options
Diffstat (limited to 'fiv-io-model.c')
| -rw-r--r-- | fiv-io-model.c | 25 | 
1 files changed, 12 insertions, 13 deletions
diff --git a/fiv-io-model.c b/fiv-io-model.c index 423e4fb..55ddd91 100644 --- a/fiv-io-model.c +++ b/fiv-io-model.c @@ -342,22 +342,21 @@ static void  monitor_apply(enum monitor_event event, GPtrArray *target, int index,  	FivIoModelEntry *new_entry)  { -	// The file used to be filtered out but isn't anymore. -	// TODO(p): Handle the inverse transition as well.  	if (event == MONITOR_RENAMING && index < 0) +		// The file used to be filtered out but isn't anymore.  		event = MONITOR_ADDING; +	else if (!new_entry && index >= 0) +		// The file wasn't filtered out but now it is. +		event = MONITOR_REMOVING;  	if (event == MONITOR_CHANGING) { -		g_assert(new_entry != NULL);  		fiv_io_model_entry_unref(target->pdata[index]);  		target->pdata[index] = fiv_io_model_entry_ref(new_entry);  	}  	if (event == MONITOR_REMOVING || event == MONITOR_RENAMING)  		g_ptr_array_remove_index(target, index); -	if (event == MONITOR_RENAMING || event == MONITOR_ADDING) { -		g_assert(new_entry != NULL); +	if (event == MONITOR_RENAMING || event == MONITOR_ADDING)  		g_ptr_array_add(target, fiv_io_model_entry_ref(new_entry)); -	}  }  static void @@ -370,25 +369,25 @@ on_monitor_changed(G_GNUC_UNUSED GFileMonitor *monitor, GFile *file,  	gint files_index = model_find(self->files, file, &old_entry);  	gint subdirs_index = model_find(self->subdirs, file, &old_entry); -	enum monitor_event action = MONITOR_NONE; +	enum monitor_event event = MONITOR_NONE;  	GFile *new_entry_file = NULL;  	switch (event_type) {  	case G_FILE_MONITOR_EVENT_CHANGED:  	case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED: -		action = MONITOR_CHANGING; +		event = MONITOR_CHANGING;  		new_entry_file = file;  		break;  	case G_FILE_MONITOR_EVENT_RENAMED: -		action = MONITOR_RENAMING; +		event = MONITOR_RENAMING;  		new_entry_file = other_file;  		break;  	case G_FILE_MONITOR_EVENT_DELETED:  	case G_FILE_MONITOR_EVENT_MOVED_OUT: -		action = MONITOR_REMOVING; +		event = MONITOR_REMOVING;  		break;  	case G_FILE_MONITOR_EVENT_CREATED:  	case G_FILE_MONITOR_EVENT_MOVED_IN: -		action = MONITOR_ADDING; +		event = MONITOR_ADDING;  		old_entry = NULL;  		new_entry_file = file;  		break; @@ -432,12 +431,12 @@ run:  		fiv_io_model_entry_ref(old_entry);  	if (files_index != -1 || new_target == self->files) { -		monitor_apply(action, self->files, files_index, new_entry); +		monitor_apply(event, self->files, files_index, new_entry);  		g_signal_emit(self, model_signals[FILES_CHANGED],  			0, old_entry, new_entry);  	}  	if (subdirs_index != -1 || new_target == self->subdirs) { -		monitor_apply(action, self->subdirs, subdirs_index, new_entry); +		monitor_apply(event, self->subdirs, subdirs_index, new_entry);  		g_signal_emit(self, model_signals[SUBDIRECTORIES_CHANGED],  			0, old_entry, new_entry);  	}  | 
