Move the code to set the title on a window when a capture is in progress
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 7 Feb 2005 02:09:30 +0000 (02:09 +0000)
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 7 Feb 2005 02:09:30 +0000 (02:09 +0000)
to the "start live capture" callback, and call that from "do_capture()".

When opening a capture file, don't pop up the "What do you want to do?"
pane when closing any existing file you have open, as we're just going
to put the regular view up right after that.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@13332 f5534014-38df-0310-8fa8-9805f1628bb7

capture.c
file.c
file.h
gtk/main.c

index 38cf2092a1e3e74ff655959e3f4c058eb70d4706..f1cf38c5eb506749089ab0647160a9829927c72c 100644 (file)
--- a/capture.c
+++ b/capture.c
@@ -414,27 +414,23 @@ do_capture(capture_options *capture_opts)
 {
   gboolean is_tempfile;
   gboolean ret;
-  gchar *title;
 
   /* open the output file (temporary/specified name/ringbuffer) and close the old one */
   if(!capture_open_output(capture_opts, &is_tempfile)) {
     return FALSE;
   }
 
-  title = g_strdup_printf("%s: Capturing - Ethereal",
-                          get_interface_descriptive_name(capture_opts->iface));
   if (capture_opts->sync_mode) {       
     /* sync mode: do the capture in a child process */
     ret = sync_pipe_do_capture(capture_opts, is_tempfile);
     /* capture is still running */
-    set_main_window_name(title);
+    cf_callback_invoke(cf_cb_live_capture_started, capture_opts);
   } else {
     /* normal mode: do the capture synchronously */
-    set_main_window_name(title);
+    cf_callback_invoke(cf_cb_live_capture_started, capture_opts);
     ret = normal_do_capture(capture_opts, is_tempfile);
     /* capture is finished here */
   }
-  g_free(title);
 
   return ret;
 }
diff --git a/file.c b/file.c
index c08a3c8d2884f449dc9b7a233c6dbef10a8f4d43..3d345ffe0160e6a1eddaf4d7e7b5d0a4daa77eea 100644 (file)
--- a/file.c
+++ b/file.c
@@ -100,6 +100,8 @@ static guint32 firstsec, firstusec;
 static guint32 prevsec, prevusec;
 static guint32 cum_bytes = 0;
 
