diff --git a/epan/prefs-int.h b/epan/prefs-int.h index deddad2c3f..edfadfce0e 100644 --- a/epan/prefs-int.h +++ b/epan/prefs-int.h @@ -148,14 +148,15 @@ gui_type_t prefs_get_gui_type(pref_t *pref); WS_DLL_PUBLIC guint32 prefs_get_max_value(pref_t *pref); -/* Bitmask of flags for how a preference could affect changes in Wireshark */ +/* Bitmask of flags for the effect of a preference in Wireshark */ #define PREF_EFFECT_DISSECTION (1u << 0) #define PREF_EFFECT_CAPTURE (1u << 1) #define PREF_EFFECT_GUI (1u << 2) #define PREF_EFFECT_FONT (1u << 3) +#define PREF_EFFECT_GUI_LAYOUT (1u << 4) #define PREF_EFFECT_CUSTOM (1u << 31) -/** Fetch flags that show preference effect +/** Fetch flags that show the effect of the preference * * @param pref A preference. * @@ -165,11 +166,11 @@ WS_DLL_PUBLIC guint32 prefs_get_max_value(pref_t *pref); WS_DLL_PUBLIC unsigned int prefs_get_effect_flags(pref_t *pref); -/** Set flags for preference effect +/** Set flags for the effect of the preference * The intention is to distinguish preferences that affect * dissection from those that don't. A bitmask was added to - * provide great flexibility in the types of things that a - * preference could affect. + * provide greater flexibility in the types of effects + * preferences can have. * * @param pref A preference. * @param flags Bitmask of flags to apply to preference. Note that flags diff --git a/epan/prefs.c b/epan/prefs.c index f0edfcbb24..2ee80afe6a 100644 --- a/epan/prefs.c +++ b/epan/prefs.c @@ -2984,7 +2984,7 @@ prefs_register_modules(void) module_t *printing, *capture_module, *console_module, *gui_layout_module, *gui_font_module; module_t *extcap_module; - + unsigned int layout_gui_flags; struct pref_custom_cbs custom_cbs; if (protocols_module != NULL) { @@ -3306,27 +3306,35 @@ prefs_register_modules(void) /* User Interface : Layout */ gui_layout_module = prefs_register_subtree(gui_module, "Layout", "Layout", gui_layout_callback); + /* Adjust the preference effects of layout GUI for better handling of preferences at Wireshark (GUI) level */ + layout_gui_flags = prefs_get_module_effect_flags(gui_layout_module); + layout_gui_flags |= PREF_EFFECT_GUI_LAYOUT; + layout_gui_flags &= (~PREF_EFFECT_DISSECTION); prefs_register_uint_preference(gui_layout_module, "layout_type", "Layout type", "Layout type (1-6)", 10, (guint*)(void*)(&prefs.gui_layout_type)); + prefs_set_effect_flags_by_name(gui_layout_module, "layout_type", layout_gui_flags); prefs_register_enum_preference(gui_layout_module, "layout_content_1", "Layout content of the pane 1", "Layout content of the pane 1", (gint*)(void*)(&prefs.gui_layout_content_1), gui_layout_content, FALSE); + prefs_set_effect_flags_by_name(gui_layout_module, "layout_content_1", layout_gui_flags); prefs_register_enum_preference(gui_layout_module, "layout_content_2", "Layout content of the pane 2", "Layout content of the pane 2", (gint*)(void*)(&prefs.gui_layout_content_2), gui_layout_content, FALSE); + prefs_set_effect_flags_by_name(gui_layout_module, "layout_content_2", layout_gui_flags); prefs_register_enum_preference(gui_layout_module, "layout_content_3", "Layout content of the pane 3", "Layout content of the pane 3", (gint*)(void*)(&prefs.gui_layout_content_3), gui_layout_content, FALSE); + prefs_set_effect_flags_by_name(gui_layout_module, "layout_content_3", layout_gui_flags); prefs_register_bool_preference(gui_layout_module, "packet_list_separator.enabled", "Enable Packet List Separator", diff --git a/ui/qt/preferences_dialog.cpp b/ui/qt/preferences_dialog.cpp index a6b41671ce..78547d12c8 100644 --- a/ui/qt/preferences_dialog.cpp +++ b/ui/qt/preferences_dialog.cpp @@ -201,25 +201,13 @@ void PreferencesDialog::on_advancedSearchLineEdit_textEdited(const QString &sear void PreferencesDialog::on_buttonBox_accepted() { gchar* err = NULL; - unsigned int must_redissect = 0; - - QVector old_layout = QVector() << prefs.gui_layout_type - << prefs.gui_layout_content_1 - << prefs.gui_layout_content_2 - << prefs.gui_layout_content_3; + unsigned int redissect_flags = 0; // XXX - We should validate preferences as the user changes them, not here. // XXX - We're also too enthusiastic about setting must_redissect. -// if (!prefs_main_fetch_all(parent_w, &must_redissect)) -// return; /* Errors in some preference setting - already reported */ - prefs_modules_foreach_submodules(NULL, module_prefs_unstash, (gpointer)&must_redissect); + prefs_modules_foreach_submodules(NULL, module_prefs_unstash, (gpointer)&redissect_flags); - QVector new_layout = QVector() << prefs.gui_layout_type - << prefs.gui_layout_content_1 - << prefs.gui_layout_content_2 - << prefs.gui_layout_content_3; - - if (new_layout[0] != old_layout[0]) { + if (redissect_flags & PREF_EFFECT_GUI_LAYOUT) { // Layout type changed, reset sizes recent.gui_geometry_main_upper_pane = 0; recent.gui_geometry_main_lower_pane = 0; @@ -269,13 +257,13 @@ void PreferencesDialog::on_buttonBox_accepted() wsApp->setMonospaceFont(prefs.gui_qt_font_name); - if (must_redissect & PREF_EFFECT_DISSECTION) { + if (redissect_flags & PREF_EFFECT_DISSECTION) { /* Redissect all the packets, and re-evaluate the display filter. */ wsApp->queueAppSignal(WiresharkApplication::PacketDissectionChanged); } wsApp->queueAppSignal(WiresharkApplication::PreferencesChanged); - if (new_layout != old_layout) { + if (redissect_flags & PREF_EFFECT_GUI_LAYOUT) { wsApp->queueAppSignal(WiresharkApplication::RecentPreferencesRead); } }