diff --git a/ui/qt/main.cpp b/ui/qt/main.cpp index ad8f68668a..df8991b15e 100644 --- a/ui/qt/main.cpp +++ b/ui/qt/main.cpp @@ -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"); diff --git a/ui/qt/main_window.cpp b/ui/qt/main_window.cpp index 5614166f18..c3d6d5920c 100644 --- a/ui/qt/main_window.cpp +++ b/ui/qt/main_window.cpp @@ -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; diff --git a/ui/qt/main_window.h b/ui/qt/main_window.h index 696239cd6e..c3cde88823 100644 --- a/ui/qt/main_window.h +++ b/ui/qt/main_window.h @@ -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); diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp index a33df3d6b1..94ab45947c 100644 --- a/ui/qt/main_window_slots.cpp +++ b/ui/qt/main_window_slots.cpp @@ -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