Skip to content

Commit c47936d

Browse files
committed
Part two of modifications for this PR.
1 parent 371bf36 commit c47936d

File tree

3 files changed

+40
-36
lines changed

3 files changed

+40
-36
lines changed

ui/xui/actions.cc

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -60,42 +60,48 @@ void ActionLoadDiscFile(const char *file_path)
6060
xemu_queue_error_message(error_get_pretty(err));
6161
error_free(err);
6262
} else {
63-
if (file_path && file_path[0]) {
64-
if (!g_config.general.recent.discs) {
65-
g_config.general.recent.discs = g_new0(const char *, 1);
66-
g_config.general.recent.discs_count = 0;
67-
}
63+
if (!g_config.general.recent.discs) {
64+
g_config.general.recent.discs = g_new0(const char *, 1);
65+
g_config.general.recent.discs_count = 0;
66+
}
6867

69-
int i;
70-
for (i = 0; i < g_config.general.recent.discs_count; i++) {
71-
if (g_strcmp0(g_config.general.recent.discs[i], file_path) == 0) {
72-
for (int j = i; j > 0; j--) {
73-
g_config.general.recent.discs[j] = g_config.general.recent.discs[j-1];
74-
}
75-
g_config.general.recent.discs[0] = g_strdup(file_path);
76-
return;
68+
// If current game is already in history,
69+
// move other game entries down,
70+
// then move the current game to the most recent slot.
71+
for (unsigned i = 0; i < g_config.general.recent.discs_count; i++) {
72+
if (g_strcmp0(g_config.general.recent.discs[i], file_path) == 0) {
73+
const char *current_path = g_config.general.recent.discs[i];
74+
for (unsigned int j = i; j > 0; j--) {
75+
g_config.general.recent.discs[j] =
76+
g_config.general.recent.discs[j - 1];
7777
}
78+
g_config.general.recent.discs[0] = current_path;
79+
return;
80+
}
81+
}
82+
// Free a slot for our entry.
83+
if (g_config.general.recent.discs_count >= MAX_RECENT_DISCS) {
84+
for (unsigned i = MAX_RECENT_DISCS;
85+
i < g_config.general.recent.discs_count; i++) {
86+
g_free((void *)g_config.general.recent.discs[i]);
7887
}
7988

80-
if (i == g_config.general.recent.discs_count) {
81-
if (g_config.general.recent.discs_count >= MAX_RECENT_DISCS) {
82-
for (int j = MAX_RECENT_DISCS; j < g_config.general.recent.discs_count; j++) {
83-
g_free((void*)g_config.general.recent.discs[j]);
84-
}
85-
g_config.general.recent.discs_count = MAX_RECENT_DISCS;
86-
} else {
87-
const char **new_discs = g_renew(const char *, g_config.general.recent.discs,
88-
g_config.general.recent.discs_count + 1);
89-
g_config.general.recent.discs = new_discs;
90-
g_config.general.recent.discs_count++;
91-
}
89+
g_free((void *)g_config.general.recent.discs[MAX_RECENT_DISCS - 1]);
90+
g_config.general.recent.discs_count = MAX_RECENT_DISCS;
91+
} else {
92+
// Allocate new space.
93+
const char **new_discs =
94+
g_renew(const char *, g_config.general.recent.discs,
95+
g_config.general.recent.discs_count + 1);
96+
g_config.general.recent.discs = new_discs;
97+
g_config.general.recent.discs_count++;
98+
}
9299

93-
for (int i = g_config.general.recent.discs_count - 1; j > 0; j--) {
94-
g_config.general.recent.discs[i] = g_config.general.recent.discs[j-1];
95-
}
96-
g_config.general.recent.discs[0] = g_strdup(file_path);
97-
}
100+
for (unsigned i = g_config.general.recent.discs_count - 1; i > 0; i--) {
101+
g_config.general.recent.discs[i] =
102+
g_config.general.recent.discs[i - 1];
98103
}
104+
g_config.general.recent.discs[0] = g_strdup(file_path);
99105
}
100106
}
101107

@@ -120,7 +126,7 @@ void ActionShutdown(void)
120126

121127
void ActionScreenshot(void)
122128
{
123-
g_screenshot_pending = true;
129+
g_screenshot_pending = true;
124130
}
125131

126132
void ActionActivateBoundSnapshot(int slot, bool save)
@@ -154,8 +160,8 @@ void ActionLoadSnapshotChecked(const char *name)
154160

155161
void ActionClearDiscRecent(void)
156162
{
157-
for (int i = 0; i < g_config.general.recent.discs_count; i++) {
158-
g_free((void*)g_config.general.recent.discs[i]);
163+
for (unsigned i = 0; i < g_config.general.recent.discs_count; i++) {
164+
g_free((void *)g_config.general.recent.discs[i]);
159165
}
160166
g_free(g_config.general.recent.discs);
161167
g_config.general.recent.discs = NULL;

ui/xui/main.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ void xemu_hud_init(SDL_Window* window, void* sdl_gl_context)
159159
InitializeStyle();
160160
g_main_menu.SetNextViewIndex(g_config.general.last_viewed_menu_index);
161161
first_boot_window.is_open = g_config.general.show_welcome;
162-
// g_menubar_recent_list = RecentList::create(&g_config.recent);
163162
}
164163

165164
void xemu_hud_cleanup(void)

ui/xui/menubar.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,8 @@ void ShowMainMenu()
144144

145145
bool has_any_entries = (g_config.general.recent.discs_count > 0);
146146
if (ImGui::BeginMenu("Recent Discs", has_any_entries)) {
147-
for (size_t i = 0; i < g_config.general.recent.discs_count; i++) {
147+
for (int i = 0; i < g_config.general.recent.discs_count; i++) {
148148
const char *disc_path = g_config.general.recent.discs[i];
149-
if (!disc_path) continue;
150149

151150
const char *filename = g_path_get_basename(disc_path);
152151

0 commit comments

Comments
 (0)