From f11c283e0e045a9eafed90e83521d2205dea0a2c Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Thu, 25 Feb 2016 21:15:29 +0200 Subject: [PATCH] Add another flag to autohide the manager when there are no devices --- main.c | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/main.c b/main.c index 5413548..81bc4bf 100644 --- a/main.c +++ b/main.c @@ -34,7 +34,9 @@ typedef struct sDevice typedef struct sGuiContext { int manager; + int autohide; Device *devices; + GtkWidget *window; GtkWidget *list; GtkWidget *button; char *post_mount_command; @@ -832,10 +834,19 @@ Handles an automatic refresh of the device list in response to inotify events. gboolean refresh_devices_idle(gpointer data) { GuiContext *context = (GuiContext *)data; + int n_listed; - refresh_devices(context, -1); + n_listed = refresh_devices(context, -1); context->refresh_pending = 0; + if(context->autohide) + { + if(n_listed) + gtk_widget_show_all(context->window); + else + gtk_widget_hide(context->window); + } + return FALSE; } @@ -999,13 +1010,13 @@ void show_help(void) " -u Unmount a device (default is mount)\n" " -r Run a command after mounting\n" " -m Start a persistent mount manager\n" + " -M Like -m, but hide the window if there are no devices\n" " -h Display this help\n"); } int main(int argc, char **argv) { GuiContext context; - GtkWidget *window; GtkWidget *box; GtkWidget *viewport; GtkListStore *store; @@ -1016,6 +1027,7 @@ int main(int argc, char **argv) int n_listed; context.manager = 0; + context.autohide = 0; context.devices = NULL; context.post_mount_command = NULL; context.inotify_fd = -1; @@ -1025,7 +1037,7 @@ int main(int argc, char **argv) gtk_init(&argc, &argv); - while((opt = getopt(argc, argv, "vur:mh"))!=-1) switch(opt) + while((opt = getopt(argc, argv, "vur:mMh"))!=-1) switch(opt) { case 'v': ++verbosity; @@ -1038,19 +1050,24 @@ int main(int argc, char **argv) break; case 'm': context.manager = 1; + context.autohide = 0; + break; + case 'M': + context.manager = 1; + context.autohide = 1; break; case 'h': show_help(); return 0; } - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_container_set_border_width(GTK_CONTAINER(window), 5); - g_signal_connect(window, "destroy", G_CALLBACK(>k_main_quit), NULL); - g_signal_connect(window, "key-press-event", G_CALLBACK(&key_press), NULL); + context.window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_container_set_border_width(GTK_CONTAINER(context.window), 5); + g_signal_connect(context.window, "destroy", G_CALLBACK(>k_main_quit), NULL); + g_signal_connect(context.window, "key-press-event", G_CALLBACK(&key_press), NULL); box = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(window), box); + gtk_container_add(GTK_CONTAINER(context.window), box); viewport = gtk_viewport_new(NULL, NULL); gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_IN); @@ -1106,9 +1123,9 @@ int main(int argc, char **argv) n_listed = refresh_devices(&context, umount); - if(n_listed || context.manager) - gtk_widget_show_all(window); - else + if(n_listed || (context.manager && !context.autohide)) + gtk_widget_show_all(context.window); + else if(!context.manager) { GtkWidget *dialog; -- 2.43.0