until we actually get somewhere with the menu crap... fix potential crashes when exiting.
This commit is contained in:
parent
c5670a22a5
commit
cbe63f8fd5
|
@ -77,6 +77,10 @@ static void areaWidget_init(areaWidget *aw)
|
||||||
|
|
||||||
static void areaWidget_dispose(GObject *obj)
|
static void areaWidget_dispose(GObject *obj)
|
||||||
{
|
{
|
||||||
|
// remove any draw order that might still be pending
|
||||||
|
areaWidget *aw = areaWidget(obj);
|
||||||
|
while (g_idle_remove_by_data(aw->a));
|
||||||
|
|
||||||
G_OBJECT_CLASS(areaWidget_parent_class)->dispose(obj);
|
G_OBJECT_CLASS(areaWidget_parent_class)->dispose(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ struct uiMenu {
|
||||||
GArray *items; // []*uiMenuItem
|
GArray *items; // []*uiMenuItem
|
||||||
gboolean ischild;
|
gboolean ischild;
|
||||||
guint id;
|
guint id;
|
||||||
gboolean freed;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct uiMenuItem {
|
struct uiMenuItem {
|
||||||
|
@ -100,6 +99,22 @@ static void menuItemEnableDisable(uiMenuItem *item, gboolean enabled)
|
||||||
g_hash_table_iter_init(&iter, item->windows);
|
g_hash_table_iter_init(&iter, item->windows);
|
||||||
while (g_hash_table_iter_next(&iter, &widget, NULL))
|
while (g_hash_table_iter_next(&iter, &widget, NULL))
|
||||||
gtk_widget_set_sensitive(GTK_WIDGET(widget), enabled);
|
gtk_widget_set_sensitive(GTK_WIDGET(widget), enabled);
|
||||||
|
|
||||||
|
// extra crummy code for disabling submenus
|
||||||
|
// TODO: find a better way to do it!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
// noting that:
|
||||||
|
// * set_sensitive on the menu item does nothing (herpderp)
|
||||||
|
// * set_sensitive on the submenu disables all the submenu items at once (but then you can't fucking enable them back!!)
|
||||||
|
// * googling gives no results, guess nobody has ever wanted to do this shit or...??????
|
||||||
|
// * under Windows we can just disable the menu item and call it good! works exactly as intended!
|
||||||
|
// * fucking stupid pile of shit
|
||||||
|
|
||||||
|
/*if (item->popupchild != NULL)
|
||||||
|
{
|
||||||
|
g_hash_table_iter_init(&iter, item->windows);
|
||||||
|
while (g_hash_table_iter_next(&iter, &widget, NULL))
|
||||||
|
gtk_widget_set_sensitive(GTK_WIDGET(gtk_menu_item_get_submenu(widget)), enabled);
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiMenuItemEnable(uiMenuItem *item)
|
void uiMenuItemEnable(uiMenuItem *item)
|
||||||
|
@ -276,7 +291,6 @@ uiMenu *uiNewMenu(const char *name)
|
||||||
m->name = g_strdup(name);
|
m->name = g_strdup(name);
|
||||||
m->items = g_array_new(FALSE, TRUE, sizeof (uiMenuItem *));
|
m->items = g_array_new(FALSE, TRUE, sizeof (uiMenuItem *));
|
||||||
m->ischild = FALSE;
|
m->ischild = FALSE;
|
||||||
m->freed = FALSE;
|
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
|
@ -335,8 +335,6 @@ int EmuThreadFunc(void* burp)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
EmuStatus = 2;
|
|
||||||
|
|
||||||
// paused
|
// paused
|
||||||
nframes = 0;
|
nframes = 0;
|
||||||
lasttick = SDL_GetTicks();
|
lasttick = SDL_GetTicks();
|
||||||
|
@ -344,7 +342,13 @@ int EmuThreadFunc(void* burp)
|
||||||
lastmeasuretick = lasttick;
|
lastmeasuretick = lasttick;
|
||||||
fpslimitcount = 0;
|
fpslimitcount = 0;
|
||||||
|
|
||||||
|
if (EmuRunning == 2)
|
||||||
|
{
|
||||||
uiAreaQueueRedrawAll(MainDrawArea);
|
uiAreaQueueRedrawAll(MainDrawArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
EmuStatus = EmuRunning;
|
||||||
|
|
||||||
SDL_Delay(100);
|
SDL_Delay(100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -793,6 +797,8 @@ void Stop(bool internal)
|
||||||
while (EmuStatus != 2);
|
while (EmuStatus != 2);
|
||||||
RunningSomething = false;
|
RunningSomething = false;
|
||||||
|
|
||||||
|
uiWindowSetTitle(MainWindow, "melonDS " MELONDS_VERSION);
|
||||||
|
|
||||||
uiMenuItemDisable(MenuItem_SaveState);
|
uiMenuItemDisable(MenuItem_SaveState);
|
||||||
uiMenuItemDisable(MenuItem_LoadState);
|
uiMenuItemDisable(MenuItem_LoadState);
|
||||||
uiMenuItemDisable(MenuItem_UndoStateLoad);
|
uiMenuItemDisable(MenuItem_UndoStateLoad);
|
||||||
|
@ -1026,11 +1032,8 @@ void UndoStateLoad()
|
||||||
|
|
||||||
int OnCloseWindow(uiWindow* window, void* blarg)
|
int OnCloseWindow(uiWindow* window, void* blarg)
|
||||||
{
|
{
|
||||||
if (RunningSomething)
|
EmuRunning = 3;
|
||||||
{
|
while (EmuStatus != 3);
|
||||||
EmuRunning = 2;
|
|
||||||
while (EmuStatus != 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
uiQuit();
|
uiQuit();
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1065,6 +1068,9 @@ void OnLoseFocus(uiWindow* window, void* blarg)
|
||||||
|
|
||||||
void OnCloseByMenu(uiMenuItem* item, uiWindow* window, void* blarg)
|
void OnCloseByMenu(uiMenuItem* item, uiWindow* window, void* blarg)
|
||||||
{
|
{
|
||||||
|
EmuRunning = 3;
|
||||||
|
while (EmuStatus != 3);
|
||||||
|
|
||||||
uiControlDestroy(uiControl(window));
|
uiControlDestroy(uiControl(window));
|
||||||
uiQuit();
|
uiQuit();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue