| @@ -401,6 +401,8 @@ protected: | |||||
| { | { | ||||
| if (show) | if (show) | ||||
| createUiIfNeeded(); | createUiIfNeeded(); | ||||
| else if (fUiPtr != nullptr) | |||||
| fUiGeometry = fUiPtr->saveGeometry(); | |||||
| if (fUiPtr != nullptr) | if (fUiPtr != nullptr) | ||||
| fUiPtr->carla_show(show); | fUiPtr->carla_show(show); | ||||
| @@ -463,6 +465,7 @@ private: | |||||
| #if DISTRHO_PLUGIN_HAS_UI | #if DISTRHO_PLUGIN_HAS_UI | ||||
| // UI | // UI | ||||
| ScopedPointer<UICarla> fUiPtr; | ScopedPointer<UICarla> fUiPtr; | ||||
| QByteArray fUiGeometry; | |||||
| void createUiIfNeeded() | void createUiIfNeeded() | ||||
| { | { | ||||
| @@ -470,6 +473,9 @@ private: | |||||
| { | { | ||||
| d_lastUiSampleRate = getSampleRate(); | d_lastUiSampleRate = getSampleRate(); | ||||
| fUiPtr = new UICarla(getHostHandle(), &fPlugin); | fUiPtr = new UICarla(getHostHandle(), &fPlugin); | ||||
| if (! fUiGeometry.isNull()) | |||||
| fUiPtr->restoreGeometry(fUiGeometry); | |||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -30,7 +30,7 @@ CARLA_BACKEND_START_NAMESPACE | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // CarlaPluginGUI | // CarlaPluginGUI | ||||
| CarlaPluginGui::CarlaPluginGui(CarlaEngine* const engine, Callback* const callback, const Options& options) | |||||
| CarlaPluginGui::CarlaPluginGui(CarlaEngine* const engine, Callback* const callback, const Options& options, const QByteArray& lastGeometry) | |||||
| : QMainWindow(nullptr), | : QMainWindow(nullptr), | ||||
| kCallback(callback), | kCallback(callback), | ||||
| fContainer(nullptr), | fContainer(nullptr), | ||||
| @@ -61,6 +61,9 @@ CarlaPluginGui::CarlaPluginGui(CarlaEngine* const engine, Callback* const callba | |||||
| if (settings.value("Engine/UIsAlwaysOnTop", true).toBool()) | if (settings.value("Engine/UIsAlwaysOnTop", true).toBool()) | ||||
| setWindowFlags(windowFlags()|Qt::WindowStaysOnTopHint); | setWindowFlags(windowFlags()|Qt::WindowStaysOnTopHint); | ||||
| if (! lastGeometry.isNull()) | |||||
| restoreGeometry(lastGeometry); | |||||
| } | } | ||||
| } | } | ||||
| @@ -47,7 +47,7 @@ public: | |||||
| bool resizable; | bool resizable; | ||||
| }; | }; | ||||
| CarlaPluginGui(CarlaEngine* const engine, Callback* const callback, const Options& options); | |||||
| CarlaPluginGui(CarlaEngine* const engine, Callback* const callback, const Options& options, const QByteArray& lastGeometry); | |||||
| ~CarlaPluginGui(); | ~CarlaPluginGui(); | ||||
| void setSize(const int width, const int height); | void setSize(const int width, const int height); | ||||
| @@ -394,6 +394,7 @@ struct CarlaPluginProtectedData { | |||||
| CarlaEngine* const engine; | CarlaEngine* const engine; | ||||
| CarlaEngineClient* client; | CarlaEngineClient* client; | ||||
| CarlaPluginGui* gui; | CarlaPluginGui* gui; | ||||
| QByteArray guiGeometry; | |||||
| bool active; | bool active; | ||||
| bool needsReset; | bool needsReset; | ||||
| @@ -1183,7 +1183,7 @@ public: | |||||
| guiOptions.parented = (fUi.type == PLUGIN_UI_PARENT); | guiOptions.parented = (fUi.type == PLUGIN_UI_PARENT); | ||||
| guiOptions.resizable = isUiResizable(); | guiOptions.resizable = isUiResizable(); | ||||
| kData->gui = new CarlaPluginGui(kData->engine, this, guiOptions); | |||||
| kData->gui = new CarlaPluginGui(kData->engine, this, guiOptions, kData->guiGeometry); | |||||
| } | } | ||||
| if (fUi.type == PLUGIN_UI_PARENT) | if (fUi.type == PLUGIN_UI_PARENT) | ||||
| @@ -1206,6 +1206,7 @@ public: | |||||
| fUi.handle = nullptr; | fUi.handle = nullptr; | ||||
| fUi.widget = nullptr; | fUi.widget = nullptr; | ||||
| kData->guiGeometry = kData->gui->saveGeometry(); | |||||
| kData->gui->close(); | kData->gui->close(); | ||||
| delete kData->gui; | delete kData->gui; | ||||
| kData->gui = nullptr; | kData->gui = nullptr; | ||||
| @@ -1231,6 +1232,7 @@ public: | |||||
| if (kData->gui != nullptr) | if (kData->gui != nullptr) | ||||
| { | { | ||||
| kData->guiGeometry = kData->gui->saveGeometry(); | |||||
| kData->gui->close(); | kData->gui->close(); | ||||
| delete kData->gui; | delete kData->gui; | ||||
| kData->gui = nullptr; | kData->gui = nullptr; | ||||
| @@ -405,7 +405,7 @@ public: | |||||
| guiOptions.parented = true; | guiOptions.parented = true; | ||||
| guiOptions.resizable = false; | guiOptions.resizable = false; | ||||
| kData->gui = new CarlaPluginGui(kData->engine, this, guiOptions); | |||||
| kData->gui = new CarlaPluginGui(kData->engine, this, guiOptions, kData->guiGeometry); | |||||
| } | } | ||||
| int32_t value = 0; | int32_t value = 0; | ||||
| @@ -440,6 +440,7 @@ public: | |||||
| { | { | ||||
| if (kData->gui != nullptr) | if (kData->gui != nullptr) | ||||
| { | { | ||||
| kData->guiGeometry = kData->gui->saveGeometry(); | |||||
| kData->gui->close(); | kData->gui->close(); | ||||
| delete kData->gui; | delete kData->gui; | ||||
| kData->gui = nullptr; | kData->gui = nullptr; | ||||
| @@ -461,6 +462,7 @@ public: | |||||
| fGui.lastWidth = kData->gui->width(); | fGui.lastWidth = kData->gui->width(); | ||||
| fGui.lastHeight = kData->gui->height(); | fGui.lastHeight = kData->gui->height(); | ||||
| kData->guiGeometry = kData->gui->saveGeometry(); | |||||
| kData->gui->close(); | kData->gui->close(); | ||||
| delete kData->gui; | delete kData->gui; | ||||
| kData->gui = nullptr; | kData->gui = nullptr; | ||||