Switch to side-by-side view

--- a/dirbrowser/cdbrowser.h
+++ b/dirbrowser/cdbrowser.h
@@ -84,9 +84,9 @@
         QPoint scrollpos{0,0};
     };
 
-    // This is called when a new tab is created to browse a
-    // container. We have no server link yet.
-    void browseIn(QString UDN, std::vector<CtPathElt> path);
+    // Browse specified container in newly created tab.
+    // We have no server link yet.
+    void browseInNewTab(QString UDN, std::vector<CtPathElt> path);
 
     std::string getServerUDN();
     const std::vector<CtPathElt>& getcurpath() {
@@ -110,10 +110,13 @@
     virtual void back(QAction *);
     virtual void rreaperDone(int);
     virtual void onContentsSizeChanged(const QSize&);
+#ifdef USING_WEBENGINE
+    virtual void onPopupJsDone(const QVariant&);
+    virtual void onJSRan(const QVariant&);
+#else
     virtual void mouseReleaseEvent(QMouseEvent *event);
-
-    virtual void onPopupJsDone(const QVariant&);
-    virtual void onLoadFinished(bool);
+    void keyPressEvent(QKeyEvent *e);
+#endif
     
  signals:
     void sig_tracks_to_playlist(const MetaDataList&);
@@ -125,9 +128,6 @@
                                std::vector<CDBrowser::CtPathElt>);
     void sig_rand_stop();
     void sig_sort_order();
-
- protected:
-    void keyPressEvent(QKeyEvent *e);
 
 private:
     virtual void processOnLinkClicked(const QUrl &);
@@ -186,7 +186,7 @@
     // Threaded objects to perform directory reads and recursive walks
     CDBrowseQO *m_reader;
     RecursiveReaper    *m_reaper;
-    void deleteReaders();
+    void deleteReaders(const QString& from);
 
     bool newCds(int cdsidx);
 
@@ -216,6 +216,10 @@
     bool m_popupispl{false};
     QPoint m_popupos;
     int m_popupmode; // now, next, at end
+#ifdef USING_WEBENGINE
+    // No use trying to insert stuff before the initial page insert ran
+    bool m_somethingran{false};
+#endif
 
     // Remember last click kind for detecting midclick
     Qt::MouseButton m_lastbutton;