Skip to content

Commit 254776d

Browse files
authored
Merge from Pull Alcaro#52
Alcaro#52
1 parent bcd47e9 commit 254776d

File tree

1 file changed

+18
-41
lines changed

1 file changed

+18
-41
lines changed

flips-gtk.cpp

Lines changed: 18 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ static void ApplyPatchMultiAutoSub(gpointer data, gpointer user_data)
356356
gchar * outrompath=g_strndup(patchpath, strlen(patchpath)+strlen(romext)+1);
357357
strcpy(GetExtension(outrompath), romext);
358358

359-
struct errorinfo errinf=ApplyPatchMem(patch, rompath, true, outrompath, NULL, true);
359+
struct errorinfo errinf=ApplyPatchMem(patch, rompath, !cfg.getint("skipchecksum"), outrompath, NULL, true);
360360
if (errinf.level==el_broken) error(ea_invalid);
361361
if (errinf.level==el_notthis) error(ea_no_auto);
362362
if (errinf.level==el_warning) error(ea_warning);
@@ -433,7 +433,7 @@ static void ApplyPatchMulti(gpointer data, gpointer user_data)
433433
char * outromext=GetExtension(outromname);
434434
strcpy(outromext, state->romext);
435435

436-
struct errorinfo errinf=ApplyPatchMem2(patch, state->rommem, state->removeHeaders, true, outromname, NULL);
436+
struct errorinfo errinf=ApplyPatchMem2(patch, state->rommem, state->removeHeaders, !cfg.getint("skipchecksum"), outromname, NULL);
437437
if (errinf.level==el_broken) error(e_invalid);
438438
if (errinf.level==el_notthis) error(e_invalid_this);
439439
if (errinf.level==el_warning) error(e_warning);
@@ -486,7 +486,7 @@ static void a_ApplyPatch(GtkButton* widget, gpointer user_data)
486486
char * outromname=SelectRom(outromname_d, "Select Output File", true);
487487
if (outromname)
488488
{
489-
struct errorinfo errinf=ApplyPatchMem(patchfile, inromname, true, outromname, NULL, cfg.getint("autorom"));
489+
struct errorinfo errinf=ApplyPatchMem(patchfile, inromname, !cfg.getint("skipchecksum"), outromname, NULL, cfg.getint("autorom"));
490490
ShowMessage(errinf);
491491
}
492492
g_free(inromname);
@@ -596,43 +596,8 @@ static void a_CreatePatch(GtkButton* widget, gpointer user_data)
596596
gtk_file_filter_add_pattern(filter, typeinfo[i].filter);
597597
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
598598
}
599-
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filters[lasttype-1]);
600-
601-
struct wrap {
602-
GtkFileChooser* chooser;
603-
GtkFileFilter** filters;
604-
int current_filter_id;
605-
606-
void notify(GObject* self, GParamSpec* pspec)
607-
{
608-
GtkFileFilter* filter = gtk_file_chooser_get_filter(chooser);
609-
int new_filter_id = 0;
610-
while (filter != filters[new_filter_id])
611-
new_filter_id++;
612-
613-
const char * prev_ext = typeinfo[current_filter_id].filter+1;
614-
const char * new_ext = typeinfo[new_filter_id].filter+1;
615-
616-
char * current_name = gtk_file_chooser_get_current_name(chooser);
617-
char * current_name_ext = strrchr(current_name, '.');
618-
if (!strcmp(current_name_ext, prev_ext))
619-
{
620-
// good thing they're all the same length
621-
strcpy(current_name_ext, new_ext);
622-
gtk_file_chooser_set_current_name(chooser, current_name);
623-
}
624-
625-
g_free(current_name);
626-
current_filter_id = new_filter_id;
627-
}
628-
static void notify_s(GObject* self, GParamSpec* pspec, void* userdata)
629-
{
630-
((wrap*)userdata)->notify(self, pspec);
631-
}
632-
};
633-
wrap filter_updater = { GTK_FILE_CHOOSER(dialog), filters, lasttype-1 };
634-
g_signal_connect(dialog, "notify::filter", G_CALLBACK(&wrap::notify_s), &filter_updater);
635599

600+
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filters[lasttype-1]);
636601
if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT)
637602
{
638603
patchname=gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
@@ -643,8 +608,11 @@ static void a_CreatePatch(GtkButton* widget, gpointer user_data)
643608
{
644609
if (filter==filters[i])
645610
{
611+
if (patchname && lasttype!=i && !strcmp(GetExtension(patchname), typeinfo[lasttype-1].filter+1))
612+
{
613+
strcpy(GetExtension(patchname), typeinfo[i].filter+1);
614+
}
646615
cfg.setint("lasttype", i+1);
647-
lasttype = i+1;
648616
}
649617
}
650618

@@ -709,7 +677,7 @@ static void a_ApplyRun(GtkButton* widget, gpointer user_data)
709677
else outromname=g_file_get_uri(outrom_file);
710678
g_object_unref(outrom_file);
711679

712-
struct errorinfo errinf=ApplyPatchMem(patchfile, romname, true, outromname, NULL, cfg.getint("autorom"));
680+
struct errorinfo errinf=ApplyPatchMem(patchfile, romname, !cfg.getint("skipchecksum"), outromname, NULL, cfg.getint("autorom"));
713681
if (errinf.level!=el_ok) ShowMessage(errinf);
714682
if (errinf.level>=el_notthis) goto cleanup;
715683

@@ -795,15 +763,24 @@ static void a_ShowSettings(GtkButton* widget, gpointer user_data)
795763
gtk_grid_attach(grid, autoRom, 0,3, 1,1);
796764
flatpakDisable(autoRom);
797765

766+
GtkWidget* skipChecksum;
767+
skipChecksum=gtk_check_button_new_with_mnemonic("Ignore checksum when patching");
768+
if (cfg.getint("skipchecksum")) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(skipChecksum), true);
769+
g_object_ref(skipChecksum);
770+
gtk_grid_attach(grid, skipChecksum, 0,4, 1,1);
771+
flatpakDisable(skipChecksum);
772+
798773
gtk_container_add(GTK_CONTAINER(settingswindow), GTK_WIDGET(grid));
799774

800775
gtk_widget_show_all(settingswindow);
801776
gtk_main();
802777

803778
cfg.setint("assocemu", (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(emuAssoc))));
804779
cfg.setint("autorom", (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(autoRom))));
780+
cfg.setint("skipchecksum", (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(skipChecksum))));
805781
g_object_unref(emuAssoc);
806782
g_object_unref(autoRom);
783+
g_object_unref(skipChecksum);
807784
}
808785

809786
static gboolean filterExecOnly(const GtkFileFilterInfo* filter_info, gpointer data)

0 commit comments

Comments
 (0)