diff options
Diffstat (limited to 'hardinfo2/util.c')
-rw-r--r-- | hardinfo2/util.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/hardinfo2/util.c b/hardinfo2/util.c index 6ca71fca..19102213 100644 --- a/hardinfo2/util.c +++ b/hardinfo2/util.c @@ -91,3 +91,67 @@ nonblock_sleep(guint msec) g_timeout_add(msec, (GSourceFunc)__nonblock_cb, NULL); gtk_main(); } + +static void +__expand_cb(GtkWidget *widget, gpointer data) +{ + if (GTK_IS_EXPANDER(widget)) { + gtk_expander_set_expanded(GTK_EXPANDER(widget), TRUE); + } else if (GTK_IS_CONTAINER(widget)) { + gtk_container_forall(GTK_CONTAINER(widget), (GtkCallback)__expand_cb, NULL); + } +} + +void +file_chooser_open_expander(GtkWidget *chooser) +{ + gtk_container_forall(GTK_CONTAINER(chooser), (GtkCallback)__expand_cb, NULL); +} + +void +file_chooser_add_filters(GtkWidget *chooser, FileTypes *filters) +{ + GtkFileFilter *filter; + gint i; + + for (i = 0; filters[i].name; i++) { + filter = gtk_file_filter_new(); + gtk_file_filter_add_mime_type(filter, filters[i].mime_type); + gtk_file_filter_set_name(filter, filters[i].name); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter); + } +} + +gchar +*file_chooser_get_extension(GtkWidget *chooser, FileTypes *filters) +{ + GtkFileFilter *filter; + const gchar *filter_name; + gint i; + + filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(chooser)); + filter_name = gtk_file_filter_get_name(filter); + for (i = 0; filters[i].name; i++) { + if (g_str_equal(filter_name, filters[i].name)) { + return filters[i].extension; + } + } + + return NULL; +} + +gchar +*file_chooser_build_filename(GtkWidget *chooser, gchar *extension) +{ + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); + gchar *retval; + + if (g_str_has_suffix(filename, extension)) { + return filename; + } + + retval = g_strconcat(filename, extension, NULL); + g_free(filename); + + return retval; +} |