diff options
author | Guy Harris <guy@alum.mit.edu> | 2007-03-14 19:30:19 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2007-03-14 19:30:19 +0000 |
commit | 082282b6f400e66592006d5a1c38641f2d06cf1e (patch) | |
tree | b0e928dfc37e0d0d13539ee488c669e550936992 /gtk/menu.c | |
parent | 50bb064108bcab0a2047d2e93d081100e7fef7d2 (diff) |
Don't enable "Save As" if you don't have an unsaved live capture file
and there are no formats in which the file can be saved by some means
other than copying the raw data; "Save As" isn't a very useful function
in that case, and that prevents us from having an empty list of formats
in which the file can be saved.
svn path=/trunk/; revision=21032
Diffstat (limited to 'gtk/menu.c')
-rw-r--r-- | gtk/menu.c | 54 |
1 files changed, 31 insertions, 23 deletions
diff --git a/gtk/menu.c b/gtk/menu.c index 7266b9e098..3a5040fae6 100644 --- a/gtk/menu.c +++ b/gtk/menu.c @@ -886,8 +886,7 @@ menus_init(void) { merge_all_tap_menus(tap_menu_tree_root); /* Initialize enabled/disabled state of menu items */ - set_menus_for_unsaved_capture_file(FALSE); - set_menus_for_capture_file(FALSE); + set_menus_for_capture_file(NULL); #if 0 /* Un-#if this when we actually implement Cut/Copy/Paste. Then make sure you enable them when they can be done. */ @@ -2088,32 +2087,41 @@ popup_menu_handler(GtkWidget *widget, GdkEvent *event, gpointer data) } /* Enable or disable menu items based on whether you have a capture file - you've finished reading. */ + you've finished reading and, if you have one, whether it's been saved + and whether it could be saved except by copying the raw packet data. */ void -set_menus_for_capture_file(gboolean have_capture_file) +set_menus_for_capture_file(capture_file *cf) { - set_menu_sensitivity(main_menu_factory, "/File/Open...", have_capture_file); - set_menu_sensitivity(main_menu_factory, "/File/Open Recent", have_capture_file); - set_menu_sensitivity(main_menu_factory, "/File/Merge...", have_capture_file); - set_menu_sensitivity(main_menu_factory, "/File/Close", have_capture_file); - set_menu_sensitivity(main_menu_factory, "/File/Save As...", - have_capture_file); - set_menu_sensitivity(main_menu_factory, "/File/Export", have_capture_file); - set_menu_sensitivity(main_menu_factory, "/View/Reload", have_capture_file); - set_toolbar_for_capture_file(have_capture_file); + if (cf == NULL) { + /* We have no capture file */ + set_menu_sensitivity(main_menu_factory, "/File/Merge...", FALSE); + set_menu_sensitivity(main_menu_factory, "/File/Close", FALSE); + set_menu_sensitivity(main_menu_factory, "/File/Save", FALSE); + set_menu_sensitivity(main_menu_factory, "/File/Save As...", FALSE); + set_menu_sensitivity(main_menu_factory, "/File/Export", FALSE); + set_menu_sensitivity(main_menu_factory, "/View/Reload", FALSE); + set_toolbar_for_capture_file(FALSE); + set_toolbar_for_unsaved_capture_file(FALSE); + } else { + set_menu_sensitivity(main_menu_factory, "/File/Merge...", TRUE); + set_menu_sensitivity(main_menu_factory, "/File/Close", TRUE); + set_menu_sensitivity(main_menu_factory, "/File/Save", !cf->user_saved); + /* + * "Save As..." works only if we can write the file out in at least + * one format (so we can save the whole file or just a subset) or + * if we have an unsaved capture (so writing the whole file out + * with a raw data copy makes sense). + */ + set_menu_sensitivity(main_menu_factory, "/File/Save As...", + cf_can_save_as(cf) || !cf->user_saved); + set_menu_sensitivity(main_menu_factory, "/File/Export", TRUE); + set_menu_sensitivity(main_menu_factory, "/View/Reload", TRUE); + set_toolbar_for_unsaved_capture_file(!cf->user_saved); + set_toolbar_for_capture_file(TRUE); + } packets_bar_update(); } -/* Enable or disable menu items based on whether you have an unsaved - capture file you've finished reading. */ -void -set_menus_for_unsaved_capture_file(gboolean have_unsaved_capture_file) -{ - set_menu_sensitivity(main_menu_factory, "/File/Save", - have_unsaved_capture_file); - set_toolbar_for_unsaved_capture_file(have_unsaved_capture_file); -} - /* Enable or disable menu items based on whether there's a capture in progress. */ void |