Correctly update the pane layout whenever the preferences are changed, you no
authorEvan Huus <eapache@gmail.com>
Tue, 3 Sep 2013 13:29:09 +0000 (13:29 -0000)
committerEvan Huus <eapache@gmail.com>
Tue, 3 Sep 2013 13:29:09 +0000 (13:29 -0000)
longer need to restart for that to take effect. Hopefully I got all the slot
ordering right.

svn path=/trunk/; revision=51720

ui/qt/main.cpp
ui/qt/main_window.cpp
ui/qt/main_window.h
ui/qt/main_window_slots.cpp

index ad8f68668a93cd19834f5e0955bb9a285659e622..df8991b15e4b8688ffcebf2c8f28da98a6dad1de 100644 (file)
@@ -917,7 +917,6 @@ int main(int argc, char *argv[])
 #endif /* HAVE_LIBPCAP */
 
 //    w->setEnabled(true);
-    main_w->layoutPanes();
     wsApp->allSystemsGo();
     g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_INFO, "Wireshark is up and ready to go");
 
index 5614166f18daa1db77197efc766ea5b99eb71601..c3d6d5920cd8bb9cae2431a23bb23f4d3233b52c 100644 (file)
@@ -105,6 +105,8 @@ MainWindow::MainWindow(QWidget *parent) :
     setFeaturesEnabled(false);
     connect(wsApp, SIGNAL(appInitialized()), this, SLOT(setFeaturesEnabled()));
 
+    connect(wsApp, SIGNAL(preferencesChanged()), this, SLOT(layoutPanes()));
+
     connect(wsApp, SIGNAL(updateRecentItemStatus(const QString &, qint64, bool)), this, SLOT(updateRecentFiles()));
     updateRecentFiles();
 
@@ -286,83 +288,6 @@ MainWindow::~MainWindow()
     delete main_ui_;
 }
 
-void MainWindow::layoutPanes()
-{
-    QSplitter *parents[3];
-
-    if (master_split_ != NULL) {
-        main_ui_->mainStack->removeWidget(master_split_);
-    }
-    delete master_split_;
-    delete extra_split_;
-
-    master_split_ = new QSplitter(main_ui_->mainStack);
-    master_split_->setObjectName(QString::fromUtf8("splitterMaster"));
-
-    extra_split_ = new QSplitter(main_ui_->mainStack);
-    extra_split_->setObjectName(QString::fromUtf8("splitterExtra"));
-
-    switch(prefs.gui_layout_type) {
-    case(layout_type_5):
-        master_split_->setOrientation(Qt::Vertical);
-        parents[0] = master_split_;
-        parents[1] = master_split_;
-        parents[2] = master_split_;
-        break;
-    case(layout_type_2):
-        master_split_->setOrientation(Qt::Vertical);
-        extra_split_->setOrientation(Qt::Horizontal);
-        parents[0] = master_split_;
-        parents[1] = extra_split_;
-        parents[2] = extra_split_;
-        break;
-    case(layout_type_1):
-        master_split_->setOrientation(Qt::Vertical);
-        extra_split_->setOrientation(Qt::Horizontal);
-        parents[0] = extra_split_;
-        parents[1] = extra_split_;
-        parents[2] = master_split_;
-        break;
-    case(layout_type_4):
-        master_split_->setOrientation(Qt::Horizontal);
-        extra_split_->setOrientation(Qt::Vertical);
-        parents[0] = master_split_;
-        parents[1] = extra_split_;
-        parents[2] = extra_split_;
-        break;
-    case(layout_type_3):
-        master_split_->setOrientation(Qt::Horizontal);
-        extra_split_->setOrientation(Qt::Vertical);
-        parents[0] = extra_split_;
-        parents[1] = extra_split_;
-        parents[2] = master_split_;
-        break;
-    case(layout_type_6):
-        master_split_->setOrientation(Qt::Horizontal);
-        parents[0] = master_split_;
-        parents[1] = master_split_;
-        parents[2] = master_split_;
-        break;
-    default:
-        g_assert_not_reached();
-    }
-
-    if (parents[0] == extra_split_) {
-        master_split_->addWidget(extra_split_);
-    }
-
-    parents[0]->addWidget(packet_list_);
-
-    if (parents[2] == extra_split_) {
-        master_split_->addWidget(extra_split_);
-    }
-
-    parents[1]->addWidget(proto_tree_);
-    parents[2]->addWidget(byte_view_tab_);
-
-    main_ui_->mainStack->addWidget(master_split_);
-}
-
 void MainWindow::setPipeInputHandler(gint source, gpointer user_data, int *child_process, pipe_input_cb_t input_cb)
 {
     pipe_source_        = source;
index 696239cd6ebaa6b816273dae2b7f73a5097c42bf..c3cde88823f011f4f496c65390907f92a0ff03bb 100644 (file)
@@ -70,7 +70,6 @@ public:
     explicit MainWindow(QWidget *parent = 0);
     ~MainWindow();
     void setPipeInputHandler(gint source, gpointer user_data, int *child_process, pipe_input_cb_t input_cb);
-    void layoutPanes();
 
 protected:
     bool eventFilter(QObject *obj, QEvent *event);
@@ -153,6 +152,7 @@ public slots:
     void openCaptureFile(QString& cf_path = *new QString(), QString &display_filter = *new QString());
     void filterPackets(QString& new_filter = *new QString(), bool force = false);
     void updateForUnsavedChanges();
+    void layoutPanes();
 
 #ifdef HAVE_LIBPCAP
     void captureCapturePrepared(capture_session *cap_session);
index a33df3d6b1d4c489eaee9d312766a3732c7e40ca..94ab45947c88d0b9ba570df738314e79cce57a4f 100644 (file)
@@ -205,6 +205,90 @@ void MainWindow::filterPackets(QString& new_filter, bool force)
     }
 }
 
