Gtk: Thread preferences creation.

This commit is contained in:
BearOso 2020-08-23 16:28:01 -05:00
parent a3c0c4621d
commit 95c7fdad1f
3 changed files with 20 additions and 9 deletions

View File

@ -20,14 +20,23 @@
#define SAME_AS_GAME _("Same location as current game") #define SAME_AS_GAME _("Same location as current game")
void snes9x_preferences_open(Snes9xWindow *window, Snes9xConfig *config) static Snes9xPreferences *preferences = nullptr;
{
static Snes9xPreferences *preferences = nullptr;
void snes9x_preferences_create(Snes9xConfig *config)
{
Glib::Thread::create([config] {
Snes9xPreferences *new_preferences;
new_preferences = new Snes9xPreferences(config);
preferences = new_preferences;
}, true);
}
void snes9x_preferences_open(Snes9xWindow *window)
{
if (!preferences) if (!preferences)
{ return;
preferences = new Snes9xPreferences(config);
} auto &config = preferences->config;
window->pause_from_focus_change (); window->pause_from_focus_change ();

View File

@ -11,7 +11,8 @@
#include "gtk_s9x.h" #include "gtk_s9x.h"
#include "gtk_builder_window.h" #include "gtk_builder_window.h"
void snes9x_preferences_open(Snes9xWindow *window, Snes9xConfig *config); void snes9x_preferences_create(Snes9xConfig *config);
void snes9x_preferences_open(Snes9xWindow *window);
class Snes9xPreferences : public GtkBuilderWindow class Snes9xPreferences : public GtkBuilderWindow
{ {

View File

@ -78,6 +78,8 @@ Snes9xWindow::Snes9xWindow(Snes9xConfig *config)
cairo_owned = false; cairo_owned = false;
mouse_grabbed = false; mouse_grabbed = false;
snes9x_preferences_create(config);
if (Gtk::IconTheme::get_default()->has_icon("snes9x")) if (Gtk::IconTheme::get_default()->has_icon("snes9x"))
{ {
window->set_default_icon_name("snes9x"); window->set_default_icon_name("snes9x");
@ -86,7 +88,6 @@ Snes9xWindow::Snes9xWindow(Snes9xConfig *config)
{ {
auto loader = Gdk::PixbufLoader::create(); auto loader = Gdk::PixbufLoader::create();
loader->write((const guint8 *)app_icon, sizeof(app_icon)); loader->write((const guint8 *)app_icon, sizeof(app_icon));
loader->close();
window->set_default_icon(loader->get_pixbuf()); window->set_default_icon(loader->get_pixbuf());
} }
@ -244,7 +245,7 @@ void Snes9xWindow::connect_signals()
}); });
get_object<Gtk::MenuItem>("preferences_item")->signal_activate().connect([&] { get_object<Gtk::MenuItem>("preferences_item")->signal_activate().connect([&] {
snes9x_preferences_open(this, config); snes9x_preferences_open(this);
}); });
get_object<Gtk::MenuItem>("open_netplay_item")->signal_activate().connect([&] { get_object<Gtk::MenuItem>("open_netplay_item")->signal_activate().connect([&] {