* Add plurals

* Drop proper names from l10n
* Add string parameter numbers for correct l10n freedom
* Update POT file
* Update pl l10n based on new POT file
* Add locale specific number formatting where applicable
* Make use of Glib’s logging facility
This commit is contained in:
Jake Smarter 2023-10-30 12:00:00 +00:00
parent bd918f60fb
commit 665ddf86f2
13 changed files with 1308 additions and 1312 deletions

View File

@ -11,6 +11,9 @@
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include "fmt/format.h"
#include "messages.h"
#include "snes9x.h"
S9xPulseSoundDriver::S9xPulseSoundDriver()
{
@ -116,11 +119,12 @@ bool S9xPulseSoundDriver::open_device(int playback_rate, int buffer_size_ms)
buffer_attr.minreq = pa_usec_to_bytes(3000, &ss);
buffer_attr.prebuf = buffer_attr.tlength / 2;
printf("PulseAudio sound driver initializing...\n");
S9xMessage(S9X_INFO, S9X_NO_INFO, "Initializing PulseAudio sound driver…");
printf(" --> (%dhz, 16-bit Stereo, %dms)...",
S9xMessage(S9X_INFO, S9X_NO_INFO,
fmt::format(" --> ({0:Ld} Hz, 16bit stereo, {1:Ld} ms)…",
playback_rate,
buffer_size_ms);
buffer_size_ms).c_str());
int err = PA_ERR_UNKNOWN;
mainloop = pa_threaded_mainloop_new();
@ -159,7 +163,7 @@ bool S9xPulseSoundDriver::open_device(int playback_rate, int buffer_size_ms)
buffer_size = actual_buffer_attr->tlength;
printf("OK\n");
S9xMessage(S9X_INFO, S9X_NO_INFO, "OK");
return true;
}

View File

@ -3,6 +3,7 @@ src/gtk_cheat.cpp
src/gtk_config.cpp
src/gtk_display_driver_opengl.cpp
src/gtk_netplay.cpp
src/gtk_netplay_dialog.cpp
src/gtk_preferences.cpp
src/gtk_s9x.cpp
src/gtk_s9xwindow.cpp

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -62,6 +62,11 @@ int GtkBuilderWindow::get_height()
return window->get_height();
}
void GtkBuilderWindow::set_label(const char * const name, const char * const label)
{
get_object<Gtk::Label>(name)->set_label(label);
}
void GtkBuilderWindow::set_button_label(const char *name, const char *label)
{
get_object<Gtk::Button>(name)->set_label(label);

View File

@ -37,6 +37,7 @@ class GtkBuilderWindow
void enable_widget(const char *name, bool state);
void show_widget(const char *name, bool state);
void set_label(const char * const name, const char * const label);
void set_button_label(const char *name, const char *label);
bool get_check(const char *name);
int get_entry_value(const char *name);

View File

@ -23,6 +23,13 @@ Snes9xNetplayDialog::Snes9xNetplayDialog(Snes9xConfig *config)
if (!filename.empty())
get_object<Gtk::Entry>("rom_image")->set_text(filename);
});
// Handle plurals on GtkLabel "frames_behind_label"
get_object<Gtk::SpinButton>("frames_behind")->signal_value_changed().connect([&] {
set_label("frames_behind_label",
// GLibs g_dngettext() would have been a better fit here but
// xgettext does not extract g_dngettext() by default
ngettext("frame behind", "frames behind", get_spin("frames_behind")));
});
this->config = config;
}

View File

