Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-58302

QWebEngineView & QMacCocoaViewContainer crash

    XMLWordPrintable

Details

    • Bug
    • Resolution: Incomplete
    • P2: Important
    • None
    • 5.7.1, 5.8.0
    • None
    • Mac OSX 10.12 + Xcode 8.2.1 (8C1002)
    • macOS

    Description

      When QWebEngineView and QMacCococaViewContainer are used in the same layout, the application crashes with EXC_BAD_ACCESS in CrBrowserMain (1).

      #include <QtCore>
      #include <QtWidgets>
      #include <QMacCocoaViewContainer>
      #include <QWebEngineView>
      
      int main(int argc, char * argv[])
      {
          QApplication app(argc, argv);
          
          QMainWindow mainWindow;
          QWebEngineView *browser = new QWebEngineView;
          QMacCocoaViewContainer *container = new QMacCocoaViewContainer(0);
            
          QSplitter *splitter = new QSplitter;
          splitter->addWidget(browser);
          splitter->addWidget(container);
          mainWindow.setCentralWidget(splitter);
          mainWindow.show();
          
          return app.exec();
      }
      
      

      On Qt 5.8 the following code crashes when you move the splitter handle:

      #include <QtCore>
      #include <QtWidgets>
      #include <QMacCocoaViewContainer>
      #include <QWebEngineView>
      
      #include <AppKit/AppKit.h>
      
      class CocoaViewContainer : public QMacCocoaViewContainer
      {
      public:
          CocoaViewContainer(QWidget *parent = 0);
      };	// CocoaViewContainer
      
      CocoaViewContainer::CocoaViewContainer(QWidget *parent)
      : QMacCocoaViewContainer(0, parent)
      {
          setAttribute(Qt::WA_DontCreateNativeAncestors);
          
          NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
          
          NSView *videoView = [[NSView alloc] init];
          setCocoaView(videoView);
          
          [videoView release];
          [pool release];
      }
      
      
      int main(int argc, char * argv[])
      {
          qputenv("QT_MAC_WANTS_LAYER", "1");
          
          QApplication app(argc, argv);
          QCoreApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
         
          QMainWindow mainWindow;
          
          QWebEngineView *browser = new QWebEngineView;
          //browser->setAttribute(Qt::WA_DontCreateNativeAncestors);
          CocoaViewContainer *container = new CocoaViewContainer;
          
          QSplitter *splitter = new QSplitter(Qt::Vertical);    
          splitter->addWidget(container);
          splitter->addWidget(browser);
          splitter->setSizes({0, 100});
          mainWindow.setCentralWidget(splitter);
          mainWindow.show();
          
          return app.exec();
      }
      

      Attachments

        1. testcocoaview2.zip
          23 kB
          Pugach Yaroslav
        2. testcocoaview3.zip
          1 kB
          Pugach Yaroslav

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              qt_webengine_team Qt WebEngine Team
              mentalmushroom Pugach Yaroslav
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes