aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/file_dlg.c
diff options
context:
space:
mode:
authorulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>2004-08-31 08:18:10 +0000
committerulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>2004-08-31 08:18:10 +0000
commit6c000dd671f87bbd5ddb62fa4082360a6fd96724 (patch)
treefd82f308b1ca18cf36f46e4857089d49ec37064b /gtk/file_dlg.c
parent8981c31fe17dd0cfd8225ca13433a0b5c8959fbe (diff)
Split the preview function into a prepare and a do part, to be able to do some experiments about the preview timeout things.
As the FileChooser dialog (GTK2.4) doesn't seem to let pass other GTK events (even with calling gtk_main_iteration()), it's not possible to change the preview behaviour to be more keen. To get a mechanism to update the preview independant from the dialog workings, we would need to start a new thread/task, which is too much effort for this IMHO. So we might use the more simple approach of setting the timeout by a preference setting. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@11856 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'gtk/file_dlg.c')
-rw-r--r--gtk/file_dlg.c71
1 files changed, 47 insertions, 24 deletions
diff --git a/gtk/file_dlg.c b/gtk/file_dlg.c
index 73dff5a8b0..87a2a5123a 100644
--- a/gtk/file_dlg.c
+++ b/gtk/file_dlg.c
@@ -123,29 +123,19 @@ secs_usecs( guint32 s, guint32 us)
/* set a new filename for the preview widget */
-static gboolean
+static wtap *
preview_set_filename(GtkWidget *prev, const gchar *cf_name)
{
GtkWidget *label;
wtap *wth;
- const struct wtap_pkthdr *phdr;
int err = 0;
gchar *err_info;
struct stat cf_stat;
- long data_offset;
gchar string_buff[PREVIEW_STR_MAX];
- unsigned int packet = 0;
- double start_time = 0; /* seconds, with msec resolution */
- double stop_time = 0; /* seconds, with msec resolution */
- double cur_time;
- time_t ti_time;
- struct tm *ti_tm;
- unsigned int elapsed_time;
- time_t time_preview;
- time_t time_current;
- gboolean is_breaked = FALSE;
guint64 filesize;
+
+ /* init preview labels */
label = OBJECT_GET_DATA(prev, PREVIEW_FILENAME_KEY);
gtk_label_set_text(GTK_LABEL(label), "-");
label = OBJECT_GET_DATA(prev, PREVIEW_FORMAT_KEY);
@@ -200,11 +190,37 @@ preview_set_filename(GtkWidget *prev, const gchar *cf_name)
label = OBJECT_GET_DATA(prev, PREVIEW_FORMAT_KEY);
gtk_label_set_text(GTK_LABEL(label), string_buff);
+ return wth;
+}
+
+
+/* do a preview run on the currently selected capture file */
+static void
+preview_do(GtkWidget *prev, wtap *wth)
+{
+ GtkWidget *label;
+ unsigned int elapsed_time;
+ time_t time_preview;
+ time_t time_current;
+ int err = 0;
+ gchar *err_info;
+ long data_offset;
+ const struct wtap_pkthdr *phdr;
+ double start_time = 0; /* seconds, with msec resolution */
+ double stop_time = 0; /* seconds, with msec resolution */
+ double cur_time;
+ unsigned int packets = 0;
+ gboolean is_breaked = FALSE;
+ gchar string_buff[PREVIEW_STR_MAX];
+ time_t ti_time;
+ struct tm *ti_tm;
+
+
time(&time_preview);
while ( (wtap_read(wth, &err, &err_info, &data_offset)) ) {
phdr = wtap_phdr(wth);
cur_time = secs_usecs(phdr->ts.tv_sec, phdr->ts.tv_usec);
- if(packet == 0) {
+ if(packets == 0) {
start_time = cur_time;
stop_time = cur_time;
}
@@ -214,8 +230,10 @@ preview_set_filename(GtkWidget *prev, const gchar *cf_name)
if (cur_time > stop_time){
stop_time = cur_time;
}
- packet++;
- if(packet%100) {
+
+ packets++;
+ if(packets%1000) {
+ /* do we have a timeout? */
time(&time_current);
if(time_current-time_preview >= PREVIEW_TIMEOUT_SECS) {
is_breaked = TRUE;
@@ -225,18 +243,18 @@ preview_set_filename(GtkWidget *prev, const gchar *cf_name)
}
if(err != 0) {
- g_snprintf(string_buff, PREVIEW_STR_MAX, "error after reading %u packets", packet);
+ g_snprintf(string_buff, PREVIEW_STR_MAX, "error after reading %u packets", packets);
label = OBJECT_GET_DATA(prev, PREVIEW_PACKETS_KEY);
gtk_label_set_text(GTK_LABEL(label), string_buff);
wtap_close(wth);
- return TRUE;
+ return;
}
/* packet count */
if(is_breaked) {
- g_snprintf(string_buff, PREVIEW_STR_MAX, "more than %u packets (preview timeout)", packet);
+ g_snprintf(string_buff, PREVIEW_STR_MAX, "more than %u packets (preview timeout)", packets);
} else {
- g_snprintf(string_buff, PREVIEW_STR_MAX, "%u", packet);
+ g_snprintf(string_buff, PREVIEW_STR_MAX, "%u", packets);
}
label = OBJECT_GET_DATA(prev, PREVIEW_PACKETS_KEY);
gtk_label_set_text(GTK_LABEL(label), string_buff);
@@ -271,8 +289,6 @@ preview_set_filename(GtkWidget *prev, const gchar *cf_name)
gtk_label_set_text(GTK_LABEL(label), string_buff);
wtap_close(wth);
-
- return TRUE;
}
#if 0
@@ -298,13 +314,14 @@ update_preview_cb (GtkFileChooser *file_chooser, gpointer data)
#endif
-/* the text entry changed */
+/* the filename text entry changed */
static void
file_open_entry_changed(GtkWidget *w _U_, gpointer file_sel)
{
GtkWidget *prev = OBJECT_GET_DATA(file_sel, PREVIEW_TABLE_KEY);
const gchar* cf_name;
gboolean have_preview;
+ wtap *wth;
/* get the filename */
#if (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 4) || GTK_MAJOR_VERSION > 2
@@ -314,7 +331,8 @@ file_open_entry_changed(GtkWidget *w _U_, gpointer file_sel)
#endif
/* set the filename to the preview */
- have_preview = preview_set_filename(prev, cf_name);
+ wth = preview_set_filename(prev, cf_name);
+ have_preview = (gboolean) wth;
/* make the preview widget sensitive */
gtk_widget_set_sensitive(prev, have_preview);
@@ -325,6 +343,10 @@ file_open_entry_changed(GtkWidget *w _U_, gpointer file_sel)
#else
gtk_widget_set_sensitive(GTK_FILE_SELECTION(file_sel)->ok_button, have_preview);
#endif
+
+ /* do the actual preview */
+ if(have_preview)
+ preview_do(prev, wth);
}
@@ -613,6 +635,7 @@ file_open_cmd_cb(GtkWidget *widget, gpointer data _U_) {
}
}
+/* user pressed "open" button */
static void
file_open_ok_cb(GtkWidget *w, gpointer fs) {
gchar *cf_name, *rfilter, *s;