@ -4,8 +4,6 @@
For further information, consult the LICENSE file in the root directory.
\*****************************************************************************/
#include <string>
#include <stdlib.h>
#include "gtk_compat.h"
#include "gtk_preferences.h"
#include "gtk_config.h"
@ -109,7 +107,7 @@ Snes9xPreferences::Snes9xPreferences(Snes9xConfig *config)
if (m->modeFlags & RR_DoubleClock)
dotClock *= 2;
auto str = fmt::format("{}x{} @ {:.3f}Hz",
auto str = fmt::format(_("{0:Ld}×{1:Ld} @ {2:.3Lf} Hz"),
m->width,
m->height,
(double)dotClock / m->hTotal / m->vTotal);
@ -127,28 +125,28 @@ Snes9xPreferences::Snes9xPreferences(Snes9xConfig *config)
}
#ifdef USE_HQ2X
combo_box_append("scale_method_combo", _("HQ2x"));
combo_box_append("scale_method_combo", _("HQ3x"));
combo_box_append("scale_method_combo", _("HQ4x"));
combo_box_append("scale_method_combo", "HQ2x");
combo_box_append("scale_method_combo", "HQ3x");
combo_box_append("scale_method_combo", "HQ4x");
#endif
#ifdef USE_XBRZ
combo_box_append("scale_method_combo", _("2xBRZ"));
combo_box_append("scale_method_combo", _("3xBRZ"));
combo_box_append("scale_method_combo", _("4xBRZ"));
combo_box_append("scale_method_combo", "2xBRZ");
combo_box_append("scale_method_combo", "3xBRZ");
combo_box_append("scale_method_combo", "4xBRZ");
#endif
for (const auto &driver : config->display_drivers)
{
std::string entry;
if (driver == "opengl")
entry = _("OpenGL - Use 3D graphics hardware");
entry = _("OpenGL Use 3D graphics hardware");
else if (driver == "xv")
entry = _("XVideo - Use hardware video blitter");
entry = _("XVideo Use hardware video blitter");
else if (driver == "vulkan")
entry = _("Vulkan");
else
entry = _("None - Use software scaler");
entry = _("None Use software scaler");
combo_box_append("hw_accel", entry.c_str());
}
@ -170,6 +168,18 @@ void Snes9xPreferences::connect_signals()
get_object<Gtk::ComboBox>("control_combo")->signal_changed().connect([&] {
bindings_to_dialog(get_object<Gtk::ComboBox>("control_combo")->get_active_row_number());
});
get_object<Gtk::CheckButton>("multithreading")->signal_toggled().connect([&] {
enable_widget("num_threads", get_check("multithreading"));
});
// Handle plurals on GtkLabel “threads_for_filtering_and_scaling_label”
get_object<Gtk::SpinButton>("num_threads")->signal_value_changed().connect([&] {
set_label("threads_for_filtering_and_scaling_label",
// GLibs g_d_ngettext() would have been a better fit here but
// xgettext does not extract g_dngettext() by default
ngettext("thread for filtering and scaling",
"threads for filtering and scaling",
get_spin("num_threads")));
});
get_object<Gtk::ComboBox>("scale_method_combo")->signal_changed().connect([&] {
int id = get_combo("scale_method_combo");
show_widget("ntsc_alignment", id == FILTER_NTSC);
@ -207,13 +217,26 @@ void Snes9xPreferences::connect_signals()
get_object<Gtk::Button>("fragment_shader_button")->signal_pressed().connect(sigc::mem_fun(*this, &Snes9xPreferences::shader_select));
get_object<Gtk::Button>("calibrate_button")->signal_pressed().connect(sigc::mem_fun(*this, &Snes9xPreferences::calibration_dialog));
get_object<Gtk::HScale>("sound_input_rate")->signal_value_changed().connect(sigc::mem_fun(*this, &Snes9xPreferences::input_rate_changed));
get_object<Gtk::HScale>("sound_input_rate")->signal_format_value().connect(sigc::mem_fun(*this, &Snes9xPreferences::format_sound_input_rate_value));
get_object<Gtk::Button>("about_button")->signal_clicked().connect(sigc::mem_fun(*this, &Snes9xPreferences::about_dialog));
get_object<Gtk::ToggleButton>("auto_input_rate")->signal_toggled().connect([&] {
auto toggle_button = get_object<Gtk::ToggleButton>("auto_input_rate");
enable_widget("sound_input_rate_label", !toggle_button->get_active());
enable_widget("sound_input_rate", !toggle_button->get_active());
enable_widget("video_rate_label", !toggle_button->get_active());
enable_widget("relative_video_rate", !toggle_button->get_active());
if (toggle_button->get_active())
set_slider("sound_input_rate", top_level->get_auto_input_rate());
});
// Handle plurals on GtkLabel “milliseconds_label”
get_object<Gtk::SpinButton>("sound_buffer_size")->signal_value_changed().connect([&] {
set_label("milliseconds_label",
// GLibs g_d_ngettext() would have been a better fit here but
// xgettext does not extract g_dngettext() by default
ngettext("millisecond",
"milliseconds",
get_spin("sound_buffer_size")));
});
std::array<std::string, 5> browse_buttons = { "sram", "savestate", "cheat", "patch", "export" };
for (auto &name : browse_buttons)
@ -228,6 +251,16 @@ void Snes9xPreferences::connect_signals()
get_object<Gtk::Entry>((name + "_directory").c_str())->set_text(SAME_AS_GAME);
});
}
// Handle plurals on GtkLabel “save_sram_after_sec_label”
get_object<Gtk::SpinButton>("save_sram_after_sec")->signal_value_changed().connect([&] {
set_label("save_sram_after_sec_label",
// GLibs g_d_ngettext() would have been a better fit here but
// xgettext does not extract g_dngettext() by default
ngettext("second after change",
"seconds after change",
get_spin("save_sram_after_sec")));
});
}
void Snes9xPreferences::about_dialog()
@ -282,9 +315,17 @@ void Snes9xPreferences::game_data_browse(std::string folder)
void Snes9xPreferences::input_rate_changed()
{
double value = get_object<Gtk::HScale>("sound_input_rate")->get_value();
value = value / 32040.0 * NTSC_PROGRESSIVE_FRAME_RATE;
get_object<Gtk::Label>("relative_video_rate")->set_label(fmt::format("{:.4f}Hz", value));
const double value =
get_object<Gtk::HScale>("sound_input_rate")->get_value() /
32040.0 * NTSC_PROGRESSIVE_FRAME_RATE;
set_label(
"relative_video_rate",
fmt::format(_("{0:.4Lf} Hz"), value).c_str());
}
Glib::ustring Snes9xPreferences::format_sound_input_rate_value(double value)
{
return fmt::format(_("{0:Ld} Hz"), (uint32_t)std::round(value));
}
bool Snes9xPreferences::key_pressed(GdkEventKey *event)
@ -400,6 +441,11 @@ void Snes9xPreferences::move_settings_to_dialog()
set_check("scale_to_fit", config->scale_to_fit);
set_check("overscan", config->overscan);
set_check("multithreading", config->multithreading);
enable_widget("num_threads", get_check("multithreading"));
set_label("threads_for_filtering_and_scaling_label",
ngettext("thread for filtering and scaling",
"threads for filtering and scaling",
get_spin("num_threads")));
set_combo("hires_effect", config->hires_effect);
set_check("maintain_aspect_ratio", config->maintain_aspect_ratio);
set_combo("aspect_ratio", config->aspect_ratio);
@ -426,7 +472,8 @@ void Snes9xPreferences::move_settings_to_dialog()
set_combo("resolution_combo", config->xrr_index);
set_combo("scale_method_combo", config->scale_method);
set_entry_value("save_sram_after_sec", Settings.AutoSaveDelay);
set_spin ("save_sram_after_sec", Settings.AutoSaveDelay);
set_label("save_sram_after_sec_label", ngettext("second after change", "seconds after change", get_spin("save_sram_after_sec")));
set_check("allow_invalid_vram_access", !Settings.BlockInvalidVRAMAccessMaster);
set_check("upanddown", Settings.UpAndDown);
set_combo("default_esc_behavior", config->default_esc_behavior);
@ -445,8 +492,12 @@ void Snes9xPreferences::move_settings_to_dialog()
enable_widget("auto_input_rate", false);
}
set_check ("auto_input_rate", config->auto_input_rate);
enable_widget("sound_input_rate", config->auto_input_rate ? false : true);
enable_widget("sound_input_rate_label", !config->auto_input_rate);
enable_widget("sound_input_rate", !config->auto_input_rate);
enable_widget("video_rate_label", !config->auto_input_rate);
enable_widget("relative_video_rate", !config->auto_input_rate);
set_spin ("sound_buffer_size", config->sound_buffer_size);
set_label ("milliseconds_label", ngettext("millisecond", "milliseconds", get_spin("sound_buffer_size")));
set_check ("dynamic_rate_control", Settings.DynamicRateControl);
set_spin ("dynamic_rate_limit", Settings.DynamicRateLimit / 1000.0);
set_spin ("rewind_buffer_size", config->rewind_buffer_size);
@ -579,7 +630,7 @@ void Snes9xPreferences::get_settings_from_dialog()
config->hires_effect = get_combo("hires_effect");
config->auto_vrr = get_check("auto_vrr");
config->force_inverted_byte_order = get_check("force_inverted_byte_order");
Settings.AutoSaveDelay = get_entry_value("save_sram_after_sec");
Settings.AutoSaveDelay = get_spin("save_sram_after_sec");
config->multithreading = get_check("multithreading");
config->pause_emulation_on_switch = get_check("pause_emulation_on_switch");
Settings.BlockInvalidVRAMAccessMaster = !get_check("allow_invalid_vram_access");

