gio-async added
This commit is contained in:
parent
52e1edf910
commit
5f880bf114
|
@ -0,0 +1,67 @@
|
|||
using Gtk;
|
||||
|
||||
/**
|
||||
* Loads the list of files in user's home directory and displays them
|
||||
* in a GTK+ list view.
|
||||
*/
|
||||
class ASyncGIOSample : Window {
|
||||
|
||||
private ListStore model;
|
||||
|
||||
public ASyncGIOSample () {
|
||||
|
||||
// Set up the window
|
||||
set_default_size (300, 200);
|
||||
this.destroy.connect (Gtk.main_quit);
|
||||
|
||||
// Set up the list widget and its model
|
||||
this.model = new ListStore (1, typeof (string));
|
||||
var list = new TreeView.with_model (this.model);
|
||||
list.insert_column_with_attributes (-1, "Filename",
|
||||
new CellRendererText (), "text", 0);
|
||||
|
||||
// Put list widget into a scrollable area and add it to the window
|
||||
var scroll = new ScrolledWindow (null, null);
|
||||
scroll.set_policy (PolicyType.NEVER, PolicyType.AUTOMATIC);
|
||||
scroll.add (list);
|
||||
add (scroll);
|
||||
|
||||
// start file listing process
|
||||
list_directory.begin ();
|
||||
}
|
||||
|
||||
private async void list_directory () {
|
||||
stdout.printf ("Start scanning home directory\n");
|
||||
var dir = File.new_for_path (Environment.get_home_dir ());
|
||||
try {
|
||||
// asynchronous call, to get directory entries
|
||||
var e = yield dir.enumerate_children_async (FileAttribute.STANDARD_NAME,
|
||||
0, Priority.DEFAULT);
|
||||
while (true) {
|
||||
// asynchronous call, to get entries so far
|
||||
var files = yield e.next_files_async (10, Priority.DEFAULT);
|
||||
if (files == null) {
|
||||
break;
|
||||
}
|
||||
// append the files found so far to the list
|
||||
foreach (var info in files) {
|
||||
TreeIter iter;
|
||||
this.model.append (out iter);
|
||||
this.model.set (iter, 0, info.get_name ());
|
||||
}
|
||||
}
|
||||
} catch (Error err) {
|
||||
stderr.printf ("Error: list_files failed: %s\n", err.message);
|
||||
}
|
||||
}
|
||||
|
||||
static int main (string[] args) {
|
||||
Gtk.init (ref args);
|
||||
|
||||
var demo = new ASyncGIOSample ();
|
||||
demo.show_all ();
|
||||
|
||||
Gtk.main ();
|
||||
return 0;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue