From bc3ad56fe16e81448031e2ee3799f0a1595837f7 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Thu, 25 Feb 2016 20:36:13 +0200 Subject: [PATCH] Move device list refresh to a separate function --- main.c | 90 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 32 deletions(-) diff --git a/main.c b/main.c index ce9ac69..59bf305 100644 --- a/main.c +++ b/main.c @@ -33,6 +33,7 @@ typedef struct sDevice typedef struct sGuiContext { int manager; + Device *devices; GtkWidget *list; GtkWidget *button; char *post_mount_command; @@ -766,6 +767,60 @@ int toggle_device(Device *device, char *out_buf, int out_size) return 0; } +/** +Refreshes both the internal devices array and the GUI list. +*/ +int refresh_devices(GuiContext *context, int umount) +{ + GtkListStore *store; + GtkTreeSelection *selection; + int n_listed; + time_t latest; + int i; + GtkTreeIter iter; + + store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(context->list))); + gtk_list_store_clear(store); + + free_devices(context->devices); + + context->devices = get_devices(); + if(!context->devices) + return 0; + + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(context->list)); + + /* Populate the list with devices in appropriate state. */ + n_listed = 0; + latest = 0; + for(i=0; context->devices[i].node; ++i) + { + Device *dev; + + dev = &context->devices[i]; + if(umount<0 || !dev->mount_point==!umount) + { + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, + 0, dev->description, + 1, dev, + 2, !!dev->mount_point, + 3, dev->mount_point, + -1); + if(dev->time>latest) + { + /* Pre-select the device that appeared on the system most recently. */ + latest = dev->time; + gtk_tree_selection_select_iter(selection, &iter); + } + + ++n_listed; + } + } + + return n_listed; +} + /** Callback for selection in the device list changing. Updates the action button label according to device status. @@ -912,15 +967,12 @@ int main(int argc, char **argv) GtkListStore *store; GtkTreeSelection *selection; GtkCellRenderer *mounted_toggle; - GtkTreeIter iter; - Device *devices; - int i; - time_t latest; int opt; int umount = 0; int n_listed; context.manager = 0; + context.devices = NULL; context.post_mount_command = NULL; gtk_init(&argc, &argv); @@ -991,33 +1043,7 @@ int main(int argc, char **argv) g_signal_connect(context.button, "clicked", G_CALLBACK(&button_clicked), &context); gtk_box_pack_start(GTK_BOX(box), context.button, FALSE, TRUE, 0); - devices = get_devices(); - n_listed = 0; - if(devices) - { - /* Populate the list with devices in appropriate state. */ - latest = 0; - for(i=0; devices[i].node; ++i) - if(!devices[i].mount_point==!umount || context.manager) - { - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, - 0, devices[i].description, - 1, &devices[i], - 2, !!devices[i].mount_point, - 3, devices[i].mount_point, - -1); - if(devices[i].time>latest) - { - /* Pre-select the device that appeared on the system most recently. */ - latest = devices[i].time; - gtk_tree_selection_select_iter(selection, &iter); - } - - ++n_listed; - } - - } + n_listed = refresh_devices(&context, umount); if(n_listed || context.manager) gtk_widget_show_all(window); @@ -1034,7 +1060,7 @@ int main(int argc, char **argv) gtk_main(); - free_devices(devices); + free_devices(context.devices); return 0; } -- 2.45.2