Ticket #1086: suil-0.8.3svn5726-qt5-4.patch

File suil-0.8.3svn5726-qt5-4.patch, 3.3 KB (added by Rui Nuno Capela, 6 years ago)
  • src/gtk2_in_qt5.cpp

    - Add basic support for Qt5 GUI hosts with two new wrappers:
      libsuil_gtk2_in_qt5 and libsuil_x11_in_qt5. (FIX)
    
      Signed-off-by: rncbc aka. Rui Nuno Capela <rncbc@rncbc.org>
    
    
     
    2020
    2121#include <QVBoxLayout>
    2222
     23#include <QApplication>
     24#include <QTime>
     25
    2326#undef signals
    2427
    2528#include <gtk/gtk.h>
     
    6568        gtk_widget_destroy(impl->plug);
    6669    }
    6770
     71    // HACK: Wait a bit (200ms) before continue...
     72    QTime t; t.start();
     73    while (t.elapsed() < 200) {
     74        QApplication::processEvents();
     75    }
     76
    6877    if (impl->host_widget) {
    6978        delete impl->host_widget;
    7079    }
     
    7685wrapper_wrap(SuilWrapper*  wrapper,
    7786             SuilInstance* instance)
    7887{
    79     Qt::WindowFlags wflags = Qt::Window
    80         | Qt::CustomizeWindowHint
    81         | Qt::WindowTitleHint
    82         | Qt::WindowSystemMenuHint
    83         | Qt::WindowMinMaxButtonsHint
    84         | Qt::WindowCloseButtonHint;
    85 
    8688    SuilGtk2InQt5Wrapper* const impl   = (SuilGtk2InQt5Wrapper*)wrapper->impl;
    87     QWidget*                    parent = static_cast<QWidget*>(impl->parent);
    88     QWidget* const              wrap   = new QWidget(parent, wflags);
    89     GtkWidget* const            plug   = gtk_plug_new(0);
     89    QWidget* const              wrap   = new QWidget(NULL, Qt::Window);
     90    GtkWidget* const            plug   = gtk_plug_new(0);
    9091    GtkWidget* const            widget = (GtkWidget*)instance->ui_widget;
    9192
    9293    gtk_container_add(GTK_CONTAINER(plug), widget);
  • src/instance.c

     
    2424
    2525#define GTK2_UI_URI  LV2_UI__GtkUI
    2626#define QT4_UI_URI   LV2_UI__Qt4UI
    27 #define QT5_UI_URI   LV2_UI_PREFIX "Qt5UI"
     27#define QT5_UI_URI   LV2_UI__Qt5UI
    2828#define X11_UI_URI   LV2_UI__X11UI
    2929#define WIN_UI_URI   LV2_UI_PREFIX "WindowsUI"
    3030#define COCOA_UI_URI LV2_UI__CocoaUI
  • src/x11_in_qt5.cpp

     
    1818#include <QWidget>
    1919
    2020#include <QTimerEvent>
     21#include <QCloseEvent>
    2122
    2223#undef signals
    2324
     
    6566        QWidget::timerEvent(event);
    6667    }
    6768
     69    void closeEvent(QCloseEvent* event) {
     70        if (_ui_timer && _idle_iface) {
     71            this->killTimer(_ui_timer);
     72            _ui_timer = 0;
     73        }
     74        QWidget::closeEvent(event);
     75    }
     76
    6877private:
    6978    SuilInstance*               _instance;
    7079    const LV2UI_Idle_Interface* _idle_iface;
     
    7685wrapper_free(SuilWrapper* wrapper)
    7786{
    7887    SuilX11InQt5Wrapper* impl = (SuilX11InQt5Wrapper*)wrapper->impl;
    79 
     88/*
    8089    if (impl->parent) {
    8190        delete impl->parent;
    8291    }
    83 /*
     92*/
    8493    if (impl->host_widget) {
    8594        delete impl->host_widget;
    8695    }
    87 */
     96
    8897    free(impl);
    8998}
    9099
     
    134143    wrapper->wrap = wrapper_wrap;
    135144    wrapper->free = wrapper_free;
    136145
    137     Qt::WindowFlags wflags = Qt::Window
    138         | Qt::CustomizeWindowHint
    139         | Qt::WindowTitleHint
    140         | Qt::WindowSystemMenuHint
    141         | Qt::WindowMinMaxButtonsHint
    142         | Qt::WindowCloseButtonHint;
     146    QWidget* const ew = new SuilQX11Widget(NULL, Qt::Window);
    143147
    144     QWidget* const ew = new SuilQX11Widget(NULL, wflags);
    145 
    146148    impl->parent = ew;
    147149
    148150    wrapper->impl             = impl;