- len = read(pipe_fd[0], buf+pos, sizeof(buf)-pos-1);
- if(len<=0)
- break;
- pos += len;
- }
- else if(waitpid(pid, &status, 0))
- {
- pid = 0;
- break;
- }
- }
+ if(!WIFEXITED(status) || WEXITSTATUS(status))
+ return -1;
+
+ device->mounted = !device->mounted;
+
+ return 0;
+}
+
+/**
+Callback for activating a row in the device list. Mounts or unmounts the
+device depending on operating mode.
+*/
+void row_activated(GtkTreeView *list, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ Device *device;
+ int ret;
+ char output[1024];
+ int pid;
+
+ model = gtk_tree_view_get_model(list);
+
+ if(!gtk_tree_model_get_iter(model, &iter, path))
+ return;
+
+ gtk_tree_model_get(model, &iter, 1, &device, -1);
+ ret = toggle_device(device, output, sizeof(output));
+ if(ret)
+ {
+ GtkWidget *dialog;