mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 16:32:18 +01:00 
			
		
		
		
	This patch makes GFileMonitor to emit EVENT_CHANGES_DONE_HINT when EVENT_CREATED is emitted but the file is not opened for writing. On file moves across different mounted volumes, inotify will always emit IN_CREATE and IN_CLOSE_WRITE (plus other events). This translates into GIO's _EVENT_CREATED and _EVENT_CHANGES_DONE_HINT. On file moves across the same mounted volumes, inotify will emit IN_MOVED_FROM/IN_MOVED_TO which will be translated into _EVENT_DELETED/_EVENT_CREATED GIO's side. No _EVENT_CHANGES_DONE_HINT is emited afterwards. Under such circumstances a file indexer does not know when actually the file is ready to be indexed, either waiting too much or triggering the indexing twice. On small devices it's not advisable. Bug: https://bugzilla.gnome.org/show_bug.cgi?id=640077 Bug-NB: NB#219982 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk> Reviewed-by: Tomas Bzatek <tbzatek@redhat.com>
		
			
				
	
	
		
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|    Copyright (C) 2005 John McCutchan
 | |
| 
 | |
|    The Gnome Library is free software; you can redistribute it and/or
 | |
|    modify it under the terms of the GNU Library General Public License as
 | |
|    published by the Free Software Foundation; either version 2 of the
 | |
|    License, or (at your option) any later version.
 | |
| 
 | |
|    The Gnome Library is distributed in the hope that it will be useful,
 | |
|    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|    Library General Public License for more details.
 | |
| 
 | |
|    You should have received a copy of the GNU Library General Public
 | |
|    License along with the Gnome Library; see the file COPYING.LIB.  If not,
 | |
|    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | |
|    Boston, MA 02111-1307, USA.
 | |
| 
 | |
|    Authors:.
 | |
| 		John McCutchan <john@johnmccutchan.com>
 | |
| */
 | |
| 
 | |
| #ifndef __INOTIFY_KERNEL_H
 | |
| #define __INOTIFY_KERNEL_H
 | |
| 
 | |
| typedef struct ik_event_s {
 | |
|   gint32 wd;
 | |
|   guint32 mask;
 | |
|   guint32 original_mask;
 | |
|   guint32 cookie;
 | |
|   guint32 len;
 | |
|   char *  name;
 | |
|   /* TRUE if this event is the last element of a pair
 | |
|    * (e.g., MOVE_TO in a pair of MOVE_FROM, MOVE_TO events) */
 | |
|   gboolean is_second_in_pair;
 | |
|   /* if event1 and event2 are two paired events
 | |
|    * (e.g., MOVE_FROM and MOVE_TO events related to the same file move),
 | |
|    * then event1->pair == event2 and event2->pair == NULL.
 | |
|    * It will result also in event1->pair->is_second_in_pair == TRUE */
 | |
|   struct ik_event_s *pair;
 | |
| } ik_event_t;
 | |
| 
 | |
| gboolean _ik_startup (void (*cb) (ik_event_t *event));
 | |
| 
 | |
| ik_event_t *_ik_event_new_dummy (const char *name,
 | |
| 				 gint32      wd,
 | |
| 				 guint32     mask);
 | |
| void        _ik_event_free      (ik_event_t *event);
 | |
| 
 | |
| gint32      _ik_watch           (const char *path,
 | |
| 				 guint32     mask,
 | |
| 				 int        *err);
 | |
| int         _ik_ignore          (const char *path,
 | |
| 				 gint32      wd);
 | |
| 
 | |
| 
 | |
| /* The miss count will probably be enflated */
 | |
| void        _ik_move_stats     (guint32 *matches,
 | |
| 				guint32 *misses);
 | |
| const char *_ik_mask_to_string (guint32  mask);
 | |
| 
 | |
| 
 | |
| #endif
 |