Compare commits

..

2 Commits

Author SHA1 Message Date
Rosalie Wanders 969d63f182 Package: v0.8.9 2026-01-23 06:53:42 +01:00
Rosalie Wanders c7a4e6c47a README: remove obsolete support link 2026-01-21 10:05:15 +01:00
26 changed files with 103 additions and 122 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Maintainer: Rosalie Wanders <rosalie@mailbox.org>
pkgname=rmg
pkgver=0.8.8
pkgver=0.8.9
pkgrel=1
pkgdesc="Rosalie's Mupen GUI"
arch=('x86_64' 'aarch64')
+1 -1
View File
@@ -1,5 +1,5 @@
Name: RMG
Version: 0.8.8
Version: 0.8.9
Release: %autorelease
Summary: Rosalie's Mupen GUI
@@ -29,6 +29,20 @@
</screenshot>
</screenshots>
<releases>
<release version="v0.8.9" date="2026-01-23" type="stable">
<description>
<p>Changes:</p>
<ul>
<li>Fix AppImage icon not working since v0.7.1 (thank you Samueru-sama)</li>
<li>Fix desktop file causing a crash on Budgie (thank you jpleatherland)</li>
<li>Fix memory pak from player 2, 3 and 4 not saving correctly</li>
<li>Fix Star Wars - Rogue Squadron having missing geometry when using GLideN64</li>
<li>Remove translations from the configuration GUI of GLideN64</li>
<li>Add plugin settings shortcuts to the toolbar</li>
<li>Update mupen64plus-video-GLideN64, SDL_net and SDL_GameControllerDB</li>
</ul>
</description>
</release>
<release version="v0.8.8" date="2025-11-16" type="stable">
<description>
<p>Changes:</p>
+2 -4
View File
@@ -7,7 +7,7 @@ It offers a simple-to-use user interface.
## Download
#### Windows
You can download Rosalie's Mupen GUI on ![Github Releases](https://github.com/Rosalie241/RMG/releases)
You can download Rosalie's Mupen GUI on [Github Releases](https://github.com/Rosalie241/RMG/releases)
#### Linux
You can download Rosalie's Mupen GUI on
@@ -18,9 +18,7 @@ You can download Rosalie's Mupen GUI on
## Support
You can ask for help or report issues on
* [Github](https://github.com/Rosalie241/RMG/issues/new)
* [Discord](https://discord.gg/k9GuyJ2PpF)
You can ask for help or report issues on [Github](https://github.com/Rosalie241/RMG/issues/new)
## License
@@ -110,11 +110,6 @@ void DisplayWindow::closeWindow()
m_bToggleFullscreen = false;
}
void DisplayWindow::setInitialWindowSize(u32 width, u32 height)
{
m_initialWidth = width;
m_initialHeight = height;
}
void DisplayWindow::setWindowSize(u32 _width, u32 _height)
{
@@ -17,7 +17,6 @@ public:
bool changeWindow();
bool resizeWindow();
void closeWindow();
void setInitialWindowSize(u32 width, u32 height);
void setWindowSize(u32 _width, u32 _height);
void setCaptureScreen(const char * const _strDirectory);
void setToggleFullscreen() { m_bToggleFullscreen = true; }
@@ -56,8 +55,6 @@ protected:
bool m_bAdjustScreen = false;
u32 m_buffersSwapCount = 0;
u32 m_initialWidth = 0;
u32 m_initialHeight = 0;
u32 m_width = 0;
u32 m_height = 0;
u32 m_heightOffset = 0;
@@ -90,8 +90,8 @@ bool DisplayWindowMupen64plus::_start()
_setAttributes();
m_bFullscreen = config.video.fullscreen > 0;
m_screenWidth = m_initialWidth > 0 ? m_initialWidth : config.video.windowedWidth;
m_screenHeight = m_initialHeight > 0 ? m_initialHeight : config.video.windowedHeight;
m_screenWidth = config.video.windowedWidth;
m_screenHeight = config.video.windowedHeight;
m_screenRefresh = config.video.fullscreenRefresh;
_getDisplaySize();
@@ -57,11 +57,6 @@ EXPORT void CALL SetRenderingCallback(void (*callback)(int))
api().SetRenderingCallback(callback);
}
EXPORT void CALL SetInitialVideoSize(int width, int height)
{
api().SetInitialVideoSize(width, height);
}
EXPORT void CALL ResizeVideoOutput(int width, int height)
{
api().ResizeVideoOutput(width, height);
@@ -80,9 +80,6 @@ public:
void FBGetFrameBufferInfo(void *pinfo);
#else
// MupenPlus
#ifdef M64P_GLIDENUI
void SetInitialVideoSize(int width, int height);
#endif
void ResizeVideoOutput(int _Width, int _Height);
void ReadScreen2(void * _dest, int * _width, int * _height, int _front);
@@ -166,13 +166,6 @@ void PluginAPI::SetRenderingCallback(void (*callback)(int))
renderCallback = callback;
}
#ifdef M64P_GLIDENUI
void PluginAPI::SetInitialVideoSize(int width, int height)
{
dwnd().setInitialWindowSize(width, height);
}
#endif
void PluginAPI::ResizeVideoOutput(int _Width, int _Height)
{
dwnd().setWindowSize(_Width, _Height);
@@ -16,7 +16,6 @@ ViStatusChanged;
ViWidthChanged;
ReadScreen2;
SetRenderingCallback;
SetInitialVideoSize;
ResizeVideoOutput;
FBRead;
FBWrite;
@@ -68,9 +68,6 @@ extern int32_t win_width;
extern int32_t win_height;
extern int32_t win_fullscreen;
extern int32_t init_win_width;
extern int32_t init_win_height;
EXPORT m64p_error CALL PluginStartup(m64p_dynlib_handle _CoreLibHandle, void *Context,
void (*DebugCallback)(void *, int, const char *))
{
@@ -172,12 +169,6 @@ extern "C"
return M64ERR_SUCCESS;
}
EXPORT void CALL SetInitialVideoSize(int width, int height)
{
init_win_width = width;
init_win_height = height;
}
}
EXPORT int CALL InitiateGFX (GFX_INFO Gfx_Info)
@@ -23,8 +23,6 @@ static ptr_VidExt_GL_GetAttribute CoreVideo_GL_GetAttribute = NULL;
static ptr_VidExt_GL_SwapBuffers CoreVideo_GL_SwapBuffers = NULL;
// framebuffer texture states
int32_t init_win_width = 0;
int32_t init_win_height = 0;
int32_t win_width;
int32_t win_height;
int32_t win_fullscreen;
@@ -64,9 +62,6 @@ void screen_init(struct n64video_config* config)
CoreVideo_GL_SetAttribute(M64P_GL_SWAP_CONTROL, config->vi.vsync);
win_width = init_win_width > 0 ? init_win_width : win_width;
win_height = init_win_height > 0 ? init_win_height : win_height;
CoreVideo_SetVideoMode(win_width, win_height, 0, win_fullscreen ? M64VIDEO_FULLSCREEN : M64VIDEO_WINDOWED, M64VIDEOFLAG_SUPPORT_RESIZING);
}
-19
View File
@@ -71,10 +71,6 @@ m64p_handle configVideoParallel = NULL;
uint32_t rdram_size;
static ptr_PluginGetVersion CoreGetVersion = NULL;
static int initialWidth = 0;
static int initialHeight = 0;
static bool initialSizeSet = false;
void plugin_init(void)
{
CoreGetVersion = (ptr_PluginGetVersion)DLSYM(CoreLibHandle, "PluginGetVersion");
@@ -272,13 +268,6 @@ extern "C"
return M64ERR_SUCCESS;
}
EXPORT void CALL SetInitialVideoSize(int width, int height)
{
initialWidth = width;
initialHeight = height;
initialSizeSet = true;
}
}
#endif // CONFIG_GUI
@@ -337,12 +326,6 @@ EXPORT int CALL RomOpen(void)
vk_ssreadbacks = 0; // can cause desyncs
}
if (initialSizeSet)
{
window_width = initialWidth;
window_height = initialHeight;
}
plugin_init();
if (vk_init())
@@ -364,8 +347,6 @@ EXPORT void CALL RomClosed(void)
{
vk_destroy();
}
initialSizeSet = false;
}
EXPORT void CALL ShowCFB(void)
-11
View File
@@ -511,17 +511,6 @@ CORE_EXPORT bool CorePluginsOpenROMConfig(CorePluginType type, void* parent, std
return open_plugin_config(type, parent, true, file);
}
CORE_EXPORT void CoreSetInitialVideoSize(int width, int height)
{
m64p::PluginApi& plugin = get_plugin(CorePluginType::Gfx);
if (!plugin.IsHooked() || plugin.SetInitialVideoSize == nullptr)
{
return;
}
plugin.SetInitialVideoSize(width, height);
}
CORE_EXPORT bool CoreAttachPlugins(void)
{
std::string error;
-3
View File
@@ -62,9 +62,6 @@ bool CorePluginsHasROMConfig(CorePluginType type);
// used plugin of given type
bool CorePluginsOpenROMConfig(CorePluginType type, void* parent = nullptr, std::filesystem::path file = "");
// sets initial video size for the video plugin
void CoreSetInitialVideoSize(int width, int height);
// attaches all used plugins
bool CoreAttachPlugins(void);
-2
View File
@@ -29,7 +29,6 @@ bool PluginApi::Hook(m64p_dynlib_handle handle)
HOOK_FUNC(handle, Plugin, Shutdown);
HOOK_FUNC_OPT(handle, Plugin, Config);
HOOK_FUNC_OPT(handle, Plugin, ConfigWithRomConfig);
HOOK_FUNC_OPT(handle, , SetInitialVideoSize);
HOOK_FUNC(handle, Plugin, GetVersion);
this->handle = handle;
@@ -43,7 +42,6 @@ bool PluginApi::Unhook(void)
UNHOOK_FUNC(Plugin, Shutdown);
UNHOOK_FUNC(Plugin, Config);
UNHOOK_FUNC(Plugin, ConfigWithRomConfig);
UNHOOK_FUNC(Plugin, SetInitialVideoSize);
UNHOOK_FUNC(Plugin, GetVersion);
this->handle = nullptr;
-1
View File
@@ -37,7 +37,6 @@ class PluginApi
ptr_PluginShutdown Shutdown;
ptr_PluginConfig Config;
ptr_PluginConfigWithRomConfig ConfigWithRomConfig;
ptr_SetInitialVideoSize SetInitialVideoSize;
ptr_PluginGetVersion GetVersion;
private:
-11
View File
@@ -39,17 +39,6 @@ typedef m64p_error (*ptr_PluginConfigWithRomConfig)(void*, int, CoreRomHeader*,
EXPORT m64p_error CALL PluginConfigWithRomConfig(void*, int, CoreRomHeader*, CoreRomSettings*);
#endif
/* SetInitialVideoSize(int width, int height)
*
* This optional function allows a front-end to set the initial video
* size for a video plugin.
*
*/
typedef void (*ptr_SetInitialVideoSize)(int width, int height);
#if defined(M64P_PLUGIN_PROTOTYPES) || defined(M64P_CORE_PROTOTYPES)
EXPORT void CALL SetInitialVideoSize(int width, int height);
#endif
#endif // __cplusplus
#ifdef __cplusplus
-8
View File
@@ -10,7 +10,6 @@
#include "EmulationThread.hpp"
#include <RMG-Core/Emulation.hpp>
#include <RMG-Core/Plugins.hpp>
#include <RMG-Core/Error.hpp>
#ifdef _WIN32
@@ -55,19 +54,12 @@ void EmulationThread::SetNetplay(QString address, int port, int player)
this->player = player;
}
void EmulationThread::SetVideoSize(int width, int height)
{
this->videoSize = QSize(width, height);
}
void EmulationThread::run(void)
{
this->inhibitScreensaver();
emit this->on_Emulation_Started();
CoreSetInitialVideoSize(this->videoSize.width(), this->videoSize.height());
bool ret = CoreStartEmulation(this->rom.toStdU32String(), this->disk.toStdU32String(),
this->address.toStdString(), this->port, this->player);
-3
View File
@@ -16,7 +16,6 @@
#include <QSurfaceFormat>
#include <QString>
#include <QThread>
#include <QSize>
enum class VidExtRenderMode
{
@@ -38,7 +37,6 @@ class EmulationThread : public QThread
void SetRomFile(QString);
void SetDiskFile(QString);
void SetNetplay(QString address, int port, int player);
void SetVideoSize(int width, int height);
void run(void) override;
@@ -48,7 +46,6 @@ class EmulationThread : public QThread
QString address;
int port = -1;
int player = -1;
QSize videoSize;
#ifndef _WIN32
uint32_t dbusCookieId = 0;
QDBusInterface* dbusInterface = nullptr;
+76 -7
View File
@@ -601,12 +601,15 @@ void MainWindow::updateUI(bool inEmulation, bool isPaused)
// launch RMG with a ROM on the commandline or drag & drop
this->ui_Widgets->setCurrentWidget(this->ui_Widget_Dummy);
}
this->storeGeometry();
}
else if (!this->ui_NoSwitchToRomBrowser)
{
this->setWindowTitle(this->ui_WindowTitle);
this->ui_Widgets->setCurrentWidget(this->ui_Widget_RomBrowser);
this->ui_StatusBar_RenderModeLabel->clear();
this->loadGeometry();
}
else
{
@@ -619,9 +622,69 @@ void MainWindow::updateUI(bool inEmulation, bool isPaused)
void MainWindow::storeGeometry(void)
{
std::string geometryStr = this->saveGeometry().toBase64().toStdString();
if (this->ui_Geometry_Saved)
{
return;
}
this->ui_Geometry = this->saveGeometry();
this->ui_Geometry_Maximized = this->isMaximized();
this->ui_Geometry_Saved = true;
std::string geometryStr = this->ui_Geometry.toBase64().toStdString();
CoreSettingsSetValue(SettingsID::RomBrowser_Geometry, geometryStr);
CoreSettingsSetValue(SettingsID::RomBrowser_Maximized, this->isMaximized());
CoreSettingsSetValue(SettingsID::RomBrowser_Maximized, this->ui_Geometry_Maximized);
}
void MainWindow::loadGeometry(void)
{
if (!this->ui_Geometry_Saved)
{
return;
}
if (this->ui_Geometry_Maximized)
{
this->showMaximized();
}
else
{
this->restoreGeometry(this->ui_Geometry);
}
if (this->isFullScreen())
{
this->showNormal();
}
if (this->ui_ShowMenubar && this->menuBar()->isHidden())
{
this->menuBar()->show();
}
else if (!this->ui_ShowMenubar && !this->menuBar()->isHidden())
{
this->menuBar()->hide();
}
if (this->ui_ShowToolbar && this->toolBar->isHidden())
{
this->toolBar->show();
}
else if (!this->ui_ShowToolbar && !this->toolBar->isHidden())
{
this->toolBar->hide();
}
if (this->ui_ShowStatusbar && this->statusBar()->isHidden())
{
this->statusBar()->show();
}
else if (!this->ui_ShowStatusbar && !this->statusBar()->isHidden())
{
this->statusBar()->hide();
}
this->ui_Geometry_Saved = false;
}
void MainWindow::initializeEmulationThread(void)
@@ -738,8 +801,6 @@ void MainWindow::launchEmulationThread(QString cartRom, QString diskRom, bool re
this->ui_ShowStatusbar = CoreSettingsGetBoolValue(SettingsID::GUI_StatusBar);
}
this->emulationThread->SetVideoSize(this->ui_Widgets->width() * this->devicePixelRatio(),
this->ui_Widgets->height() * this->devicePixelRatio());
this->emulationThread->SetRomFile(cartRom);
this->emulationThread->SetDiskFile(diskRom);
this->emulationThread->start();
@@ -2304,7 +2365,8 @@ void MainWindow::on_NetplaySessionDialog_rejected()
void MainWindow::on_VidExt_Init(VidExtRenderMode renderMode)
{
this->ui_VidExtRenderMode = renderMode;
this->ui_VidExtRenderMode = renderMode;
this->ui_VidExtForceSetMode = true;
if (CoreSettingsGetBoolValue(SettingsID::GUI_OpenGLES))
{
@@ -2491,9 +2553,12 @@ void MainWindow::on_VidExt_ResizeWindow(int width, int height)
height += this->statusBar()->height();
}
if (this->size() == QSize(width, height))
if (!this->ui_VidExtForceSetMode)
{
return;
if (this->size() == QSize(width, height))
{
return;
}
}
if (this->isMaximized() || this->isMinimized())
@@ -2502,6 +2567,10 @@ void MainWindow::on_VidExt_ResizeWindow(int width, int height)
}
this->resize(width, height);
// we've force set the size once,
// we can safely disable it now
this->ui_VidExtForceSetMode = false;
}
void MainWindow::on_VidExt_ToggleFS(bool fullscreen)
+6
View File
@@ -63,9 +63,14 @@ class MainWindow : public QMainWindow, private Ui::MainWindow
QLabel *ui_StatusBar_Label = nullptr;
QLabel *ui_StatusBar_RenderModeLabel = nullptr;
QByteArray ui_Geometry;
bool ui_Geometry_Maximized = false;
bool ui_Geometry_Saved = false;
bool ui_HideCursorInEmulation = false;
bool ui_HideCursorInFullscreenEmulation = false;
bool ui_NoSwitchToRomBrowser = false;
bool ui_VidExtForceSetMode = false;
bool ui_LaunchInFullscreen = false;
bool ui_QuitAfterEmulation = false;
bool ui_RefreshRomListAfterEmulation = false;
@@ -131,6 +136,7 @@ class MainWindow : public QMainWindow, private Ui::MainWindow
void updateUI(bool inEmulation, bool isPaused);
void storeGeometry(void);
void loadGeometry(void);
void initializeEmulationThread(void);
void connectEmulationThreadSignals(void);
@@ -69,11 +69,6 @@ void OGLWidget::resizeEvent(QResizeEvent *event)
return;
}
if (event->oldSize() == event->size())
{
return;
}
if (this->timerId != 0)
{
this->killTimer(this->timerId);
@@ -42,11 +42,6 @@ void VKWidget::resizeEvent(QResizeEvent *event)
return;
}
if (event->oldSize() == event->size())
{
return;
}
if (this->timerId != 0)
{
this->killTimer(this->timerId);
+1 -1
View File
@@ -1 +1 @@
v0.8.8
v0.8.9