View File

@ -14,7 +14,7 @@
void snes9x_preferences_create(Snes9xConfig *config);
void snes9x_preferences_open(Snes9xWindow *window);
class Snes9xPreferences : public GtkBuilderWindow
class Snes9xPreferences final : public GtkBuilderWindow
{
public:
Snes9xPreferences(Snes9xConfig *config);
@ -49,6 +49,7 @@ class Snes9xPreferences : public GtkBuilderWindow
private:
void get_settings_from_dialog();
void move_settings_to_dialog();
Glib::ustring format_sound_input_rate_value(double);
};
#endif /* __GTK_PREFERENCES_H */

View File

@ -4,8 +4,9 @@
For further information, consult the LICENSE file in the root directory.
\*****************************************************************************/
#include <stdio.h>
#include <signal.h>
#define G_LOG_USE_STRUCTURED
#define G_LOG_DOMAIN GETTEXT_PACKAGE
#include "gtk_compat.h"
#include "gtk_config.h"
#include "gtk_s9x.h"
@ -52,7 +53,7 @@ int main(int argc, char *argv[])
{
auto app = Gtk::Application::create("com.snes9x.gtk", Gio::APPLICATION_NON_UNIQUE);
setlocale(LC_ALL, "");
std::locale::global(std::locale(""));
bindtextdomain(GETTEXT_PACKAGE, SNES9XLOCALEDIR);
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
textdomain(GETTEXT_PACKAGE);
@ -199,7 +200,13 @@ int S9xOpenROM(const char *rom_filename)
if (state_manager.init(gui_config->rewind_buffer_size * 1024 * 1024))
{
printf("Using rewind buffer of %uMB\n", gui_config->rewind_buffer_size);
S9xMessage(
S9X_INFO,
S9X_NO_INFO,
fmt::format(_("Using rewind buffer of {0}\n"),
Glib::format_size(
gui_config->rewind_buffer_size * 1024 * 1024,
Glib::FORMAT_SIZE_IEC_UNITS).c_str()).c_str());
}
S9xROMLoaded();
@ -360,16 +367,55 @@ void S9xMessage(int type, int number, const char *message)
switch (number)
{
case S9X_MOVIE_INFO:
{
S9xSetInfoString(message);
break;
}
case S9X_ROM_INFO:
{
S9xSetInfoString(Memory.GetMultilineROMInfo().c_str());
break;
}
default:
{
switch (type)
{
case S9X_TRACE:
case S9X_DEBUG:
{
g_debug(message);
break;
}
case S9X_WARNING:
{
g_warning(message);
break;
}
case S9X_INFO:
{
g_info(message);
g_message(message);
break;
}
case S9X_ERROR:
{
// GLibs g_critical() does not terminate the process
g_critical(message);
break;
}
case S9X_FATAL_ERROR:
{
// GLibs g_error() terminates the process
g_error(message);
break;
}
default:
{
g_message(message);
}
}
}
}
}
/* Varies from ParseArgs because this one is for the OS port to handle */
@ -550,10 +596,11 @@ const char *S9xStringInput(const char *message)
void S9xExtraUsage()
{
printf("GTK port options:\n"
S9xMessage(S9X_INFO, S9X_USAGE,
_("GTK port options:\n"
"-filter [option] Use a filter to scale the image.\n"
" [option] is one of: none supereagle 2xsai\n"
" super2xsai hq2x hq3x hq4x 2xbrz 3xbrz 4xbrz epx ntsc\n"
"\n"
"-mutesound Disables sound output.\n");
"-mutesound Disables sound output.\n"));
}

