static void on_button_hash_clicked(void) { if (gui_get_view() == GUI_VIEW_FILE) { // XXX: Workaround for when user clicks Cancel in FileChooserDialog and // XXX: uri is changed without emitting the "selection-changed" signal on_filechooserbutton_selection_changed(); if (!gtk_widget_get_sensitive(GTK_WIDGET(gui.button_hash))) return; } switch (gui_get_view()) { case GUI_VIEW_FILE: { gui_clear_digests(); gui_set_state(GUI_STATE_BUSY); char *uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER( gui.filechooserbutton)); hash_file_start(uri); break; } case GUI_VIEW_TEXT: hash_string(); break; case GUI_VIEW_FILE_LIST: gui_clear_digests(); gui_set_state(GUI_STATE_BUSY); hash_file_list_start(); break; default: g_assert_not_reached(); } }
void hash_file_list_start(void) { g_assert(!hash_priv.uris); gtkhash_hash_file_clear_digests(&hash_priv.file_data); hash_priv.uris = list_get_all_uris(); g_assert(hash_priv.uris); hash_file_start(hash_priv.uris->data); }
void gtkhash_hash_file_finish_cb(G_GNUC_UNUSED void *data) { const bool stop = gtkhash_hash_file_get_stop(&hash_priv.file_data); switch (gui_get_view()) { case GUI_VIEW_FILE: { if (stop) break; for (int i = 0; i < HASH_FUNCS_N; i++) { const char *digest = gtkhash_hash_func_get_digest(&hash.funcs[i], gui_get_digest_format()); gtk_entry_set_text(gui.hash_widgets[i].entry_file, digest); } break; } case GUI_VIEW_FILE_LIST: { g_assert(hash_priv.uris); g_assert(hash_priv.uris->data); if (stop) break; for (int i = 0; i < HASH_FUNCS_N; i++) { const char *digest = gtkhash_hash_func_get_digest(&hash.funcs[i], gui_get_digest_format()); list_set_digest(hash_priv.uris->data, i, digest); } g_free(hash_priv.uris->data); hash_priv.uris = g_slist_delete_link(hash_priv.uris, hash_priv.uris); if (hash_priv.uris) { hash_file_start(hash_priv.uris->data); return; } break; } default: g_assert_not_reached(); } gui_set_state(GUI_STATE_IDLE); }