+static void cf_reset_state(capture_file *cf);
+
 static void read_packet(capture_file *cf, long offset);
 
 static void rescan_packets(capture_file *cf, const char *action, const char *action_item,
@@ -141,8 +143,8 @@ static   gboolean copy_binary_file(const char *from_filename, const char *to_fil
 
 
 /* one callback for now, we could have a list later */
-cf_callback_t cf_cb = NULL;
-gpointer cf_cb_user_data = NULL;
+static cf_callback_t cf_cb = NULL;
+static gpointer cf_cb_user_data = NULL;
 
 void
 cf_callback_invoke(int event, gpointer data)
@@ -193,7 +195,7 @@ cf_open(capture_file *cf, const char *fname, gboolean is_tempfile, int *err)
 
   /* The open succeeded.  Close whatever capture file we had open,
      and fill in the information for this file. */
-  cf_close(cf);
+  cf_reset_state(cf);
 
   /* Initialize all data structures used for dissection. */
   init_dissection();
@@ -247,9 +249,15 @@ fail:
   return CF_ERROR;
 }
 
-/* Reset everything to a pristine state */
-void
-cf_close(capture_file *cf)
+/*
+ * Reset the state for the currently closed file, but don't do the
+ * UI callbacks; this is for use in "cf_open()", where we don't
+ * want the UI to go from "file open" to "file closed" back to
+ * "file open", we want it to go from "old file open" to "new file
+ * open and being read".
+ */
+static void
+cf_reset_state(capture_file *cf)
 {
   /* Die if we're in the middle of reading a file. */
   g_assert(cf->state != FILE_READ_IN_PROGRESS);
@@ -297,14 +305,21 @@ cf_close(capture_file *cf)
   cf->esec  = 0;
   cf->eusec = 0;
 
-  cf_callback_invoke(cf_cb_file_closed, cf);
-
   reset_tap_listeners();
 
   /* We have no file open. */
   cf->state = FILE_CLOSED;
 }
 
+/* Reset everything to a pristine state */
+void
+cf_close(capture_file *cf)
+{
+  cf_reset_state(cf);
+
+  cf_callback_invoke(cf_cb_file_closed, cf);
+}
+
 cf_read_status_t
 cf_read(capture_file *cf)
 {
@@ -487,13 +502,7 @@ cf_read(capture_file *cf)
 cf_status_t
 cf_start_tail(capture_file *cf, const char *fname, gboolean is_tempfile, int *err)
 {
-  cf_status_t cf_status;
-
-  cf_status = cf_open(cf, fname, is_tempfile, err);
-  if (cf_status == CF_OK) {
-    cf_callback_invoke(cf_cb_live_capture_started, cf);
-  }
-  return cf_status;
+  return cf_open(cf, fname, is_tempfile, err);
 }
 
 cf_read_status_t
diff --git a/file.h b/file.h
index a87899f49b67d2fdb89f63001894121d16902ac2..032ecfc9abe06d10d25a3166c2695451a4042bac 100644 (file)
--- a/file.h
+++ b/file.h
@@ -72,6 +72,9 @@ typedef enum {
 
 typedef void (*cf_callback_t) (gint event, gpointer data, gpointer user_data);
 
+extern void
+cf_callback_invoke(int event, gpointer data);
+
 extern void
 cf_callback_add(cf_callback_t func, gpointer user_data);
 
index 995f17bf49ec05259d038ebfe255fbfe5bdb0131..039ef0735fc7fdb22503ac910de3fdbf6c4fc50e 100644 (file)
@@ -191,7 +191,8 @@ capture_options *capture_opts = &global_capture_opts;
 
 
 static void create_main_window(gint, gint, gint, e_prefs*);
-static void file_quit_answered_cb(gpointer dialog _U_, gint btn, gpointer data _U_);
+static void show_main_window(gboolean);
+static void file_quit_answered_cb(gpointer dialog, gint btn, gpointer data);
 static void main_save_window_geometry(GtkWidget *widget);
 
 #define E_DFILTER_CM_KEY          "display_filter_combo"
@@ -1288,7 +1289,7 @@ set_display_filename(capture_file *cf)
 }
 
 
-void
+static void
 main_cf_cb_file_closed(capture_file *cf)
 {
     /* Destroy all windows, which refer to the
@@ -1315,7 +1316,7 @@ main_cf_cb_file_closed(capture_file *cf)
     main_set_for_capture_file(FALSE);
 }
 
-void
+static void
 main_cf_cb_file_read_start(capture_file *cf)
 {
   const gchar *name_ptr;
@@ -1328,7 +1329,7 @@ main_cf_cb_file_read_start(capture_file *cf)
   g_free(load_msg);
 }
 
-void
+static void
 main_cf_cb_file_read_finished(capture_file *cf)
 {
     statusbar_pop_file_msg();
@@ -1346,10 +1347,10 @@ main_cf_cb_file_read_finished(capture_file *cf)
     main_set_for_capture_file(TRUE);
 }
 
-void
+static void
 main_cf_cb_live_capture_started(capture_options *capture_opts)
 {
-    gchar *capture_msg;
+    gchar *capture_msg, *title;
 
     /* Disable menu items that make no sense if you're currently running
        a capture. */
@@ -1365,11 +1366,16 @@ main_cf_cb_live_capture_started(capture_options *capture_opts)
 
     g_free(capture_msg);
 
+    title = g_strdup_printf("%s: Capturing - Ethereal",
+                            get_interface_descriptive_name(capture_opts->iface));
+    set_main_window_name(title);
+    g_free(title);
+
     /* Set up main window for a capture file. */
     main_set_for_capture_file(TRUE);
 }
 
-void
+static void
 main_cf_cb_live_capture_finished(capture_file *cf)
 {
     /* Pop the "<live capture in progress>" message off the status bar. */
@@ -1390,7 +1396,7 @@ main_cf_cb_live_capture_finished(capture_file *cf)
     main_set_for_capture_file(TRUE);
 }
 
-void
+static void
 main_cf_cb_packet_selected(gpointer data)
 {
     capture_file *cf = data;
@@ -1405,7 +1411,7 @@ main_cf_cb_packet_selected(gpointer data)
     set_menus_for_selected_packet(cf);
 }
 
-void
+static void
 main_cf_cb_packet_unselected(capture_file *cf)
 {
     /* Clear out the display of that packet. */
@@ -1415,14 +1421,14 @@ main_cf_cb_packet_unselected(capture_file *cf)
     set_menus_for_selected_packet(cf);
 }
 
-void
+static void
 main_cf_cb_field_unselected(capture_file *cf)
 {
     statusbar_pop_field_msg();
     set_menus_for_selected_tree_row(cf);
 }
 
-void
+static void
 main_cf_cb_file_safe_started(gchar * filename)
 {
     const gchar  *name_ptr;
@@ -1436,21 +1442,21 @@ main_cf_cb_file_safe_started(gchar * filename)
     g_free(save_msg);
 }
 
-void
+static void
 main_cf_cb_file_safe_finished(gpointer data _U_)
 {
     /* Pop the "Saving:" message off the status bar. */
     statusbar_pop_file_msg();
 }
 
-void
+static void
 main_cf_cb_file_safe_failed(gpointer data _U_)
 {
     /* Pop the "Saving:" message off the status bar. */
     statusbar_pop_file_msg();
 }
 
-void
+static void
 main_cf_cb_file_safe_reload_finished(gpointer data _U_)
 {
     set_menus_for_unsaved_capture_file(FALSE);
@@ -2308,18 +2314,6 @@ main(int argc, char *argv[])
   /* the window can be sized only, if it's not already shown, so do it now! */
   main_load_window_geometry(top_level);
 
-  /*** we have finished all init things, show the main window ***/
-  gtk_widget_show(top_level);
-
-  /* the window can be maximized only, if it's visible, so do it after show! */
-  main_load_window_geometry(top_level);
-
-  /* process all pending GUI events before continue */
-  while (gtk_events_pending()) gtk_main_iteration();
-
-  /* Pop up any queued-up alert boxes. */
-  display_queued_messages();
-
   /* If we were given the name of a capture file, read it in now;
      we defer it until now, so that, if we can't open it, and pop
      up an alert box, the alert box is more likely to come up on
@@ -2327,6 +2321,7 @@ main(int argc, char *argv[])
      alert box, so, if we get one of those, it's more likely to come
      up on top of us. */
   if (cf_name) {
+    show_main_window(TRUE);
     if (rfilter != NULL) {
       if (!dfilter_compile(rfilter, &rfcode)) {
         bad_dfilter_alert_box(rfilter);
@@ -2379,43 +2374,45 @@ main(int argc, char *argv[])
         cfile.rfcode = NULL;
       }
     }
-  }
-
+  } else {
 #ifdef HAVE_LIBPCAP
-  if (start_capture) {
-    if (capture_opts->save_file != NULL) {
-      /* Save the directory name for future file dialogs. */
-      /* (get_dirname overwrites filename) */
-      s = get_dirname(g_strdup(capture_opts->save_file));  
-      set_last_open_dir(s);
-      g_free(s);
-    }
-    /* "-k" was specified; start a capture. */
-    if (do_capture(capture_opts)) {
-      /* The capture started.  Open tap windows; we do so after creating
-         the main window, to avoid GTK warnings, and after starting the
-         capture, so we know we have something to tap. */
-      if (tap_opt && tli) {
-        (*tli->func)(tap_opt);
-        g_free(tap_opt);
+    if (start_capture) {
+      if (capture_opts->save_file != NULL) {
+        /* Save the directory name for future file dialogs. */
+        /* (get_dirname overwrites filename) */
+        s = get_dirname(g_strdup(capture_opts->save_file));  
+        set_last_open_dir(s);
+        g_free(s);
+      }
+      /* "-k" was specified; start a capture. */
+      show_main_window(TRUE);
+      if (do_capture(capture_opts)) {
+        /* The capture started.  Open tap windows; we do so after creating
+           the main window, to avoid GTK warnings, and after starting the
+           capture, so we know we have something to tap. */
+        if (tap_opt && tli) {
+          (*tli->func)(tap_opt);
+          g_free(tap_opt);
+        }
       }
     }
-  }
-  else {
-    set_menus_for_capture_in_progress(FALSE);
-  }
-
-  /* if the user didn't supplied a capture filter, use the one to filter out remote connections like SSH */
-  if (!start_capture && (capture_opts->cfilter == NULL || strlen(capture_opts->cfilter) == 0)) {
-    if (capture_opts->cfilter) {
-      g_free(capture_opts->cfilter);
+    else {
+      show_main_window(FALSE);
+      set_menus_for_capture_in_progress(FALSE);
     }
-    capture_opts->cfilter = g_strdup(get_conn_cfilter());
-  }
 
+    /* if the user didn't supplied a capture filter, use the one to filter out remote connections like SSH */
+    if (!start_capture && (capture_opts->cfilter == NULL || strlen(capture_opts->cfilter) == 0)) {
+      if (capture_opts->cfilter) {
+        g_free(capture_opts->cfilter);
+      }
+      capture_opts->cfilter = g_strdup(get_conn_cfilter());
+    }
 #else /* HAVE_LIBPCAP */
-  set_menus_for_capture_in_progress(FALSE);
+    show_main_window(FALSE);
+    set_menus_for_capture_in_progress(FALSE);
 #endif /* HAVE_LIBPCAP */
+  }
 
   gtk_main();
 
@@ -3177,3 +3174,21 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
     welcome_pane = welcome_new();
     gtk_widget_show(welcome_pane);
 }
+
+static void
+show_main_window(gboolean doing_work)
+{
+  main_set_for_capture_file(doing_work);
+
+  /*** we have finished all init things, show the main window ***/
+  gtk_widget_show(top_level);
+
+  /* the window can be maximized only, if it's visible, so do it after show! */
+  main_load_window_geometry(top_level);
+
+  /* process all pending GUI events before continue */
+  while (gtk_events_pending()) gtk_main_iteration();
+
+  /* Pop up any queued-up alert boxes. */
+  display_queued_messages();
+}