View File

@ -12,7 +12,7 @@
#include <glib/gi18n.h>
#define SNES9X_GTK_AUTHORS "(c) 2007 - 2020 Brandon Wright (bearoso@gmail.com)"
#define SNES9X_GTK_AUTHORS "© 2007 - 2023 Brandon Wright (bearoso@gmail.com)"
#define SNES9X_GTK_VERSION "87"
extern Snes9xWindow *top_level;

View File

@ -30,6 +30,8 @@
#include "gtk_netplay.h"
#include "gtk_s9xwindow.h"
#include "fmt/format.h"
#include "snes9x.h"
#include "controls.h"
#include "movie.h"
@ -784,8 +786,6 @@ void Snes9xWindow::load_state_dialog()
void Snes9xWindow::movie_seek_dialog()
{
char str[1024];
if (!S9xMovieActive())
return;
@ -793,11 +793,14 @@ void Snes9xWindow::movie_seek_dialog()
GtkBuilderWindow seek_dialog("frame_advance_dialog");
snprintf(str, 1024, _("The current frame in the movie is <b>%d</b>."), S9xMovieGetFrameCounter());
{
std::string str;
str = fmt::format(_("The current frame in the movie is <b>{0:Ld}</b>."), S9xMovieGetFrameCounter());
seek_dialog.get_object<Gtk::Label>("current_frame_label")->set_label(str);
snprintf(str, 1024, "%d", S9xMovieGetFrameCounter());
str = fmt::format("{0:d}", S9xMovieGetFrameCounter());
seek_dialog.set_entry_text("frame_entry", str);
}
auto dialog = Glib::RefPtr<Gtk::Dialog>::cast_static(seek_dialog.window);

View File

@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<requires lib="gtk+" version="3.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkDialog" id="about_dialog">
<!-- TODO: Replace GtkDialog with GtkAboutDialog -->
<property name="width_request">560</property>
<property name="height_request">448</property>
<property name="can_focus">False</property>
@ -45,7 +46,6 @@
<property name="yalign">0</property>
<property name="xpad">10</property>
<property name="ypad">10</property>
<property name="label" translatable="yes">label106</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
<property name="wrap">True</property>
@ -164,6 +164,11 @@
<property name="step_increment">10</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="save_sram_after_sec_adjustment">
<property name="upper">3600</property>
<property name="step_increment">1</property>
<property name="page_increment">60</property>
</object>
<object class="GtkAdjustment" id="adjustment13">
<property name="lower">-1</property>
<property name="upper">1</property>
@ -655,7 +660,7 @@
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Fast-forward to frame</property>
<property name="label" translatable="yes">Fastforward to frame</property>
</object>
<packing>
<property name="expand">True</property>
@ -731,30 +736,12 @@
<property name="stock">gtk-leave-fullscreen</property>
<property name="icon-size">1</property>
</object>
<object class="GtkImage" id="image15">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-fullscreen</property>
<property name="icon-size">1</property>
</object>
<object class="GtkImage" id="image16">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-preferences</property>
<property name="icon-size">1</property>
</object>
<object class="GtkImage" id="image17">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-zoom-in</property>
<property name="icon-size">1</property>
</object>
<object class="GtkImage" id="image18">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-quit</property>
<property name="icon-size">1</property>
</object>
<object class="GtkImage" id="image19">
<property name="visible">True</property>
<property name="can_focus">False</property>
@ -845,13 +832,13 @@
</columns>
<data>
<row>
<col id="0" translatable="yes">Game Genie</col>
<col id="0" translatable="no">Game Genie</col>
</row>
<row>
<col id="0" translatable="yes">Pro Action Replay</col>
<col id="0" translatable="no">Pro Action Replay</col>
</row>
<row>
<col id="0" translatable="yes">Goldfinger</col>
<col id="0" translatable="no">Goldfinger</col>
</row>
</data>
</object>
@ -905,37 +892,37 @@
</columns>
<data>
<row>
<col id="0" translatable="yes">None</col>
<col id="0" translatable="yes" context="filter list">None</col>
</row>
<row>
<col id="0" translatable="yes">SuperEagle</col>
<col id="0" translatable="no">SuperEagle</col>
</row>
<row>
<col id="0" translatable="yes">2xSaI</col>
<col id="0" translatable="no">2xSaI</col>
</row>
<row>
<col id="0" translatable="yes">Super2xSaI</col>
<col id="0" translatable="no">Super2xSaI</col>
</row>
<row>
<col id="0" translatable="yes">EPX</col>
<col id="0" translatable="no">EPX</col>
</row>
<row>
<col id="0" translatable="yes">EPX Smooth</col>
<col id="0" translatable="no">EPX Smooth</col>
</row>
<row>
<col id="0" translatable="yes">Blargg's NTSC</col>
<col id="0" translatable="no">Blarggs NTSC</col>
</row>
<row>
<col id="0" translatable="yes">Scanlines</col>
<col id="0" translatable="no">Scanlines</col>
</row>
<row>
<col id="0" translatable="yes">Simple2x</col>
<col id="0" translatable="no">Simple2x</col>
</row>
<row>
<col id="0" translatable="yes">Simple3x</col>
<col id="0" translatable="no">Simple3x</col>
</row>
<row>
<col id="0" translatable="yes">Simple4x</col>
<col id="0" translatable="no">Simple4x</col>
</row>
</data>
</object>
@ -984,7 +971,7 @@
<col id="0" translatable="yes">Output directly</col>
</row>
<row>
<col id="0" translatable="yes">Scale low-resolution screens</col>
<col id="0" translatable="yes">Scale lowresolution screens</col>
</row>
</data>
</object>
@ -1088,10 +1075,10 @@
</columns>
<data>
<row>
<col id="0" translatable="yes">Timer-based</col>
<col id="0" translatable="yes">Timerbased</col>
</row>
<row>
<col id="0" translatable="yes">Timer-based with automatic frame-skipping</col>
<col id="0" translatable="yes">Timerbased with automatic frame-skipping</col>
</row>
<row>
<col id="0" translatable="yes">Sound buffer synchronization</col>
@ -1108,28 +1095,28 @@
</columns>
<data>
<row>
<col id="0" translatable="yes">48000 hz</col>
<col id="0" translatable="yes">48,000 Hz</col>
</row>
<row>
<col id="0" translatable="yes">44100 hz</col>
<col id="0" translatable="yes">44,100 Hz</col>
</row>
<row>
<col id="0" translatable="yes">32000 hz</col>
<col id="0" translatable="yes">32,000 Hz</col>
</row>
<row>
<col id="0" translatable="yes">22050 hz</col>
<col id="0" translatable="yes">22,050 Hz</col>
</row>
<row>
<col id="0" translatable="yes">16000 hz</col>
<col id="0" translatable="yes">16,000 Hz</col>
</row>
<row>
<col id="0" translatable="yes">11025 hz</col>
<col id="0" translatable="yes">11,025 Hz</col>
</row>
<row>
<col id="0" translatable="yes">8000 hz</col>
<col id="0" translatable="yes">8,000 Hz</col>
</row>
<row>
<col id="0" translatable="yes">0 hz</col>
<col id="0" translatable="yes">0 Hz</col>
</row>
</data>
</object>
@ -1146,10 +1133,10 @@
</columns>
<data>
<row>
<col id="0" translatable="yes">16-bit (GL_RGB)</col>
<col id="0" translatable="yes">16bit (GL_RGB)</col>
</row>
<row>
<col id="0" translatable="yes">32-bit (GL_BGRA)</col>
<col id="0" translatable="yes">32bit (GL_BGRA)</col>
</row>
</data>
</object>
@ -1212,7 +1199,7 @@
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="open_rom_item">
<property name="label" translatable="yes">_Open ROM Image...</property>
<property name="label" translatable="yes">_Open ROM Image</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
@ -1247,7 +1234,7 @@
</child>
<child>
<object class="GtkImageMenuItem" id="open_netplay_item">
<property name="label" translatable="yes">Open with _NetPlay...</property>
<property name="label" translatable="yes">Open with _NetPlay</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Open a ROM to use with NetPlay</property>
@ -1261,7 +1248,7 @@
<object class="GtkMenuItem" id="open_multicart_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Open _MultiCart...</property>
<property name="label" translatable="yes">Open _MultiCart</property>
<property name="use_underline">True</property>
<signal name="activate" handler="open_multicart" swapped="no"/>
</object>
@ -1382,7 +1369,7 @@
<object class="GtkMenuItem" id="from_file1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">From _File...</property>
<property name="label" translatable="yes">From _File</property>
<property name="use_underline">True</property>
<signal name="activate" handler="load_state_file" swapped="no"/>
</object>
@ -1516,7 +1503,7 @@
<object class="GtkMenuItem" id="to_file1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">To _File...</property>
<property name="label" translatable="yes">To _File</property>
<property name="use_underline">True</property>
<signal name="activate" handler="save_state_file" swapped="no"/>
</object>
@ -1533,7 +1520,7 @@
</child>
<child>
<object class="GtkImageMenuItem" id="save_spc_item">
<property name="label" translatable="yes">Save SPC...</property>
<property name="label" translatable="yes">Save SPC</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
@ -1550,7 +1537,7 @@
</child>
<child>
<object class="GtkImageMenuItem" id="rom_info_item">
<property name="label" translatable="yes">Show ROM _Info...</property>
<property name="label" translatable="yes">Show ROM _Info</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
@ -1567,12 +1554,9 @@
</child>
<child>
<object class="GtkImageMenuItem" id="exit_item">
<property name="label" translatable="yes">_Quit</property>
<property name="label" translatable="yes">gtk-quit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="image">image18</property>
<property name="use_stock">False</property>
<property name="use_stock">True</property>
<signal name="activate" handler="main_window_delete_event" swapped="no"/>
</object>
</child>
@ -1620,7 +1604,7 @@
</child>
<child>
<object class="GtkImageMenuItem" id="open_movie_item">
<property name="label" translatable="yes">Load _Movie...</property>
<property name="label" translatable="yes">Load _Movie</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@ -1632,7 +1616,7 @@
</child>
<child>
<object class="GtkImageMenuItem" id="record_movie_item">
<property name="label" translatable="yes">R_ecord Movie...</property>
<property name="label" translatable="yes">R_ecord Movie</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@ -1656,7 +1640,7 @@
</child>
<child>
<object class="GtkImageMenuItem" id="jump_to_frame_item">
<property name="label" translatable="yes">_Jump to Frame...</property>
<property name="label" translatable="yes">_Jump to Frame</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@ -1759,7 +1743,7 @@
<object class="GtkMenuItem" id="exact_pixels_1x_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_1x</property>
<property name="label" translatable="yes">_1×</property>
<property name="use_underline">True</property>
<signal name="activate" handler="exact_1x" swapped="no"/>
</object>
@ -1768,7 +1752,7 @@
<object class="GtkMenuItem" id="exact_pixels_2x_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_2x</property>
<property name="label" translatable="yes">_2×</property>
<property name="use_underline">True</property>
<signal name="activate" handler="exact_2x" swapped="no"/>
</object>
@ -1777,7 +1761,7 @@
<object class="GtkMenuItem" id="exact_pixels_3x_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_3x</property>
<property name="label" translatable="yes">_3×</property>
<property name="use_underline">True</property>
<signal name="activate" handler="exact_3x" swapped="no"/>
</object>
@ -1786,7 +1770,7 @@
<object class="GtkMenuItem" id="exact_pixels_4x_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_4x</property>
<property name="label" translatable="yes">_4×</property>
<property name="use_underline">True</property>
<signal name="activate" handler="exact_4x" swapped="no"/>
</object>
@ -1795,7 +1779,7 @@
<object class="GtkMenuItem" id="exact_pixels_5x_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_5x</property>
<property name="label" translatable="yes">_5×</property>
<property name="use_underline">True</property>
<signal name="activate" handler="exact_5x" swapped="no"/>
</object>
@ -1804,7 +1788,7 @@
<object class="GtkMenuItem" id="exact_pixels_6x_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_6x</property>
<property name="label" translatable="yes">_6×</property>
<property name="use_underline">True</property>
<signal name="activate" handler="exact_6x" swapped="no"/>
</object>
@ -1813,7 +1797,7 @@
<object class="GtkMenuItem" id="exact_pixels_7x_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_7x</property>
<property name="label" translatable="yes">_7×</property>
<property name="use_underline">True</property>
<signal name="activate" handler="exact_7x" swapped="no"/>
</object>
@ -1822,7 +1806,7 @@
<object class="GtkMenuItem" id="exact_pixels_8x_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_8x</property>
<property name="label" translatable="yes">_8×</property>
<property name="use_underline">True</property>
<signal name="activate" handler="exact_8x" swapped="no"/>
</object>
@ -1831,7 +1815,7 @@
<object class="GtkMenuItem" id="exact_pixels_9x_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_9x</property>
<property name="label" translatable="yes">_9×</property>
<property name="use_underline">True</property>
<signal name="activate" handler="exact_9x" swapped="no"/>
</object>
@ -1840,7 +1824,7 @@
<object class="GtkMenuItem" id="exact_pixels_10x_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">1_0x</property>
<property name="label" translatable="yes">1_0×</property>
<property name="use_underline">True</property>
<signal name="activate" handler="exact_10x" swapped="no"/>
</object>
@ -1857,12 +1841,9 @@
</child>
<child>
<object class="GtkImageMenuItem" id="fullscreen_item">
<property name="label" translatable="yes">_Fullscreen</property>
<property name="label" translatable="yes">gtk-fullscreen</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="image">image15</property>
<property name="use_stock">False</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_fullscreen_item_activate" swapped="no"/>
</object>
</child>
@ -1986,7 +1967,7 @@
<object class="GtkRadioMenuItem" id="nothingpluggedin2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">None</property>
<property name="label" translatable="yes" context="SNES port 2">None</property>
<property name="use_underline">True</property>
<property name="active">True</property>
<property name="group">joypad2</property>
@ -2012,7 +1993,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">_Cheats...</property>
<property name="label" translatable="yes">_Cheats</property>
<property name="use_underline">True</property>
<signal name="activate" handler="open_cheats" swapped="no"/>
</object>
@ -2026,7 +2007,7 @@
</child>
<child>
<object class="GtkMenuItem" id="shader_parameters_item">
<property name="label" translatable="yes">_Shader Parameters...</property>
<property name="label" translatable="yes">_Shader Parameters</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
@ -2042,12 +2023,9 @@
</child>
<child>
<object class="GtkImageMenuItem" id="preferences_item">
<property name="label" translatable="yes">_Preferences...</property>
<property name="label" translatable="yes">gtk-preferences</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="image">image16</property>
<property name="use_stock">False</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_preferences_item_activate" swapped="no"/>
</object>
</child>
@ -2322,7 +2300,7 @@
</child>
<child>
<object class="GtkButton" id="browse_button">
<property name="label" translatable="yes">Browse...</property>
<property name="label" translatable="yes">Browse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@ -2636,6 +2614,7 @@
<property name="adjustment">adjustment1</property>
<property name="snap_to_ticks">True</property>
<property name="numeric">True</property>
<signal name="value-changed" handler="frames_behind_changed"/>
</object>
<packing>
<property name="expand">False</property>
@ -2644,10 +2623,10 @@
</packing>
</child>
<child>
<object class="GtkLabel" id="label136">
<object class="GtkLabel" id="frames_behind_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">frames behind</property>
<property name="label" translatable="yes"/>
</object>
<packing>
<property name="expand">False</property>
@ -2875,7 +2854,7 @@
</child>
<child>
<object class="GtkCheckButton" id="show_indicators">
<property name="label" translatable="yes">Show fast-forward and pause indicators</property>
<property name="label" translatable="yes">Show fastforward and pause indicators</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
@ -2916,7 +2895,7 @@
<object class="GtkLabel" id="osdlabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">On-screen display size:</property>
<property name="label" translatable="yes">Onscreen display size:</property>
</object>
<packing>
<property name="expand">False</property>
@ -2927,7 +2906,7 @@
<object class="GtkSpinButton" id="osd_size">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Connect to specified TCP port on remote computer</property>
<property name="tooltip_text" translatable="yes">The size of onscreen display messages in pixels</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
@ -3107,7 +3086,7 @@
</child>
<child>
<object class="GtkCheckButton" id="maintain_aspect_ratio">
<property name="label" translatable="yes">Maintain aspect-ratio</property>
<property name="label" translatable="yes">Maintain aspect ratio</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
@ -3126,13 +3105,13 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">5</property>
<property name="tooltip-text" translatable="yes">Allows scaling and filtering to use multiple processors</property>
<child>
<object class="GtkCheckButton" id="multithreading">
<property name="label" translatable="yes">Use</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Allows scaling and filtering to use multiple processors</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</object>
@ -3153,6 +3132,7 @@
<property name="adjustment">adjustment17</property>
<property name="snap_to_ticks">True</property>
<property name="numeric">True</property>
<signal name="value-changed" handler="num_threads_changed"/>
</object>
<packing>
<property name="expand">False</property>
@ -3161,10 +3141,9 @@
</packing>
</child>
<child>
<object class="GtkLabel" id="label126">
<object class="GtkLabel" id="threads_for_filtering_and_scaling_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">threads for filtering and scaling</property>
</object>
<packing>
<property name="expand">False</property>
@ -3188,7 +3167,7 @@
<object class="GtkLabel" id="label124">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">High-resolution effect:</property>
<property name="label" translatable="yes">Highresolution effect:</property>
</object>
<packing>
<property name="expand">False</property>
@ -3327,7 +3306,7 @@
</child>
<child>
<object class="GtkButton" id="ntsc_svideo_preset">
<property name="label" translatable="yes">S-Video</property>
<property name="label" translatable="yes">SVideo</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@ -3896,7 +3875,7 @@
<child>
<object class="GtkComboBox" id="hw_accel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="model">liststore9</property>
<signal name="changed" handler="hw_accel_changed" swapped="no"/>
@ -3915,7 +3894,7 @@
</child>
<child>
<object class="GtkCheckButton" id="bilinear_filter">
<property name="label" translatable="yes">Bilinear-filter output</property>
<property name="label" translatable="yes">Bilinearfilter output</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
@ -3930,7 +3909,7 @@
</child>
<child>
<object class="GtkCheckButton" id="auto_vrr">
<property name="label" translatable="yes">Use best settings for FreeSync/G-Sync when fullscreen</property>
<property name="label" translatable="yes">Use best settings for FreeSync/GSync when in fullscreen</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
@ -4019,7 +3998,7 @@
</child>
<child>
<object class="GtkButton" id="fragment_shader_button">
<property name="label" translatable="yes">Browse...</property>
<property name="label" translatable="yes">Browse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@ -4051,11 +4030,11 @@
<property name="can_focus">False</property>
<child>
<object class="GtkCheckButton" id="force_inverted_byte_order">
<property name="label" translatable="yes">Force an inverted byte-ordering</property>
<property name="label" translatable="yes">Force an inverted byteordering</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Forces a swapped byte-ordering for cases where the system's endian is used instead of the video card</property>
<property name="tooltip_text" translatable="yes">Forces a swapped byteordering for cases where the systems endian is used instead of the video card</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@ -4200,7 +4179,7 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Sets the correct input rate based on the display's refresh rate</property>
<property name="tooltip_text" translatable="yes">Sets the correct input rate based on the displays refresh rate</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="auto_input_rate_toggled" swapped="no"/>
</object>
@ -4294,6 +4273,7 @@
<property name="snap_to_ticks">True</property>
<property name="width_chars">6</property>
<property name="numeric">True</property>
<signal name="value-changed" handler="sound_buffer_size_changed"/>
</object>
<packing>
<property name="expand">False</property>
@ -4302,10 +4282,9 @@
</packing>
</child>
<child>
<object class="GtkLabel" id="label137">
<object class="GtkLabel" id="milliseconds_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">milliseconds</property>
</object>
<packing>
<property name="expand">False</property>
@ -4400,11 +4379,12 @@
<object class="GtkHScale" id="sound_input_rate">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Adjust to produce more or less data. Decrease the rate if experiencing crackling. Increase the rate if experiencing frame-rate stuttering. Best used with the "Synchronize with sound" option</property>
<property name="tooltip_text" translatable="yes">Adjust to produce more or less data. Decrease the rate if experiencing crackling. Increase the rate if experiencing frame rate stuttering. Best used with the “Sound buffer synchronization” option.</property>
<property name="adjustment">adjustment5</property>
<property name="restrict_to_fill_level">False</property>
<property name="digits">0</property>
<property name="digits">8</property>
<property name="value_pos">left</property>
<signal name="format_value" handler="format_sound_input_rate_value"/>
</object>
<packing>
<property name="left_attach">1</property>
@ -4445,7 +4425,7 @@
</packing>
</child>
<child>
<object class="GtkLabel" id="label139">
<object class="GtkLabel" id="video_rate_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
@ -4462,7 +4442,6 @@
<object class="GtkLabel" id="relative_video_rate">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="left_attach">1</property>
@ -5134,7 +5113,7 @@
</child>
<child>
<object class="GtkButton" id="sram_browse">
<property name="label" translatable="yes">Browse...</property>
<property name="label" translatable="yes">Browse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@ -5149,7 +5128,7 @@
</child>
<child>
<object class="GtkButton" id="savestate_browse">
<property name="label" translatable="yes">Browse...</property>
<property name="label" translatable="yes">Browse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@ -5166,7 +5145,7 @@
</child>
<child>
<object class="GtkButton" id="cheat_browse">
<property name="label" translatable="yes">Browse...</property>
<property name="label" translatable="yes">Browse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@ -5183,7 +5162,7 @@
</child>
<child>
<object class="GtkButton" id="patch_browse">
<property name="label" translatable="yes">Browse...</property>
<property name="label" translatable="yes">Browse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@ -5200,7 +5179,7 @@
</child>
<child>
<object class="GtkButton" id="export_browse">
<property name="label" translatable="yes">Browse...</property>
<property name="label" translatable="yes">Browse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@ -5340,17 +5319,13 @@
</packing>
</child>
<child>
<object class="GtkEntry" id="save_sram_after_sec">
<object class="GtkSpinButton" id="save_sram_after_sec">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Automatically save the game's SRAM at this interval. Setting this to 0 will only save when quitting or changing ROMs</property>
<property name="invisible_char">•</property>
<property name="width_chars">5</property>
<property name="xalign">1</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="tooltip_text" translatable="yes">Automatically save the games SRAM at this interval. Setting this to 0 will only save when quitting or changing ROMs</property>
<property name="numeric">True</property>
<property name="adjustment">save_sram_after_sec_adjustment</property>
<signal name="value-changed" handler="save_sram_after_sec_value_changed"/>
</object>
<packing>
<property name="expand">False</property>
@ -5359,10 +5334,9 @@
</packing>
</child>
<child>
<object class="GtkLabel" id="label12">
<object class="GtkLabel" id="save_sram_after_sec_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">seconds after change</property>
</object>
<packing>
<property name="expand">False</property>
@ -5565,13 +5539,14 @@
</child>
<child>
<object class="GtkCheckButton" id="use_modifiers">
<property name="label" translatable="yes">Use modifier keys (CTRL, SHIFT, ALT) directly</property>
<property name="label" translatable="yes">Use _modifier keys (Ctrl, Shift, Alt) directly</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Allow using modifier keys as independent keys instead of modifiers</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
@ -6700,7 +6675,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">&lt;small&gt;Click an entry and then press the desired keys or joystick button
&lt;i&gt;Escape&lt;/i&gt;: Move to next&lt;i&gt; Shift-Escape&lt;/i&gt;: Clear selected&lt;/small&gt;</property>
&lt;tt&gt;Escape&lt;/tt&gt;: Move to next &lt;tt&gt;Shift+Escape&lt;/tt&gt;: Clear selected&lt;/small&gt;</property>
<property name="use_markup">True</property>
<property name="justify">fill</property>
<property name="wrap">True</property>
@ -9052,7 +9027,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">&lt;small&gt;Click an entry and then press the desired keys or joystick button
&lt;i&gt;Escape&lt;/i&gt;: Move to next&lt;i&gt; Shift-Escape&lt;/i&gt;: Clear selected&lt;/small&gt;</property>
&lt;tt&gt;Escape&lt;/tt&gt;: Move to next &lt;tt&gt;Shift+Escape&lt;/tt&gt;: Clear selected&lt;/small&gt;</property>
<property name="use_markup">True</property>
<property name="justify">fill</property>
<property name="wrap">True</property>
@ -9142,7 +9117,7 @@
</child>
<child>
<object class="GtkCheckButton" id="force_enable_icons">
<property name="label" translatable="yes">Force-enable button and menu icons</property>
<property name="label" translatable="yes">Forceenable button and menu icons</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
@ -9163,7 +9138,9 @@
<object class="GtkLabel" id="label128">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">The ESC key should:</property>
<property name="label" translatable="yes">The &lt;tt&gt;Esc&lt;/tt&gt; key should:</property>
<property name="use_markup">True</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
@ -9364,19 +9341,19 @@
</action-widgets>
</object>
<object class="GtkTextBuffer" id="textbuffer1">
<property name="text" translatable="yes"> Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
<property name="text" translatable="yes"> Snes9x A Portable Super Nintendo Entertainment System™ Emulator
Snes9x homepage: http://www.snes9x.com/
Snes9x source code: https://github.com/snes9xgit/snes9x/
Permission to use, copy, modify and/or distribute Snes9x in both binary
and source form, for non-commercial purposes, is hereby granted without
and source form, for noncommercial purposes, is hereby granted without
fee, providing that this license information and copyright notice appear
with all copies and any derived work.
This software is provided 'as-is', without any express or implied
This software is provided asis, without any express or implied
warranty. In no event shall the authors be held liable for any damages
arising from the use of this software or it's derivatives.
arising from the use of this software or its derivatives.
Snes9x is freeware for PERSONAL USE only. Commercial users should
seek permission of the copyright holders first. Commercial use includes,