+void MainWindow::layoutPanes()
+{
+    QSplitter *parents[3];
+    QWidget   *oldMaster = master_split_;
+    QWidget   *current = main_ui_->mainStack->currentWidget();
+
+    master_split_ = new QSplitter(main_ui_->mainStack);
+    master_split_->setObjectName(QString::fromUtf8("splitterMaster"));
+
+    extra_split_ = new QSplitter(master_split_);
+    extra_split_->setObjectName(QString::fromUtf8("splitterExtra"));
+
+    switch(prefs.gui_layout_type) {
+    case(layout_type_5):
+        master_split_->setOrientation(Qt::Vertical);
+        parents[0] = master_split_;
+        parents[1] = master_split_;
+        parents[2] = master_split_;
+        break;
+    case(layout_type_2):
+        master_split_->setOrientation(Qt::Vertical);
+        extra_split_->setOrientation(Qt::Horizontal);
+        parents[0] = master_split_;
+        parents[1] = extra_split_;
+        parents[2] = extra_split_;
+        break;
+    case(layout_type_1):
+        master_split_->setOrientation(Qt::Vertical);
+        extra_split_->setOrientation(Qt::Horizontal);
+        parents[0] = extra_split_;
+        parents[1] = extra_split_;
+        parents[2] = master_split_;
+        break;
+    case(layout_type_4):
+        master_split_->setOrientation(Qt::Horizontal);
+        extra_split_->setOrientation(Qt::Vertical);
+        parents[0] = master_split_;
+        parents[1] = extra_split_;
+        parents[2] = extra_split_;
+        break;
+    case(layout_type_3):
+        master_split_->setOrientation(Qt::Horizontal);
+        extra_split_->setOrientation(Qt::Vertical);
+        parents[0] = extra_split_;
+        parents[1] = extra_split_;
+        parents[2] = master_split_;
+        break;
+    case(layout_type_6):
+        master_split_->setOrientation(Qt::Horizontal);
+        parents[0] = master_split_;
+        parents[1] = master_split_;
+        parents[2] = master_split_;
+        break;
+    default:
+        g_assert_not_reached();
+    }
+
+    if (parents[0] == extra_split_) {
+        master_split_->addWidget(extra_split_);
+    }
+
+    parents[0]->addWidget(packet_list_);
+
+    if (parents[2] == extra_split_) {
+        master_split_->addWidget(extra_split_);
+    }
+
+    parents[1]->addWidget(proto_tree_);
+    parents[2]->addWidget(byte_view_tab_);
+
+    // We must do this near the end to avoid reparenting signals going to
+    // already-deleted widgets.
+    if (oldMaster != NULL) {
+        main_ui_->mainStack->removeWidget(oldMaster);
+        delete oldMaster;
+    }
+
+    main_ui_->mainStack->addWidget(master_split_);
+
+    if (current == oldMaster) {
+        main_ui_->mainStack->setCurrentWidget(master_split_);
+    }
+}
+
 // Capture callbacks
 
 #ifdef HAVE_LIBPCAP