aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>2005-08-20 12:09:48 +0000
committerulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>2005-08-20 12:09:48 +0000
commit19de92d2c05478d21721d5672aa75e76bcda1964 (patch)
tree3b8300d26b251ac23ae3d98f562874d39566634b
parent63e86eb9c093dfbf9ffacebce2cc28e569690af9 (diff)
renamed ui_util.c/.h to gui_utils.c/.h to prevent confusion with identical named ui_util.h in / dir
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@15465 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r--gtk/Makefile.am2
-rw-r--r--gtk/Makefile.common2
-rw-r--r--gtk/about_dlg.c2
-rw-r--r--gtk/ansi_a_stat.c2
-rw-r--r--gtk/ansi_map_stat.c2
-rw-r--r--gtk/bootp_stat.c2
-rw-r--r--gtk/capture_dlg.c2
-rw-r--r--gtk/capture_if_details_dlg.c2
-rw-r--r--gtk/capture_if_dlg.c2
-rw-r--r--gtk/capture_info_dlg.c2
-rw-r--r--gtk/capture_prefs.c2
-rw-r--r--gtk/color_dlg.c2
-rw-r--r--gtk/column_prefs.c6
-rw-r--r--gtk/conversations_table.c2
-rw-r--r--gtk/dcerpc_stat.c2
-rw-r--r--gtk/decode_as_dcerpc.c2
-rw-r--r--gtk/decode_as_dlg.c2
-rw-r--r--gtk/dfilter_expr_dlg.c2
-rw-r--r--gtk/dlg_utils.c2
-rw-r--r--gtk/dlg_utils.h6
-rw-r--r--gtk/fc_stat.c2
-rw-r--r--gtk/file_dlg.c2
-rw-r--r--gtk/fileset_dlg.c2
-rw-r--r--gtk/filter_dlg.c2
-rw-r--r--gtk/find_dlg.c2
-rw-r--r--gtk/flow_graph.c2
-rw-r--r--gtk/follow_dlg.c2
-rw-r--r--gtk/goto_dlg.c2
-rw-r--r--gtk/graph_analysis.c2
-rw-r--r--gtk/gsm_a_stat.c2
-rw-r--r--gtk/gsm_map_stat.c2
-rw-r--r--gtk/gsm_map_summary.c2
-rw-r--r--gtk/gui_prefs.c2
-rw-r--r--gtk/gui_utils.c (renamed from gtk/ui_util.c)2078
-rw-r--r--gtk/gui_utils.h (renamed from gtk/ui_util.h)616
-rw-r--r--gtk/h225_counter.c2
-rw-r--r--gtk/h225_ras_srt.c2
-rw-r--r--gtk/help_dlg.c2
-rw-r--r--gtk/hostlist_table.c2
-rw-r--r--gtk/io_stat.c2
-rw-r--r--gtk/layout_prefs.c4
-rw-r--r--gtk/ldap_stat.c2
-rw-r--r--gtk/main.c4
-rw-r--r--gtk/mgcp_stat.c2
-rw-r--r--gtk/mtp3_stat.c2
-rw-r--r--gtk/mtp3_summary.c2
-rw-r--r--gtk/nameres_prefs.c2
-rw-r--r--gtk/packet_list.c2
-rw-r--r--gtk/packet_win.c2
-rw-r--r--gtk/plugins_dlg.c2
-rw-r--r--gtk/prefs_dlg.c2
-rw-r--r--gtk/print_dlg.c2
-rw-r--r--gtk/print_prefs.c2
-rw-r--r--gtk/progress_dlg.c2
-rw-r--r--gtk/proto_dlg.c2
-rw-r--r--gtk/proto_draw.c2
-rw-r--r--gtk/proto_hier_stats_dlg.c2
-rw-r--r--gtk/range_utils.c2
-rw-r--r--gtk/recent.c2
-rw-r--r--gtk/rpc_progs.c2
-rw-r--r--gtk/rpc_stat.c2
-rw-r--r--gtk/rtp_analysis.c2
-rw-r--r--gtk/rtp_stream_dlg.c2
-rw-r--r--gtk/sctp_assoc_analyse.c2
-rw-r--r--gtk/sctp_byte_graph_dlg.c2
-rw-r--r--gtk/sctp_chunk_stat.c2
-rw-r--r--gtk/sctp_chunk_stat_dlg.c2
-rw-r--r--gtk/sctp_error_dlg.c2
-rw-r--r--gtk/sctp_graph_dlg.c2
-rw-r--r--gtk/sctp_stat_dlg.c2
-rw-r--r--gtk/service_response_time_table.c2
-rw-r--r--gtk/simple_dialog.c2
-rw-r--r--gtk/sip_stat.c2
-rw-r--r--gtk/smb_stat.c2
-rw-r--r--gtk/stats_tree_stat.c2
-rw-r--r--gtk/summary_dlg.c2
-rw-r--r--gtk/supported_protos_dlg.c2
-rw-r--r--gtk/tap_dfilter_dlg.c2
-rw-r--r--gtk/tcp_graph.c2
-rw-r--r--gtk/text_page.c2
-rw-r--r--gtk/voip_calls_dlg.c2
-rw-r--r--gtk/wsp_stat.c2
82 files changed, 1430 insertions, 1436 deletions
diff --git a/gtk/Makefile.am b/gtk/Makefile.am
index f91adfe53e..cbd9869e2f 100644
--- a/gtk/Makefile.am
+++ b/gtk/Makefile.am
@@ -64,6 +64,7 @@ noinst_HEADERS = \
gtkglobals.h \
gtk_stat_util.h \
gui_prefs.h \
+ gui_utils.h \
help_dlg.h \
hostlist_table.h \
isprint.h \
@@ -96,7 +97,6 @@ noinst_HEADERS = \
tap_dfilter_dlg.h \
text_page.h \
toolbar.h \
- ui_util.h \
voip_calls.h \
voip_calls_dlg.h \
webbrowser.h
diff --git a/gtk/Makefile.common b/gtk/Makefile.common
index 048a4b7b9b..0913d79883 100644
--- a/gtk/Makefile.common
+++ b/gtk/Makefile.common
@@ -67,6 +67,7 @@ ETHEREAL_GTK_SRC = \
graph_analysis.c \
gtk_stat_util.c \
gui_prefs.c \
+ gui_utils.c \
help_dlg.c \
hostlist_table.c \
layout_prefs.c \
@@ -99,7 +100,6 @@ ETHEREAL_GTK_SRC = \
tap_dfilter_dlg.c \
text_page.c \
toolbar.c \
- ui_util.c \
voip_calls.c \
webbrowser.c
diff --git a/gtk/about_dlg.c b/gtk/about_dlg.c
index 9adf8ecd48..e6bdd77123 100644
--- a/gtk/about_dlg.c
+++ b/gtk/about_dlg.c
@@ -32,7 +32,7 @@
#include <epan/filesystem.h>
#include <epan/plugins.h>
#include "about_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "compat_macros.h"
#include "globals.h"
diff --git a/gtk/ansi_a_stat.c b/gtk/ansi_a_stat.c
index e5351fbd20..9e3f26b7fc 100644
--- a/gtk/ansi_a_stat.c
+++ b/gtk/ansi_a_stat.c
@@ -53,7 +53,7 @@
#include "../globals.h"
#include "filter_dlg.h"
#include "compat_macros.h"
-#include "ui_util.h"
+#include "gui_utils.h"
typedef struct column_arrows {
diff --git a/gtk/ansi_map_stat.c b/gtk/ansi_map_stat.c
index 370cba8813..50dbfa90e2 100644
--- a/gtk/ansi_map_stat.c
+++ b/gtk/ansi_map_stat.c
@@ -52,7 +52,7 @@
#include "filter_dlg.h"
#include "compat_macros.h"
#include <epan/dissectors/packet-ansi_map.h>
-#include "ui_util.h"
+#include "gui_utils.h"
typedef struct column_arrows {
diff --git a/gtk/bootp_stat.c b/gtk/bootp_stat.c
index 5add45a336..7821e5b14b 100644
--- a/gtk/bootp_stat.c
+++ b/gtk/bootp_stat.c
@@ -36,7 +36,7 @@
#include <epan/stat.h>
#include "stat_menu.h"
#include "simple_dialog.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include <epan/tap.h>
#include "../register.h"
diff --git a/gtk/capture_dlg.c b/gtk/capture_dlg.c
index 2688b41ebc..26bfd545fe 100644
--- a/gtk/capture_dlg.c
+++ b/gtk/capture_dlg.c
@@ -37,7 +37,7 @@
#include "globals.h"
#include <epan/addr_resolv.h>
#include "main.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "capture.h"
#include "capture_dlg.h"
#include "filter_dlg.h"
diff --git a/gtk/capture_if_details_dlg.c b/gtk/capture_if_details_dlg.c
index aba49ccb7a..963e0ead6b 100644
--- a/gtk/capture_if_details_dlg.c
+++ b/gtk/capture_if_details_dlg.c
@@ -42,7 +42,7 @@
#include "capture.h"
#include "main.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include "help_dlg.h"
diff --git a/gtk/capture_if_dlg.c b/gtk/capture_if_dlg.c
index baa041a07e..2bbe1d7a86 100644
--- a/gtk/capture_if_dlg.c
+++ b/gtk/capture_if_dlg.c
@@ -54,7 +54,7 @@
#include "capture_dlg.h"
#include "capture_if_details_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "wtap.h"
diff --git a/gtk/capture_info_dlg.c b/gtk/capture_info_dlg.c
index e241781c3d..1d182a33f6 100644
--- a/gtk/capture_info_dlg.c
+++ b/gtk/capture_info_dlg.c
@@ -41,7 +41,7 @@
#include "globals.h"
#include "capture_ui_utils.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "pcap-util.h"
diff --git a/gtk/capture_prefs.c b/gtk/capture_prefs.c
index 594d9d9527..cdbcb96da1 100644
--- a/gtk/capture_prefs.c
+++ b/gtk/capture_prefs.c
@@ -37,7 +37,7 @@
#include "gtkglobals.h"
#include <epan/prefs.h>
#include "prefs_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "simple_dialog.h"
#include "pcap-util.h"
diff --git a/gtk/color_dlg.c b/gtk/color_dlg.c
index e35ed7c05f..3e7a0c65c2 100644
--- a/gtk/color_dlg.c
+++ b/gtk/color_dlg.c
@@ -40,7 +40,7 @@
#include <epan/dfilter/dfilter.h>
#include "simple_dialog.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dfilter_expr_dlg.h"
#include "compat_macros.h"
#include "filter_dlg.h"
diff --git a/gtk/column_prefs.c b/gtk/column_prefs.c
index 01f058e6d4..f8367cf081 100644
--- a/gtk/column_prefs.c
+++ b/gtk/column_prefs.c
@@ -34,11 +34,7 @@
#include <epan/prefs.h>
#include <epan/column.h>
#include "compat_macros.h"
-#include "ui_util.h"
-
-#if GTK_MAJOR_VERSION >= 2
-#include "ui_util.h"
-#endif
+#include "gui_utils.h"
static GtkWidget *column_l, *del_bt, *title_te, *fmt_m, *up_bt, *dn_bt;
static gint cur_fmt, cur_row;
diff --git a/gtk/conversations_table.c b/gtk/conversations_table.c
index 247271c5d4..5b6340aa3c 100644
--- a/gtk/conversations_table.c
+++ b/gtk/conversations_table.c
@@ -53,7 +53,7 @@
#include "gtk/color_dlg.h"
#include "gtkglobals.h"
#include "main.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "help_dlg.h"
diff --git a/gtk/dcerpc_stat.c b/gtk/dcerpc_stat.c
index abe0069c55..b473c479d4 100644
--- a/gtk/dcerpc_stat.c
+++ b/gtk/dcerpc_stat.c
@@ -44,7 +44,7 @@
#include "stat_menu.h"
#include "simple_dialog.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include <epan/tap.h>
#include "../register.h"
#include <epan/dissectors/packet-dcerpc.h>
diff --git a/gtk/decode_as_dcerpc.c b/gtk/decode_as_dcerpc.c
index 9bc0be532a..5577a2aad6 100644
--- a/gtk/decode_as_dcerpc.c
+++ b/gtk/decode_as_dcerpc.c
@@ -34,7 +34,7 @@
#include "simple_dialog.h"
#include <epan/packet.h>
#include <epan/ipproto.h>
-#include "ui_util.h"
+#include "gui_utils.h"
#include <epan/epan_dissect.h>
#include "compat_macros.h"
#include "decode_as_dcerpc.h"
diff --git a/gtk/decode_as_dlg.c b/gtk/decode_as_dlg.c
index 54bea4cdb4..7cc67a4902 100644
--- a/gtk/decode_as_dlg.c
+++ b/gtk/decode_as_dlg.c
@@ -35,7 +35,7 @@
#include "simple_dialog.h"
#include <epan/packet.h>
#include <epan/ipproto.h>
-#include "ui_util.h"
+#include "gui_utils.h"
#include <epan/epan_dissect.h>
#include "compat_macros.h"
#include "decode_as_dcerpc.h"
diff --git a/gtk/dfilter_expr_dlg.c b/gtk/dfilter_expr_dlg.c
index 71d84c2c91..9084f183ee 100644
--- a/gtk/dfilter_expr_dlg.c
+++ b/gtk/dfilter_expr_dlg.c
@@ -49,7 +49,7 @@
#include "globals.h"
#include "main.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "simple_dialog.h"
#include "dlg_utils.h"
#include "proto_dlg.h"
diff --git a/gtk/dlg_utils.c b/gtk/dlg_utils.c
index 72c53bd12d..88cbad70b7 100644
--- a/gtk/dlg_utils.c
+++ b/gtk/dlg_utils.c
@@ -34,7 +34,7 @@
#include "globals.h"
#include "gtkglobals.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "keys.h"
#include "compat_macros.h"
diff --git a/gtk/dlg_utils.h b/gtk/dlg_utils.h
index 478a7ff7ce..71118f7ee6 100644
--- a/gtk/dlg_utils.h
+++ b/gtk/dlg_utils.h
@@ -80,7 +80,7 @@
/** @file
* Utilities for dialog boxes. Depending on the window functions in
- * ui_util.h, see: @ref howto_window_page for details.
+ * gui_utils.h, see: @ref howto_window_page for details.
* @ingroup dialog_group
*/
@@ -164,7 +164,7 @@ extern void set_last_open_dir(char *dirname);
* @param stock_id_first the first button (e.g. GTK_STOCK_OK)
* @param ... the next buttons, just like stock_id_first
* @return the new button row
- * @todo move this to ui_util.h
+ * @todo move this to gui_utils.h
*/
extern GtkWidget *dlg_button_row_new(const gchar *stock_id_first, ...);
@@ -173,7 +173,7 @@ extern GtkWidget *dlg_button_row_new(const gchar *stock_id_first, ...);
*
* @param widget a widget which should be connected (usually a GtkEntry)
* @param ok_button the button to be activated
- * @todo move this to ui_util.h
+ * @todo move this to gui_utils.h
*/
extern void dlg_set_activate(GtkWidget *widget, GtkWidget *ok_button);
diff --git a/gtk/fc_stat.c b/gtk/fc_stat.c
index ce5f7f5c6c..a470b67ed5 100644
--- a/gtk/fc_stat.c
+++ b/gtk/fc_stat.c
@@ -46,7 +46,7 @@
#include "../timestats.h"
#include "compat_macros.h"
#include "../simple_dialog.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "../file.h"
#include "../globals.h"
diff --git a/gtk/file_dlg.c b/gtk/file_dlg.c
index ac4af2fa1c..4cdcd7faa4 100644
--- a/gtk/file_dlg.c
+++ b/gtk/file_dlg.c
@@ -38,7 +38,7 @@
#include <epan/addr_resolv.h>
#include "keys.h"
#include "filter_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "alert_box.h"
#include "simple_dialog.h"
#include "menu.h"
diff --git a/gtk/fileset_dlg.c b/gtk/fileset_dlg.c
index 941ab8cc19..abd81d7b16 100644
--- a/gtk/fileset_dlg.c
+++ b/gtk/fileset_dlg.c
@@ -44,7 +44,7 @@
#include "compat_macros.h"
#include "simple_dialog.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "main.h"
diff --git a/gtk/filter_dlg.c b/gtk/filter_dlg.c
index ec06e0de48..2568f2825b 100644
--- a/gtk/filter_dlg.c
+++ b/gtk/filter_dlg.c
@@ -36,7 +36,7 @@
#include "gtk/main.h"
#include "filter_dlg.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "simple_dialog.h"
#include "dfilter_expr_dlg.h"
#include "compat_macros.h"
diff --git a/gtk/find_dlg.c b/gtk/find_dlg.c
index cbd5ab9f15..d7d0cfec35 100644
--- a/gtk/find_dlg.c
+++ b/gtk/find_dlg.c
@@ -36,7 +36,7 @@
#include <epan/strutil.h>
#include "globals.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "find_dlg.h"
#include "filter_dlg.h"
#include "alert_box.h"
diff --git a/gtk/flow_graph.c b/gtk/flow_graph.c
index 1448ca569e..1fc5ce5d16 100644
--- a/gtk/flow_graph.c
+++ b/gtk/flow_graph.c
@@ -36,7 +36,7 @@
#include <epan/stat.h>
#include "stat_menu.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include "gtkglobals.h"
diff --git a/gtk/follow_dlg.c b/gtk/follow_dlg.c
index 9b2fc5e5ea..5288560e69 100644
--- a/gtk/follow_dlg.c
+++ b/gtk/follow_dlg.c
@@ -58,7 +58,7 @@
#include <epan/addr_resolv.h>
#include <epan/charsets.h>
#include "util.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include <epan/epan_dissect.h>
#include <epan/filesystem.h>
#include "compat_macros.h"
diff --git a/gtk/goto_dlg.c b/gtk/goto_dlg.c
index 259d8dd15e..d7918600e0 100644
--- a/gtk/goto_dlg.c
+++ b/gtk/goto_dlg.c
@@ -36,7 +36,7 @@
#include "simple_dialog.h"
#include "dlg_utils.h"
#include "compat_macros.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "help_dlg.h"
/* Capture callback data keys */
diff --git a/gtk/graph_analysis.c b/gtk/graph_analysis.c
index 320aa277ba..4cb874ba44 100644
--- a/gtk/graph_analysis.c
+++ b/gtk/graph_analysis.c
@@ -52,7 +52,7 @@
#include "gtkglobals.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "compat_macros.h"
#include "../color.h"
diff --git a/gtk/gsm_a_stat.c b/gtk/gsm_a_stat.c
index ca052c02a0..495efadbed 100644
--- a/gtk/gsm_a_stat.c
+++ b/gtk/gsm_a_stat.c
@@ -53,7 +53,7 @@
#include "../globals.h"
#include "filter_dlg.h"
#include "compat_macros.h"
-#include "ui_util.h"
+#include "gui_utils.h"
typedef struct column_arrows {
diff --git a/gtk/gsm_map_stat.c b/gtk/gsm_map_stat.c
index 04b4e2aedb..715aad80cf 100644
--- a/gtk/gsm_map_stat.c
+++ b/gtk/gsm_map_stat.c
@@ -46,7 +46,7 @@
#include "image/clist_descend.xpm"
#include "simple_dialog.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include <epan/tap.h>
#include "../register.h"
#include "../globals.h"
diff --git a/gtk/gsm_map_summary.c b/gtk/gsm_map_summary.c
index 0257edcd39..abd563e75b 100644
--- a/gtk/gsm_map_summary.c
+++ b/gtk/gsm_map_summary.c
@@ -43,7 +43,7 @@
#include "file.h"
#include "summary.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include <epan/tap.h>
diff --git a/gtk/gui_prefs.c b/gtk/gui_prefs.c
index 91b928927d..7d2e7a378b 100644
--- a/gtk/gui_prefs.c
+++ b/gtk/gui_prefs.c
@@ -37,7 +37,7 @@
#include "supported_protos_dlg.h"
#include <epan/prefs.h>
#include "prefs_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "simple_dialog.h"
#include "dlg_utils.h"
#include "proto_draw.h"
diff --git a/gtk/ui_util.c b/gtk/gui_utils.c
index 0913567011..ac715ec06e 100644
--- a/gtk/ui_util.c
+++ b/gtk/gui_utils.c
@@ -1,1039 +1,1039 @@
-/* ui_util.c
- * UI utility routines
- *
- * $Id$
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
-#ifdef HAVE_IO_H
-# include <io.h>
-#endif
-
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "gtkglobals.h"
-#include "ui_util.h"
-#include <epan/prefs.h>
-#include "epan/epan.h"
-#include "../ui_util.h"
-#include "compat_macros.h"
-#include "recent.h"
-
-
-#include "image/eicon3d16.xpm"
-
-/* XXX - remove this later again, when dlg_xx function cleanup done */
-#include "dlg_utils.h"
-
-
-#define WINDOW_GEOM_KEY "window_geom"
-
-
-/* load the geometry values for a window from previously saved values */
-static gboolean window_geom_load(const gchar *name, window_geometry_t *geom);
-
-
-
-/* Set our window icon. The GDK documentation doesn't provide any
- actual documentation for gdk_window_set_icon(), so we'll steal
- libgimp/gimpdialog.c:gimp_dialog_realize_callback() from the Gimp
- sources and assume it's safe.
-
- XXX - The current icon size is fixed at 16x16 pixels, which looks fine
- with kwm (KDE 1.x's window manager), Sawfish (the "default" window
- manager for GNOME?), and under Windows with Exceed putting X windows
- on the Windows desktop, using Exceed as the window manager, as those
- window managers put a 16x16 icon on the title bar.
-
- The window managers in some windowing environments (e.g. dtwm in CDE)
- and some stand-alone window managers have larger icon sizes (many window
- managers put the window icon on the desktop, in the Windows 3.x style,
- rather than in the titlebar, in the Windows 4.x style), so we need to
- find a way to size our icon appropriately.
-
- The X11 Inter-Client Communications Conventions Manual, Version 1.1,
- in X11R5, specifies that "a window manager that wishes to place
- constraints on the sizes of icon pixmaps and/or windows should
- place a property called WM_ICON_SIZE on the root"; that property
- contains minimum width and height, maximum width and height, and
- width and height increment values. "XGetIconSizes()" retrieves
- that property; unfortunately, I've yet to find a window manager
- that sets it on the root window (kwm, AfterStep, and Exceed don't
- appear to set it).
-
- The X Desktop Group's Window Manager Standard specifies, in the section
- on Application Window Properties, an _NET_WM_ICON property, presumably
- set by the window manager, which is an array of possible icon sizes
- for the client. There's no API in GTK+ 1.2[.x] for this; there may
- eventually be one either in GTK+ 2.0 or GNOME 2.0.
-
- Some window managers can be configured to take the window name
- specified by the WM_NAME property of a window or the resource
- or class name specified by the WM_CLASS property and base the
- choice of icon for the window on one of those; WM_CLASS for
- Ethereal's windows has a resource name of "ethereal" and a class
- name of "Ethereal". However, the way that's done is window-manager-
- specific, and there's no way to determine what size a particular
- window manager would want, so there's no way to automate this as
- part of the installation of Ethereal.
- */
-static void
-window_icon_realize_cb (GtkWidget *win, gpointer data _U_)
-{
-#ifndef _WIN32
- static GdkPixmap *icon_pmap = NULL;
- static GdkBitmap *icon_mask = NULL;
- GtkStyle *style;
-
- style = gtk_widget_get_style (win);
-
- if (icon_pmap == NULL) {
- icon_pmap = gdk_pixmap_create_from_xpm_d (win->window,
- &icon_mask, &style->bg[GTK_STATE_NORMAL], eicon3d16_xpm);
- }
-
- gdk_window_set_icon (win->window, NULL, icon_pmap, icon_mask);
-#endif
-}
-
-
-/* Create a new window, of the specified type, with the specified title
- (if any) and the Ethereal icon. */
-GtkWidget *
-window_new(GtkWindowType type, const gchar *title)
-{
- GtkWidget *win;
-
- win = gtk_window_new(type);
- if (title != NULL)
- gtk_window_set_title(GTK_WINDOW(win), title);
- SIGNAL_CONNECT(win, "realize", window_icon_realize_cb, NULL);
-
- /* XXX - which one is the correct default policy? or use a preference for this? */
- /* GTK_WIN_POS_NONE, GTK_WIN_POS_CENTER or GTK_WIN_POS_MOUSE */
- /* a lot of people dislike GTK_WIN_POS_MOUSE */
-
- /* set the initial position (must be done, before show is called!) */
-#if GTK_MAJOR_VERSION >= 2
-/* gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER_ON_PARENT);*/
-#else
-/* gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);*/
-#endif
- gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_NONE);
-
-#if GTK_MAJOR_VERSION < 2
- /* allow window to be shrinked by user, as gtk_widget_set_usize() will set minimum size and */
- /* the user never could shrink the window again */
- gtk_window_set_policy(GTK_WINDOW(win), TRUE, TRUE, FALSE);
-#endif
-
- return win;
-}
-
-
-/* Same as window_new(), but will keep it's geometry values (size, position, ...).
- * Be sure to use window_present() and window_destroy() appropriately! */
-GtkWidget *
-window_new_with_geom(GtkWindowType type, const gchar *title, const gchar *geom_name)
-{
- window_geometry_t geom;
- GtkWidget *win = window_new(type, title);
-
- OBJECT_SET_DATA(win, WINDOW_GEOM_KEY, (gpointer)g_strdup(geom_name));
-
- /* do we have a previously saved size and position of this window? */
- if(geom_name) {
- /* It's a good idea to set the position and size of the window already here,
- * as it's still invisible and won't "flicker the screen" while initially resizing. */
- if(window_geom_load(geom_name, &geom)) {
- /* XXX - use prefs to select which values to set? */
- geom.set_pos = TRUE;
- geom.set_size = TRUE;
- geom.set_maximized = FALSE; /* don't maximize until window is shown */
- window_set_geometry(win, &geom);
- }
- }
-
- return win;
-}
-
-
-#if GTK_MAJOR_VERSION < 2
-/* We can't set the decorations until the window is realized. */
-static void
-window_notitle_realize_cb (GtkWidget *win, gpointer data _U_)
-{
- gdk_window_set_decorations(win->window, 0);
-}
-#endif
-
-
-/* Create a new window for a splash screen; it's a main window, with no title,
- positioned in the center of the screen. */
-GtkWidget *
-splash_window_new(void)
-{
- GtkWidget *win;
-
- win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-#if GTK_MAJOR_VERSION >= 2
- gtk_window_set_decorated(GTK_WINDOW(win), FALSE);
-#else
- SIGNAL_CONNECT(win, "realize", window_notitle_realize_cb, NULL);
-#endif
-
- /* set the initial position (must be done, before show is called!) */
- gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);
-
- return win;
-}
-
-
-/* Present the created window on the screen. */
-void
-window_present(GtkWidget *win)
-{
- window_geometry_t geom;
- const gchar *name;
-
-#if GTK_MAJOR_VERSION >= 2
- /* present this window */
- gtk_window_present(GTK_WINDOW(win));
-#endif
-
- /* do we have a previously saved size and position of this window? */
- name = OBJECT_GET_DATA(win, WINDOW_GEOM_KEY);
- if(name) {
- if(window_geom_load(name, &geom)) {
- /* XXX - use prefs to select which values to set? */
- geom.set_pos = TRUE;
- geom.set_size = TRUE;
- geom.set_maximized = TRUE;
- window_set_geometry(win, &geom);
- }
- }
-}
-
-
-static gint
-window_key_press_cb (GtkWidget *widget, GdkEventKey *event, gpointer cancel_button)
-{
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
-
- if (event->keyval == GDK_Escape) {
- gtk_widget_activate(GTK_WIDGET(cancel_button));
- return TRUE;
- }
-
- return FALSE;
-}
-
-
-/* Set the "key_press_event" signal for a top-level dialog window to
- call a routine to activate the "Cancel" button for a dialog box if
- the key being pressed is the <Esc> key.
-
- XXX - there should be a GTK+ widget that'll do that for you, and
- let you specify a "Cancel" button. It should also not impose
- a requirement that there be a separator in the dialog box, as
- the GtkDialog widget does; the visual convention that there's
- such a separator between the rest of the dialog boxes and buttons
- such as "OK" and "Cancel" is, for better or worse, not universal
- (not even in GTK+ - look at the GtkFileSelection dialog!). */
-static void
-window_set_cancel(GtkWidget *widget, GtkWidget *cancel_button)
-{
- SIGNAL_CONNECT(widget, "key_press_event", window_key_press_cb, cancel_button);
-}
-
-
-/* set the actions needed for the cancel "Close"/"Ok"/"Cancel" button that closes the window */
-void window_set_cancel_button(GtkWidget *win, GtkWidget *bt, window_cancel_button_fct cb)
-{
- if(cb)
- SIGNAL_CONNECT(bt, "clicked", cb, win);
-
- gtk_widget_grab_default(bt);
-
- window_set_cancel(win, bt);
-}
-
-
-/* default callback handler for cancel button "clicked" signal */
-void window_cancel_button_cb(GtkWidget *w _U_, gpointer data)
-{
- window_destroy(GTK_WIDGET(data));
-}
-
-
-/* default callback handler: the window managers X of the window was clicked (delete_event) */
-gboolean
-window_delete_event_cb(GtkWidget *win, GdkEvent *event _U_, gpointer user_data _U_)
-{
- window_destroy(win);
-
- /* event handled, don't do anything else */
- return TRUE;
-}
-
-
-/* get the geometry of a window from window_new() */
-void
-window_get_geometry(GtkWidget *widget, window_geometry_t *geom)
-{
- gint desk_x, desk_y;
-#if GTK_MAJOR_VERSION >= 2
- GdkWindowState state;
-#endif
-
- /* Try to grab our geometry.
-
- GTK+ provides two routines to get a window's position relative
- to the X root window. If I understand the documentation correctly,
- gdk_window_get_deskrelative_origin applies mainly to Enlightenment
- and gdk_window_get_root_origin applies for all other WMs.
-
- The code below tries both routines, and picks the one that returns
- the upper-left-most coordinates.
-
- More info at:
-
- http://mail.gnome.org/archives/gtk-devel-list/2001-March/msg00289.html
- http://www.gtk.org/faq/#AEN606
- */
-
- gdk_window_get_root_origin(widget->window,
- &geom->x,
- &geom->y);
- if (gdk_window_get_deskrelative_origin(widget->window,
- &desk_x, &desk_y)) {
- if (desk_x <= geom->x &&
- desk_y <= geom->y)
- {
- geom->x = desk_x;
- geom->y = desk_y;
- }
- }
-
- /* XXX - Is this the "approved" method? */
- gdk_window_get_size(widget->window,
- &geom->width,
- &geom->height);
-
-#if GTK_MAJOR_VERSION >= 2
- state = gdk_window_get_state(widget->window);
- geom->maximized = (state == GDK_WINDOW_STATE_MAXIMIZED);
-#endif
-}
-
-
-/* set the geometry of a window from window_new() */
-void
-window_set_geometry(GtkWidget *widget, window_geometry_t *geom)
-{
- /* as we now have the geometry from the recent file, set it */
- if (geom->set_pos) {
- gtk_widget_set_uposition(widget,
- geom->x,
- geom->y);
- }
-
- if (geom->set_size) {
-#if GTK_MAJOR_VERSION >= 2
- gtk_window_resize(GTK_WINDOW(widget),
-#else
- gtk_window_set_default_size(GTK_WINDOW(widget),
- geom->width,
- geom->height);
- gtk_widget_set_usize(widget,
-#endif
- /*WIDGET_SET_SIZE(widget,*/
- geom->width,
- geom->height);
- }
-
-#if GTK_MAJOR_VERSION >= 2
- if(geom->set_maximized) {
- if (geom->maximized) {
- gdk_window_maximize(widget->window);
- } else {
- gdk_window_unmaximize(widget->window);
- }
- }
-#endif
-}
-
-
-/* the geometry hashtable for all known window classes,
- * the window name is the key, and the geometry struct is the value */
-GHashTable *window_geom_hash = NULL;
-
-
-/* save the window and it's current geometry into the geometry hashtable */
-static void
-window_geom_save(const gchar *name, window_geometry_t *geom)
-{
- gchar *key;
- window_geometry_t *work;
-
- /* init hashtable, if not already done */
- if(!window_geom_hash) {
- window_geom_hash = g_hash_table_new (g_str_hash, g_str_equal);
- }
- /* if we have an old one, remove and free it first */
- work = g_hash_table_lookup(window_geom_hash, name);
- if(work) {
- g_hash_table_remove(window_geom_hash, name);
- g_free(work->key);
- g_free(work);
- }
-
- /* g_malloc and insert the new one */
- work = g_malloc(sizeof(*geom));
- *work = *geom;
- key = g_strdup(name);
- work->key = key;
- g_hash_table_insert(window_geom_hash, key, work);
-}
-
-
-/* load the desired geometry for this window from the geometry hashtable */
-static gboolean
-window_geom_load(const gchar *name, window_geometry_t *geom)
-{
- window_geometry_t *p;
-
- /* init hashtable, if not already done */
- if(!window_geom_hash) {
- window_geom_hash = g_hash_table_new (g_str_hash, g_str_equal);
- }
-
- p = g_hash_table_lookup(window_geom_hash, name);
- if(p) {
- *geom = *p;
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-
-/* read in a single key value pair from the recent file into the geometry hashtable */
-void
-window_geom_recent_read_pair(const char *name, const char *key, const char *value)
-{
- window_geometry_t geom;
-
-
- /* find window geometry maybe already in hashtable */
- if(!window_geom_load(name, &geom)) {
- /* not in table, init geom with "basic" values */
- geom.key = g_strdup(name);
- geom.set_pos = FALSE;
- geom.x = -1;
- geom.y = -1;
- geom.set_size = FALSE;
- geom.width = -1;
- geom.height = -1;
-
- geom.set_maximized = FALSE;/* this is valid in GTK2 only */
- geom.maximized = FALSE; /* this is valid in GTK2 only */
- }
-
- if (strcmp(key, "x") == 0) {
- geom.x = strtol(value, NULL, 10);
- geom.set_pos = TRUE;
- } else if (strcmp(key, "y") == 0) {
- geom.y = strtol(value, NULL, 10);
- geom.set_pos = TRUE;
- } else if (strcmp(key, "width") == 0) {
- geom.width = strtol(value, NULL, 10);
- geom.set_size = TRUE;
- } else if (strcmp(key, "height") == 0) {
- geom.height = strtol(value, NULL, 10);
- geom.set_size = TRUE;
- } else if (strcmp(key, "maximized") == 0) {
- if (strcasecmp(value, "true") == 0) {
- geom.maximized = TRUE;
- }
- else {
- geom.maximized = FALSE;
- }
- geom.set_maximized = TRUE;
- } else {
- g_assert_not_reached();
- }
-
- /* save / replace geometry in hashtable */
- window_geom_save(name, &geom);
-}
-
-
-/* write all geometry values of all windows from the hashtable to the recent file */
-void
-window_geom_recent_write_all(gpointer rf)
-{
- /* init hashtable, if not already done */
- if(!window_geom_hash) {
- window_geom_hash = g_hash_table_new (g_str_hash, g_str_equal);
- }
-
- g_hash_table_foreach(window_geom_hash, write_recent_geom, rf);
-}
-
-
-void
-window_destroy(GtkWidget *win)
-{
- window_geometry_t geom;
- const gchar *name;
-
- /* get_geometry must be done *before* destroy is running, as the window geometry
- * cannot be retrieved at destroy time (so don't use event "destroy" for this) */
- /* ...and don't do this at all, if we currently have no GdkWindow (e.g. if the
- * GtkWidget is hidden) */
- if(!GTK_WIDGET_NO_WINDOW(win) && GTK_WIDGET_VISIBLE(win)) {
- window_get_geometry(win, &geom);
-
- name = OBJECT_GET_DATA(win, WINDOW_GEOM_KEY);
- if(name) {
- window_geom_save(name, &geom);
- g_free((gpointer)name);
- }
- }
-
- gtk_widget_destroy(win);
-}
-
-
-/* convert an xpm to a GtkWidget, using the window settings from it's parent */
-/* (be sure that the parent window is already being displayed) */
-GtkWidget *xpm_to_widget_from_parent(GtkWidget *parent, const char ** xpm) {
-#if GTK_MAJOR_VERSION < 2
- GdkPixmap *icon;
- GdkBitmap * mask;
-
-
- icon = gdk_pixmap_create_from_xpm_d(parent->window, &mask, &parent->style->white, (char **) xpm);
- return gtk_pixmap_new(icon, mask);
-#else
- GdkPixbuf * pixbuf;
- GdkPixmap * pixmap;
- GdkBitmap * bitmap;
-
-
- pixbuf = gdk_pixbuf_new_from_xpm_data(xpm);
- gdk_pixbuf_render_pixmap_and_mask_for_colormap (pixbuf, gtk_widget_get_colormap(parent), &pixmap, &bitmap, 128);
-
- return gtk_image_new_from_pixmap (pixmap, bitmap);
-#endif
-}
-
-
-/* convert an xpm to a GtkWidget, using the top_level window settings */
-/* (be sure that the top_level window is already being displayed) */
-GtkWidget *xpm_to_widget(const char ** xpm) {
- return xpm_to_widget_from_parent(top_level, xpm);
-}
-
-
-/* Set the name of the top-level window and its icon to the specified
- string. */
-void
-set_main_window_name(gchar *window_name)
-{
- gchar *title;
-
- /* use user-defined window title if preference is set */
- title = create_user_window_title(window_name);
- gtk_window_set_title(GTK_WINDOW(top_level), title);
- gdk_window_set_icon_name(top_level->window, title);
- g_free(title);
-}
-
-
-/* update the main window */
-void main_window_update(void)
-{
- while (gtk_events_pending()) gtk_main_iteration();
-}
-
-#ifdef HAVE_LIBPCAP
-
-/* exit the main window */
-void main_window_exit(void)
-{
- gtk_exit(0);
-}
-
-/* quit a nested main window */
-void main_window_nested_quit(void)
-{
- if (gtk_main_level() > 0)
- gtk_main_quit();
-}
-
-/* quit the main window */
-void main_window_quit(void)
-{
- gtk_main_quit();
-}
-
-
-
-typedef struct pipe_input_tag {
- gint source;
- gpointer user_data;
- int *child_process;
- pipe_input_cb_t input_cb;
- guint pipe_input_id;
-} pipe_input_t;
-
-
-#ifdef _WIN32
-/* The timer has expired, see if there's stuff to read from the pipe,
- if so, do the callback */
-static gint
-pipe_timer_cb(gpointer data)
-{
- HANDLE handle;
- DWORD avail = 0;
- gboolean result, result1;
- DWORD childstatus;
- pipe_input_t *pipe_input = data;
-
-
- /* Oddly enough although Named pipes don't work on win9x,
- PeekNamedPipe does !!! */
- handle = (HANDLE) _get_osfhandle (pipe_input->source);
- result = PeekNamedPipe(handle, NULL, 0, NULL, &avail, NULL);
-
- /* Get the child process exit status */
- result1 = GetExitCodeProcess((HANDLE)*(pipe_input->child_process),
- &childstatus);
-
- /* If the Peek returned an error, or there are bytes to be read
- or the childwatcher thread has terminated then call the normal
- callback */
- if (!result || avail > 0 || childstatus != STILL_ACTIVE) {
-
- /* avoid reentrancy problems and stack overflow */
- gtk_timeout_remove(pipe_input->pipe_input_id);
-
- /* And call the real handler */
- if (pipe_input->input_cb(pipe_input->source, pipe_input->user_data)) {
- /* restore pipe handler */
- pipe_input->pipe_input_id = gtk_timeout_add(200, pipe_timer_cb, data);
- }
-
- /* Return false so that this timer is not run again */
- return FALSE;
- }
- else {
- /* No data so let timer run again */
- return TRUE;
- }
-}
-
-#else /* _WIN32 */
-
-/* There's stuff to read from the sync pipe, meaning the child has sent
- us a message, or the sync pipe has closed, meaning the child has
- closed it (perhaps because it exited). */
-static void
-pipe_input_cb(gpointer data, gint source _U_,
- GdkInputCondition condition _U_)
-{
- pipe_input_t *pipe_input = data;
-
-
- /* avoid reentrancy problems and stack overflow */
- gtk_input_remove(pipe_input->pipe_input_id);
-
- if (pipe_input->input_cb(source, pipe_input->user_data)) {
- /* restore pipe handler */
- pipe_input->pipe_input_id = gtk_input_add_full (source,
- GDK_INPUT_READ|GDK_INPUT_EXCEPTION,
- pipe_input_cb,
- NULL,
- data,
- NULL);
- }
-}
-#endif
-
-void pipe_input_set_handler(gint source, gpointer user_data, int *child_process, pipe_input_cb_t input_cb)
-{
- static pipe_input_t pipe_input;
-
- pipe_input.source = source;
- pipe_input.child_process = child_process;
- pipe_input.user_data = user_data;
- pipe_input.input_cb = input_cb;
-
-#ifdef _WIN32
- /* Tricky to use pipes in win9x, as no concept of wait. NT can
- do this but that doesn't cover all win32 platforms. GTK can do
- this but doesn't seem to work over processes. Attempt to do
- something similar here, start a timer and check for data on every
- timeout. */
- pipe_input.pipe_input_id = gtk_timeout_add(200, pipe_timer_cb, &pipe_input);
-#else
- pipe_input.pipe_input_id = gtk_input_add_full(source,
- GDK_INPUT_READ|GDK_INPUT_EXCEPTION,
- pipe_input_cb,
- NULL,
- &pipe_input,
- NULL);
-#endif
-}
-
-
-#endif /* HAVE_LIBPCAP */
-
-/* Given a pointer to a GtkWidget for a top-level window, raise it and
- de-iconify it. This routine is used if the user has done something to
- ask that a window of a certain type be popped up when there can be only
- one such window and such a window has already been popped up - we
- pop up the existing one rather than creating a new one.
-
- XXX - we should request that it be given the input focus, too. Alas,
- GDK has nothing to do that, e.g. by calling "XSetInputFocus()" in a
- window in X. Besides, using "XSetInputFocus()" doesn't work anyway,
- apparently due to the way GTK+/GDK manages the input focus.
-
- The X Desktop Group's Window Manager Standard specifies, in the section
- on Root Window Properties, an _NET_ACTIVE_WINDOW client message that
- can be sent to the root window, containing the window ID of the
- window to activate; I infer that this might be the way to give the
- window the input focus - I assume that means it's also de-iconified,
- but I wouldn't assume it'd raise it.
-
- XXX - will this do the right thing on window systems other than X? */
-void
-reactivate_window(GtkWidget *win)
-{
- gdk_window_show(win->window);
- gdk_window_raise(win->window);
-}
-
-/* List of all GtkScrolledWindows, so we can globally set the scrollbar
- placement of all of them. */
-static GList *scrolled_windows;
-
-static void setup_scrolled_window(GtkWidget *scrollw);
-static void forget_scrolled_window(GtkWidget *scrollw, gpointer data);
-static void set_scrollbar_placement_scrollw(GtkWidget *scrollw);
-
-/* Create a GtkScrolledWindow, set its scrollbar placement appropriately,
- and remember it. */
-GtkWidget *
-scrolled_window_new(GtkAdjustment *hadjustment, GtkAdjustment *vadjustment)
-{
- GtkWidget *scrollw;
-
- scrollw = gtk_scrolled_window_new(hadjustment, vadjustment);
- setup_scrolled_window(scrollw);
- return scrollw;
-}
-
-/* Set a GtkScrolledWindow's scrollbar placement and add it to the list
- of GtkScrolledWindows. */
-static void
-setup_scrolled_window(GtkWidget *scrollw)
-{
- set_scrollbar_placement_scrollw(scrollw);
-
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollw),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
- scrolled_windows = g_list_append(scrolled_windows, scrollw);
-
- /* Catch the "destroy" event on the widget, so that we remove it from
- the list when it's destroyed. */
- SIGNAL_CONNECT(scrollw, "destroy", forget_scrolled_window, NULL);
-}
-
-/* Remove a GtkScrolledWindow from the list of GtkScrolledWindows. */
-static void
-forget_scrolled_window(GtkWidget *scrollw, gpointer data _U_)
-{
- scrolled_windows = g_list_remove(scrolled_windows, scrollw);
-}
-
-/* Set the scrollbar placement of a GtkScrolledWindow based upon user
- preference. */
-static void
-set_scrollbar_placement_scrollw(GtkWidget *scrollw)
-{
- if (prefs.gui_scrollbar_on_right) {
- gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(scrollw),
- GTK_CORNER_TOP_LEFT);
- } else {
- gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(scrollw),
- GTK_CORNER_TOP_RIGHT);
- }
-}
-
-static void
-set_scrollbar_placement_cb(gpointer data, gpointer user_data _U_)
-{
- set_scrollbar_placement_scrollw((GtkWidget *)data);
-}
-
-/* Set the scrollbar placement of all GtkScrolledWindows based on
- user preference. */
-void
-set_scrollbar_placement_all(void)
-{
- g_list_foreach(scrolled_windows, set_scrollbar_placement_cb, NULL);
-}
-
-/* List of all CTrees/TreeViews, so we can globally set the line and
- * expander style of all of them. */
-static GList *trees;
-
-static void setup_tree(GtkWidget *tree);
-static void forget_tree(GtkWidget *tree, gpointer data);
-static void set_tree_styles(GtkWidget *tree);
-
-/* Create a Tree, give it the right styles, and remember it. */
-#if GTK_MAJOR_VERSION < 2
-GtkWidget *
-ctree_new(gint columns, gint tree_column)
-#else
-GtkWidget *
-tree_view_new(GtkTreeModel *model)
-#endif
-{
- GtkWidget *tree;
-
-#if GTK_MAJOR_VERSION < 2
- tree = gtk_ctree_new(columns, tree_column);
-#else
- tree = gtk_tree_view_new_with_model(model);
-#endif
- setup_tree(tree);
- return tree;
-}
-
-#if GTK_MAJOR_VERSION < 2
-GtkWidget *
-ctree_new_with_titles(gint columns, gint tree_column, const gchar *titles[])
-{
- GtkWidget *tree;
-
- tree = gtk_ctree_new_with_titles(columns, tree_column, (gchar **) titles);
- setup_tree(tree);
- return tree;
-}
-#endif
-
-/* Set a Tree's styles and add it to the list of Trees. */
-static void
-setup_tree(GtkWidget *tree)
-{
- set_tree_styles(tree);
-
- trees = g_list_append(trees, tree);
-
- /* Catch the "destroy" event on the widget, so that we remove it from
- the list when it's destroyed. */
- SIGNAL_CONNECT(tree, "destroy", forget_tree, NULL);
-}
-
-/* Remove a Tree from the list of Trees. */
-static void
-forget_tree(GtkWidget *tree, gpointer data _U_)
-{
- trees = g_list_remove(trees, tree);
-}
-
-/* Set the styles of a Tree based upon user preferences. */
-static void
-set_tree_styles(GtkWidget *tree)
-{
-#if GTK_MAJOR_VERSION < 2
- g_assert(prefs.gui_ptree_line_style >= GTK_CTREE_LINES_NONE &&
- prefs.gui_ptree_line_style <= GTK_CTREE_LINES_TABBED);
- gtk_ctree_set_line_style(GTK_CTREE(tree), prefs.gui_ptree_line_style);
- g_assert(prefs.gui_ptree_expander_style >= GTK_CTREE_EXPANDER_NONE &&
- prefs.gui_ptree_expander_style <= GTK_CTREE_EXPANDER_CIRCULAR);
- gtk_ctree_set_expander_style(GTK_CTREE(tree),
- prefs.gui_ptree_expander_style);
-#else
- g_assert(prefs.gui_altern_colors >= 0 && prefs.gui_altern_colors <= 1);
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree),
- prefs.gui_altern_colors);
-#endif
-}
-
-static void
-set_tree_styles_cb(gpointer data, gpointer user_data _U_)
-{
- set_tree_styles((GtkWidget *)data);
-}
-
-/* Set the styles of all Trees based upon style values. */
-void
-set_tree_styles_all(void)
-{
- g_list_foreach(trees, set_tree_styles_cb, NULL);
-}
-
-
-
-
-#if GTK_MAJOR_VERSION < 2
-/* convert variable argument list of values to array of strings (GTK2 -> GTK1) */
-static void
-simple_list_convert(gchar **ent, va_list ap)
-{
- int i;
- char *s;
-
- while( (i = va_arg(ap, int)) != -1 ) {
- s = va_arg(ap, char *);
- ent[i] = s;
- }
-}
-#endif
-
-
-/* append a row to the simple list */
-/* use it like: simple_list_append(list, 0, "first", 1, "second", -1) */
-void
-simple_list_append(GtkWidget *list, ...)
-{
- va_list ap;
-
-#if GTK_MAJOR_VERSION < 2
- gchar *ent[10]; /* new entry added in clist */
-#else
- GtkTreeIter iter;
- GtkListStore *store;
-#endif
-
- va_start(ap, list);
-#if GTK_MAJOR_VERSION < 2
- simple_list_convert(ent, ap);
- gtk_clist_append(GTK_CLIST(list), ent);
-#else
- store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)));
- gtk_list_store_append(store, &iter);
- gtk_list_store_set_valist(store, &iter, ap);
-#endif
- va_end(ap);
-}
-
-/* create a simple list widget */
-GtkWidget *
-simple_list_new(gint cols, const gchar **titles) {
- GtkWidget *plugins_list;
-#if GTK_MAJOR_VERSION >= 2
- int i;
- GtkListStore *store;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
-#endif
-
-
-#if GTK_MAJOR_VERSION < 2
- plugins_list = gtk_clist_new_with_titles(cols, (gchar **) titles);
- gtk_clist_set_selection_mode(GTK_CLIST(plugins_list), GTK_SELECTION_SINGLE);
- gtk_clist_column_titles_passive(GTK_CLIST(plugins_list));
- if(titles) {
- gtk_clist_column_titles_show(GTK_CLIST(plugins_list));
- } else {
- gtk_clist_column_titles_hide(GTK_CLIST(plugins_list));
- }
- gtk_clist_set_column_auto_resize(GTK_CLIST(plugins_list), 0, TRUE);
- gtk_clist_set_column_auto_resize(GTK_CLIST(plugins_list), 1, TRUE);
-#else
- g_assert(cols <= 10);
- store = gtk_list_store_new(cols,
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
- plugins_list = tree_view_new(GTK_TREE_MODEL(store));
- g_object_unref(G_OBJECT(store));
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(plugins_list), (titles != NULL));
- for(i=0; i<cols; i++) {
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(titles ? titles[i] : "", renderer,
- "text", i, NULL);
- gtk_tree_view_column_set_sort_column_id(column, i);
- gtk_tree_view_append_column(GTK_TREE_VIEW(plugins_list), column);
- }
-#endif
-
- return plugins_list;
-}
-
-extern void
-copy_to_clipboard(GString *str)
-{
-#if (GTK_MAJOR_VERSION >= 2)
- GtkClipboard *cb;
-
- cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); /* Get the default clipboard */
- gtk_clipboard_set_text(cb, str->str, -1); /* Copy the byte data into the clipboard */
-#else
- GtkWidget *window;
- GtkWidget *text;
-
- window = window_new (GTK_WINDOW_TOPLEVEL,"");
- text = gtk_text_new (NULL, NULL); /* Create the GtkText widget */
- gtk_container_add (GTK_CONTAINER (window), text); /* Avoid a GTK assertion */
- gtk_widget_realize (text); /* Realizing a widget creates a window for it, ready for us to insert some text */
- gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, str->str, -1);
- gtk_editable_select_region((GtkEditable *)text, 0, -1); /* Select ALL text */
- gtk_editable_copy_clipboard((GtkEditable *)text); /* Copy the byte data into the clipboard */
-#endif
-}
-
-/*
- * Create a new window title string with user-defined title preference.
- * (Or ignore it if unspecified).
- */
-gchar *
-create_user_window_title(const gchar *caption)
-{
- /* fail-safe */
- if (caption == NULL)
- return g_strdup("");
-
- /* no user-defined title specified */
- if ((prefs.gui_window_title == NULL) || (*prefs.gui_window_title == '\0'))
- return g_strdup(caption);
-
- return g_strdup_printf("%s %s", prefs.gui_window_title, caption);
-}
+/* ui_util.c
+ * UI utility routines
+ *
+ * $Id: ui_util.c 15286 2005-08-10 19:49:45Z ulfl $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+#ifdef HAVE_IO_H
+# include <io.h>
+#endif
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "gtkglobals.h"
+#include "gui_utils.h"
+#include <epan/prefs.h>
+#include "epan/epan.h"
+#include "../ui_util.h"
+#include "compat_macros.h"
+#include "recent.h"
+
+
+#include "image/eicon3d16.xpm"
+
+/* XXX - remove this later again, when dlg_xx function cleanup done */
+#include "dlg_utils.h"
+
+
+#define WINDOW_GEOM_KEY "window_geom"
+
+
+/* load the geometry values for a window from previously saved values */
+static gboolean window_geom_load(const gchar *name, window_geometry_t *geom);
+
+
+
+/* Set our window icon. The GDK documentation doesn't provide any
+ actual documentation for gdk_window_set_icon(), so we'll steal
+ libgimp/gimpdialog.c:gimp_dialog_realize_callback() from the Gimp
+ sources and assume it's safe.
+
+ XXX - The current icon size is fixed at 16x16 pixels, which looks fine
+ with kwm (KDE 1.x's window manager), Sawfish (the "default" window
+ manager for GNOME?), and under Windows with Exceed putting X windows
+ on the Windows desktop, using Exceed as the window manager, as those
+ window managers put a 16x16 icon on the title bar.
+
+ The window managers in some windowing environments (e.g. dtwm in CDE)
+ and some stand-alone window managers have larger icon sizes (many window
+ managers put the window icon on the desktop, in the Windows 3.x style,
+ rather than in the titlebar, in the Windows 4.x style), so we need to
+ find a way to size our icon appropriately.
+
+ The X11 Inter-Client Communications Conventions Manual, Version 1.1,
+ in X11R5, specifies that "a window manager that wishes to place
+ constraints on the sizes of icon pixmaps and/or windows should
+ place a property called WM_ICON_SIZE on the root"; that property
+ contains minimum width and height, maximum width and height, and
+ width and height increment values. "XGetIconSizes()" retrieves
+ that property; unfortunately, I've yet to find a window manager
+ that sets it on the root window (kwm, AfterStep, and Exceed don't
+ appear to set it).
+
+ The X Desktop Group's Window Manager Standard specifies, in the section
+ on Application Window Properties, an _NET_WM_ICON property, presumably
+ set by the window manager, which is an array of possible icon sizes
+ for the client. There's no API in GTK+ 1.2[.x] for this; there may
+ eventually be one either in GTK+ 2.0 or GNOME 2.0.
+
+ Some window managers can be configured to take the window name
+ specified by the WM_NAME property of a window or the resource
+ or class name specified by the WM_CLASS property and base the
+ choice of icon for the window on one of those; WM_CLASS for
+ Ethereal's windows has a resource name of "ethereal" and a class
+ name of "Ethereal". However, the way that's done is window-manager-
+ specific, and there's no way to determine what size a particular
+ window manager would want, so there's no way to automate this as
+ part of the installation of Ethereal.
+ */
+static void
+window_icon_realize_cb (GtkWidget *win, gpointer data _U_)
+{
+#ifndef _WIN32
+ static GdkPixmap *icon_pmap = NULL;
+ static GdkBitmap *icon_mask = NULL;
+ GtkStyle *style;
+
+ style = gtk_widget_get_style (win);
+
+ if (icon_pmap == NULL) {
+ icon_pmap = gdk_pixmap_create_from_xpm_d (win->window,
+ &icon_mask, &style->bg[GTK_STATE_NORMAL], eicon3d16_xpm);
+ }
+
+ gdk_window_set_icon (win->window, NULL, icon_pmap, icon_mask);
+#endif
+}
+
+
+/* Create a new window, of the specified type, with the specified title
+ (if any) and the Ethereal icon. */
+GtkWidget *
+window_new(GtkWindowType type, const gchar *title)
+{
+ GtkWidget *win;
+
+ win = gtk_window_new(type);
+ if (title != NULL)
+ gtk_window_set_title(GTK_WINDOW(win), title);
+ SIGNAL_CONNECT(win, "realize", window_icon_realize_cb, NULL);
+
+ /* XXX - which one is the correct default policy? or use a preference for this? */
+ /* GTK_WIN_POS_NONE, GTK_WIN_POS_CENTER or GTK_WIN_POS_MOUSE */
+ /* a lot of people dislike GTK_WIN_POS_MOUSE */
+
+ /* set the initial position (must be done, before show is called!) */
+#if GTK_MAJOR_VERSION >= 2
+/* gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER_ON_PARENT);*/
+#else
+/* gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);*/
+#endif
+ gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_NONE);
+
+#if GTK_MAJOR_VERSION < 2
+ /* allow window to be shrinked by user, as gtk_widget_set_usize() will set minimum size and */
+ /* the user never could shrink the window again */
+ gtk_window_set_policy(GTK_WINDOW(win), TRUE, TRUE, FALSE);
+#endif
+
+ return win;
+}
+
+
+/* Same as window_new(), but will keep it's geometry values (size, position, ...).
+ * Be sure to use window_present() and window_destroy() appropriately! */
+GtkWidget *
+window_new_with_geom(GtkWindowType type, const gchar *title, const gchar *geom_name)
+{
+ window_geometry_t geom;
+ GtkWidget *win = window_new(type, title);
+
+ OBJECT_SET_DATA(win, WINDOW_GEOM_KEY, (gpointer)g_strdup(geom_name));
+
+ /* do we have a previously saved size and position of this window? */
+ if(geom_name) {
+ /* It's a good idea to set the position and size of the window already here,
+ * as it's still invisible and won't "flicker the screen" while initially resizing. */
+ if(window_geom_load(geom_name, &geom)) {
+ /* XXX - use prefs to select which values to set? */
+ geom.set_pos = TRUE;
+ geom.set_size = TRUE;
+ geom.set_maximized = FALSE; /* don't maximize until window is shown */
+ window_set_geometry(win, &geom);
+ }
+ }
+
+ return win;
+}
+
+
+#if GTK_MAJOR_VERSION < 2
+/* We can't set the decorations until the window is realized. */
+static void
+window_notitle_realize_cb (GtkWidget *win, gpointer data _U_)
+{
+ gdk_window_set_decorations(win->window, 0);
+}
+#endif
+
+
+/* Create a new window for a splash screen; it's a main window, with no title,
+ positioned in the center of the screen. */
+GtkWidget *
+splash_window_new(void)
+{
+ GtkWidget *win;
+
+ win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+#if GTK_MAJOR_VERSION >= 2
+ gtk_window_set_decorated(GTK_WINDOW(win), FALSE);
+#else
+ SIGNAL_CONNECT(win, "realize", window_notitle_realize_cb, NULL);
+#endif
+
+ /* set the initial position (must be done, before show is called!) */
+ gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);
+
+ return win;
+}
+
+
+/* Present the created window on the screen. */
+void
+window_present(GtkWidget *win)
+{
+ window_geometry_t geom;
+ const gchar *name;
+
+#if GTK_MAJOR_VERSION >= 2
+ /* present this window */
+ gtk_window_present(GTK_WINDOW(win));
+#endif
+
+ /* do we have a previously saved size and position of this window? */
+ name = OBJECT_GET_DATA(win, WINDOW_GEOM_KEY);
+ if(name) {
+ if(window_geom_load(name, &geom)) {
+ /* XXX - use prefs to select which values to set? */
+ geom.set_pos = TRUE;
+ geom.set_size = TRUE;
+ geom.set_maximized = TRUE;
+ window_set_geometry(win, &geom);
+ }
+ }
+}
+
+
+static gint
+window_key_press_cb (GtkWidget *widget, GdkEventKey *event, gpointer cancel_button)
+{
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ if (event->keyval == GDK_Escape) {
+ gtk_widget_activate(GTK_WIDGET(cancel_button));
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+/* Set the "key_press_event" signal for a top-level dialog window to
+ call a routine to activate the "Cancel" button for a dialog box if
+ the key being pressed is the <Esc> key.
+
+ XXX - there should be a GTK+ widget that'll do that for you, and
+ let you specify a "Cancel" button. It should also not impose
+ a requirement that there be a separator in the dialog box, as
+ the GtkDialog widget does; the visual convention that there's
+ such a separator between the rest of the dialog boxes and buttons
+ such as "OK" and "Cancel" is, for better or worse, not universal
+ (not even in GTK+ - look at the GtkFileSelection dialog!). */
+static void
+window_set_cancel(GtkWidget *widget, GtkWidget *cancel_button)
+{
+ SIGNAL_CONNECT(widget, "key_press_event", window_key_press_cb, cancel_button);
+}
+
+
+/* set the actions needed for the cancel "Close"/"Ok"/"Cancel" button that closes the window */
+void window_set_cancel_button(GtkWidget *win, GtkWidget *bt, window_cancel_button_fct cb)
+{
+ if(cb)
+ SIGNAL_CONNECT(bt, "clicked", cb, win);
+
+ gtk_widget_grab_default(bt);
+
+ window_set_cancel(win, bt);
+}
+
+
+/* default callback handler for cancel button "clicked" signal */
+void window_cancel_button_cb(GtkWidget *w _U_, gpointer data)
+{
+ window_destroy(GTK_WIDGET(data));
+}
+
+
+/* default callback handler: the window managers X of the window was clicked (delete_event) */
+gboolean
+window_delete_event_cb(GtkWidget *win, GdkEvent *event _U_, gpointer user_data _U_)
+{
+ window_destroy(win);
+
+ /* event handled, don't do anything else */
+ return TRUE;
+}
+
+
+/* get the geometry of a window from window_new() */
+void
+window_get_geometry(GtkWidget *widget, window_geometry_t *geom)
+{
+ gint desk_x, desk_y;
+#if GTK_MAJOR_VERSION >= 2
+ GdkWindowState state;
+#endif
+
+ /* Try to grab our geometry.
+
+ GTK+ provides two routines to get a window's position relative
+ to the X root window. If I understand the documentation correctly,
+ gdk_window_get_deskrelative_origin applies mainly to Enlightenment
+ and gdk_window_get_root_origin applies for all other WMs.
+
+ The code below tries both routines, and picks the one that returns
+ the upper-left-most coordinates.
+
+ More info at:
+
+ http://mail.gnome.org/archives/gtk-devel-list/2001-March/msg00289.html
+ http://www.gtk.org/faq/#AEN606
+ */
+
+ gdk_window_get_root_origin(widget->window,
+ &geom->x,
+ &geom->y);
+ if (gdk_window_get_deskrelative_origin(widget->window,
+ &desk_x, &desk_y)) {
+ if (desk_x <= geom->x &&
+ desk_y <= geom->y)
+ {
+ geom->x = desk_x;
+ geom->y = desk_y;
+ }
+ }
+
+ /* XXX - Is this the "approved" method? */
+ gdk_window_get_size(widget->window,
+ &geom->width,
+ &geom->height);
+
+#if GTK_MAJOR_VERSION >= 2
+ state = gdk_window_get_state(widget->window);
+ geom->maximized = (state == GDK_WINDOW_STATE_MAXIMIZED);
+#endif
+}
+
+
+/* set the geometry of a window from window_new() */
+void
+window_set_geometry(GtkWidget *widget, window_geometry_t *geom)
+{
+ /* as we now have the geometry from the recent file, set it */
+ if (geom->set_pos) {
+ gtk_widget_set_uposition(widget,
+ geom->x,
+ geom->y);
+ }
+
+ if (geom->set_size) {
+#if GTK_MAJOR_VERSION >= 2
+ gtk_window_resize(GTK_WINDOW(widget),
+#else
+ gtk_window_set_default_size(GTK_WINDOW(widget),
+ geom->width,
+ geom->height);
+ gtk_widget_set_usize(widget,
+#endif
+ /*WIDGET_SET_SIZE(widget,*/
+ geom->width,
+ geom->height);
+ }
+
+#if GTK_MAJOR_VERSION >= 2
+ if(geom->set_maximized) {
+ if (geom->maximized) {
+ gdk_window_maximize(widget->window);
+ } else {
+ gdk_window_unmaximize(widget->window);
+ }
+ }
+#endif
+}
+
+
+/* the geometry hashtable for all known window classes,
+ * the window name is the key, and the geometry struct is the value */
+GHashTable *window_geom_hash = NULL;
+
+
+/* save the window and it's current geometry into the geometry hashtable */
+static void
+window_geom_save(const gchar *name, window_geometry_t *geom)
+{
+ gchar *key;
+ window_geometry_t *work;
+
+ /* init hashtable, if not already done */
+ if(!window_geom_hash) {
+ window_geom_hash = g_hash_table_new (g_str_hash, g_str_equal);
+ }
+ /* if we have an old one, remove and free it first */
+ work = g_hash_table_lookup(window_geom_hash, name);
+ if(work) {
+ g_hash_table_remove(window_geom_hash, name);
+ g_free(work->key);
+ g_free(work);
+ }
+
+ /* g_malloc and insert the new one */
+ work = g_malloc(sizeof(*geom));
+ *work = *geom;
+ key = g_strdup(name);
+ work->key = key;
+ g_hash_table_insert(window_geom_hash, key, work);
+}
+
+
+/* load the desired geometry for this window from the geometry hashtable */
+static gboolean
+window_geom_load(const gchar *name, window_geometry_t *geom)
+{
+ window_geometry_t *p;
+
+ /* init hashtable, if not already done */
+ if(!window_geom_hash) {
+ window_geom_hash = g_hash_table_new (g_str_hash, g_str_equal);
+ }
+
+ p = g_hash_table_lookup(window_geom_hash, name);
+ if(p) {
+ *geom = *p;
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+
+/* read in a single key value pair from the recent file into the geometry hashtable */
+void
+window_geom_recent_read_pair(const char *name, const char *key, const char *value)
+{
+ window_geometry_t geom;
+
+
+ /* find window geometry maybe already in hashtable */
+ if(!window_geom_load(name, &geom)) {
+ /* not in table, init geom with "basic" values */
+ geom.key = g_strdup(name);
+ geom.set_pos = FALSE;
+ geom.x = -1;
+ geom.y = -1;
+ geom.set_size = FALSE;
+ geom.width = -1;
+ geom.height = -1;
+
+ geom.set_maximized = FALSE;/* this is valid in GTK2 only */
+ geom.maximized = FALSE; /* this is valid in GTK2 only */
+ }
+
+ if (strcmp(key, "x") == 0) {
+ geom.x = strtol(value, NULL, 10);
+ geom.set_pos = TRUE;
+ } else if (strcmp(key, "y") == 0) {
+ geom.y = strtol(value, NULL, 10);
+ geom.set_pos = TRUE;
+ } else if (strcmp(key, "width") == 0) {
+ geom.width = strtol(value, NULL, 10);
+ geom.set_size = TRUE;
+ } else if (strcmp(key, "height") == 0) {
+ geom.height = strtol(value, NULL, 10);
+ geom.set_size = TRUE;
+ } else if (strcmp(key, "maximized") == 0) {
+ if (strcasecmp(value, "true") == 0) {
+ geom.maximized = TRUE;
+ }
+ else {
+ geom.maximized = FALSE;
+ }
+ geom.set_maximized = TRUE;
+ } else {
+ g_assert_not_reached();
+ }
+
+ /* save / replace geometry in hashtable */
+ window_geom_save(name, &geom);
+}
+
+
+/* write all geometry values of all windows from the hashtable to the recent file */
+void
+window_geom_recent_write_all(gpointer rf)
+{
+ /* init hashtable, if not already done */
+ if(!window_geom_hash) {
+ window_geom_hash = g_hash_table_new (g_str_hash, g_str_equal);
+ }
+
+ g_hash_table_foreach(window_geom_hash, write_recent_geom, rf);
+}
+
+
+void
+window_destroy(GtkWidget *win)
+{
+ window_geometry_t geom;
+ const gchar *name;
+
+ /* get_geometry must be done *before* destroy is running, as the window geometry
+ * cannot be retrieved at destroy time (so don't use event "destroy" for this) */
+ /* ...and don't do this at all, if we currently have no GdkWindow (e.g. if the
+ * GtkWidget is hidden) */
+ if(!GTK_WIDGET_NO_WINDOW(win) && GTK_WIDGET_VISIBLE(win)) {
+ window_get_geometry(win, &geom);
+
+ name = OBJECT_GET_DATA(win, WINDOW_GEOM_KEY);
+ if(name) {
+ window_geom_save(name, &geom);
+ g_free((gpointer)name);
+ }
+ }
+
+ gtk_widget_destroy(win);
+}
+
+
+/* convert an xpm to a GtkWidget, using the window settings from it's parent */
+/* (be sure that the parent window is already being displayed) */
+GtkWidget *xpm_to_widget_from_parent(GtkWidget *parent, const char ** xpm) {
+#if GTK_MAJOR_VERSION < 2
+ GdkPixmap *icon;
+ GdkBitmap * mask;
+
+
+ icon = gdk_pixmap_create_from_xpm_d(parent->window, &mask, &parent->style->white, (char **) xpm);
+ return gtk_pixmap_new(icon, mask);
+#else
+ GdkPixbuf * pixbuf;
+ GdkPixmap * pixmap;
+ GdkBitmap * bitmap;
+
+
+ pixbuf = gdk_pixbuf_new_from_xpm_data(xpm);
+ gdk_pixbuf_render_pixmap_and_mask_for_colormap (pixbuf, gtk_widget_get_colormap(parent), &pixmap, &bitmap, 128);
+
+ return gtk_image_new_from_pixmap (pixmap, bitmap);
+#endif
+}
+
+
+/* convert an xpm to a GtkWidget, using the top_level window settings */
+/* (be sure that the top_level window is already being displayed) */
+GtkWidget *xpm_to_widget(const char ** xpm) {
+ return xpm_to_widget_from_parent(top_level, xpm);
+}
+
+
+/* Set the name of the top-level window and its icon to the specified
+ string. */
+void
+set_main_window_name(gchar *window_name)
+{
+ gchar *title;
+
+ /* use user-defined window title if preference is set */
+ title = create_user_window_title(window_name);
+ gtk_window_set_title(GTK_WINDOW(top_level), title);
+ gdk_window_set_icon_name(top_level->window, title);
+ g_free(title);
+}
+
+
+/* update the main window */
+void main_window_update(void)
+{
+ while (gtk_events_pending()) gtk_main_iteration();
+}
+
+#ifdef HAVE_LIBPCAP
+
+/* exit the main window */
+void main_window_exit(void)
+{
+ gtk_exit(0);
+}
+
+/* quit a nested main window */
+void main_window_nested_quit(void)
+{
+ if (gtk_main_level() > 0)
+ gtk_main_quit();
+}
+
+/* quit the main window */
+void main_window_quit(void)
+{
+ gtk_main_quit();
+}
+
+
+
+typedef struct pipe_input_tag {
+ gint source;
+ gpointer user_data;
+ int *child_process;
+ pipe_input_cb_t input_cb;
+ guint pipe_input_id;
+} pipe_input_t;
+
+
+#ifdef _WIN32
+/* The timer has expired, see if there's stuff to read from the pipe,
+ if so, do the callback */
+static gint
+pipe_timer_cb(gpointer data)
+{
+ HANDLE handle;
+ DWORD avail = 0;
+ gboolean result, result1;
+ DWORD childstatus;
+ pipe_input_t *pipe_input = data;
+
+
+ /* Oddly enough although Named pipes don't work on win9x,
+ PeekNamedPipe does !!! */
+ handle = (HANDLE) _get_osfhandle (pipe_input->source);
+ result = PeekNamedPipe(handle, NULL, 0, NULL, &avail, NULL);
+
+ /* Get the child process exit status */
+ result1 = GetExitCodeProcess((HANDLE)*(pipe_input->child_process),
+ &childstatus);
+
+ /* If the Peek returned an error, or there are bytes to be read
+ or the childwatcher thread has terminated then call the normal
+ callback */
+ if (!result || avail > 0 || childstatus != STILL_ACTIVE) {
+
+ /* avoid reentrancy problems and stack overflow */
+ gtk_timeout_remove(pipe_input->pipe_input_id);
+
+ /* And call the real handler */
+ if (pipe_input->input_cb(pipe_input->source, pipe_input->user_data)) {
+ /* restore pipe handler */
+ pipe_input->pipe_input_id = gtk_timeout_add(200, pipe_timer_cb, data);
+ }
+
+ /* Return false so that this timer is not run again */
+ return FALSE;
+ }
+ else {
+ /* No data so let timer run again */
+ return TRUE;
+ }
+}
+
+#else /* _WIN32 */
+
+/* There's stuff to read from the sync pipe, meaning the child has sent
+ us a message, or the sync pipe has closed, meaning the child has
+ closed it (perhaps because it exited). */
+static void
+pipe_input_cb(gpointer data, gint source _U_,
+ GdkInputCondition condition _U_)
+{
+ pipe_input_t *pipe_input = data;
+
+
+ /* avoid reentrancy problems and stack overflow */
+ gtk_input_remove(pipe_input->pipe_input_id);
+
+ if (pipe_input->input_cb(source, pipe_input->user_data)) {
+ /* restore pipe handler */
+ pipe_input->pipe_input_id = gtk_input_add_full (source,
+ GDK_INPUT_READ|GDK_INPUT_EXCEPTION,
+ pipe_input_cb,
+ NULL,
+ data,
+ NULL);
+ }
+}
+#endif
+
+void pipe_input_set_handler(gint source, gpointer user_data, int *child_process, pipe_input_cb_t input_cb)
+{
+ static pipe_input_t pipe_input;
+
+ pipe_input.source = source;
+ pipe_input.child_process = child_process;
+ pipe_input.user_data = user_data;
+ pipe_input.input_cb = input_cb;
+
+#ifdef _WIN32
+ /* Tricky to use pipes in win9x, as no concept of wait. NT can
+ do this but that doesn't cover all win32 platforms. GTK can do
+ this but doesn't seem to work over processes. Attempt to do
+ something similar here, start a timer and check for data on every
+ timeout. */
+ pipe_input.pipe_input_id = gtk_timeout_add(200, pipe_timer_cb, &pipe_input);
+#else
+ pipe_input.pipe_input_id = gtk_input_add_full(source,
+ GDK_INPUT_READ|GDK_INPUT_EXCEPTION,
+ pipe_input_cb,
+ NULL,
+ &pipe_input,
+ NULL);
+#endif
+}
+
+
+#endif /* HAVE_LIBPCAP */
+
+/* Given a pointer to a GtkWidget for a top-level window, raise it and
+ de-iconify it. This routine is used if the user has done something to
+ ask that a window of a certain type be popped up when there can be only
+ one such window and such a window has already been popped up - we
+ pop up the existing one rather than creating a new one.
+
+ XXX - we should request that it be given the input focus, too. Alas,
+ GDK has nothing to do that, e.g. by calling "XSetInputFocus()" in a
+ window in X. Besides, using "XSetInputFocus()" doesn't work anyway,
+ apparently due to the way GTK+/GDK manages the input focus.
+
+ The X Desktop Group's Window Manager Standard specifies, in the section
+ on Root Window Properties, an _NET_ACTIVE_WINDOW client message that
+ can be sent to the root window, containing the window ID of the
+ window to activate; I infer that this might be the way to give the
+ window the input focus - I assume that means it's also de-iconified,
+ but I wouldn't assume it'd raise it.
+
+ XXX - will this do the right thing on window systems other than X? */
+void
+reactivate_window(GtkWidget *win)
+{
+ gdk_window_show(win->window);
+ gdk_window_raise(win->window);
+}
+
+/* List of all GtkScrolledWindows, so we can globally set the scrollbar
+ placement of all of them. */
+static GList *scrolled_windows;
+
+static void setup_scrolled_window(GtkWidget *scrollw);
+static void forget_scrolled_window(GtkWidget *scrollw, gpointer data);
+static void set_scrollbar_placement_scrollw(GtkWidget *scrollw);
+
+/* Create a GtkScrolledWindow, set its scrollbar placement appropriately,
+ and remember it. */
+GtkWidget *
+scrolled_window_new(GtkAdjustment *hadjustment, GtkAdjustment *vadjustment)
+{
+ GtkWidget *scrollw;
+
+ scrollw = gtk_scrolled_window_new(hadjustment, vadjustment);
+ setup_scrolled_window(scrollw);
+ return scrollw;
+}
+
+/* Set a GtkScrolledWindow's scrollbar placement and add it to the list
+ of GtkScrolledWindows. */
+static void
+setup_scrolled_window(GtkWidget *scrollw)
+{
+ set_scrollbar_placement_scrollw(scrollw);
+
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollw),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+ scrolled_windows = g_list_append(scrolled_windows, scrollw);
+
+ /* Catch the "destroy" event on the widget, so that we remove it from
+ the list when it's destroyed. */
+ SIGNAL_CONNECT(scrollw, "destroy", forget_scrolled_window, NULL);
+}
+
+/* Remove a GtkScrolledWindow from the list of GtkScrolledWindows. */
+static void
+forget_scrolled_window(GtkWidget *scrollw, gpointer data _U_)
+{
+ scrolled_windows = g_list_remove(scrolled_windows, scrollw);
+}
+
+/* Set the scrollbar placement of a GtkScrolledWindow based upon user
+ preference. */
+static void
+set_scrollbar_placement_scrollw(GtkWidget *scrollw)
+{
+ if (prefs.gui_scrollbar_on_right) {
+ gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(scrollw),
+ GTK_CORNER_TOP_LEFT);
+ } else {
+ gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(scrollw),
+ GTK_CORNER_TOP_RIGHT);
+ }
+}
+
+static void
+set_scrollbar_placement_cb(gpointer data, gpointer user_data _U_)
+{
+ set_scrollbar_placement_scrollw((GtkWidget *)data);
+}
+
+/* Set the scrollbar placement of all GtkScrolledWindows based on
+ user preference. */
+void
+set_scrollbar_placement_all(void)
+{
+ g_list_foreach(scrolled_windows, set_scrollbar_placement_cb, NULL);
+}
+
+/* List of all CTrees/TreeViews, so we can globally set the line and
+ * expander style of all of them. */
+static GList *trees;
+
+static void setup_tree(GtkWidget *tree);
+static void forget_tree(GtkWidget *tree, gpointer data);
+static void set_tree_styles(GtkWidget *tree);
+
+/* Create a Tree, give it the right styles, and remember it. */
+#if GTK_MAJOR_VERSION < 2
+GtkWidget *
+ctree_new(gint columns, gint tree_column)
+#else
+GtkWidget *
+tree_view_new(GtkTreeModel *model)
+#endif
+{
+ GtkWidget *tree;
+
+#if GTK_MAJOR_VERSION < 2
+ tree = gtk_ctree_new(columns, tree_column);
+#else
+ tree = gtk_tree_view_new_with_model(model);
+#endif
+ setup_tree(tree);
+ return tree;
+}
+
+#if GTK_MAJOR_VERSION < 2
+GtkWidget *
+ctree_new_with_titles(gint columns, gint tree_column, const gchar *titles[])
+{
+ GtkWidget *tree;
+
+ tree = gtk_ctree_new_with_titles(columns, tree_column, (gchar **) titles);
+ setup_tree(tree);
+ return tree;
+}
+#endif
+
+/* Set a Tree's styles and add it to the list of Trees. */
+static void
+setup_tree(GtkWidget *tree)
+{
+ set_tree_styles(tree);
+
+ trees = g_list_append(trees, tree);
+
+ /* Catch the "destroy" event on the widget, so that we remove it from
+ the list when it's destroyed. */
+ SIGNAL_CONNECT(tree, "destroy", forget_tree, NULL);
+}
+
+/* Remove a Tree from the list of Trees. */
+static void
+forget_tree(GtkWidget *tree, gpointer data _U_)
+{
+ trees = g_list_remove(trees, tree);
+}
+
+/* Set the styles of a Tree based upon user preferences. */
+static void
+set_tree_styles(GtkWidget *tree)
+{
+#if GTK_MAJOR_VERSION < 2
+ g_assert(prefs.gui_ptree_line_style >= GTK_CTREE_LINES_NONE &&
+ prefs.gui_ptree_line_style <= GTK_CTREE_LINES_TABBED);
+ gtk_ctree_set_line_style(GTK_CTREE(tree), prefs.gui_ptree_line_style);
+ g_assert(prefs.gui_ptree_expander_style >= GTK_CTREE_EXPANDER_NONE &&
+ prefs.gui_ptree_expander_style <= GTK_CTREE_EXPANDER_CIRCULAR);
+ gtk_ctree_set_expander_style(GTK_CTREE(tree),
+ prefs.gui_ptree_expander_style);
+#else
+ g_assert(prefs.gui_altern_colors >= 0 && prefs.gui_altern_colors <= 1);
+ gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree),
+ prefs.gui_altern_colors);
+#endif
+}
+
+static void
+set_tree_styles_cb(gpointer data, gpointer user_data _U_)
+{
+ set_tree_styles((GtkWidget *)data);
+}
+
+/* Set the styles of all Trees based upon style values. */
+void
+set_tree_styles_all(void)
+{
+ g_list_foreach(trees, set_tree_styles_cb, NULL);
+}
+
+
+
+
+#if GTK_MAJOR_VERSION < 2
+/* convert variable argument list of values to array of strings (GTK2 -> GTK1) */
+static void
+simple_list_convert(gchar **ent, va_list ap)
+{
+ int i;
+ char *s;
+
+ while( (i = va_arg(ap, int)) != -1 ) {
+ s = va_arg(ap, char *);
+ ent[i] = s;
+ }
+}
+#endif
+
+
+/* append a row to the simple list */
+/* use it like: simple_list_append(list, 0, "first", 1, "second", -1) */
+void
+simple_list_append(GtkWidget *list, ...)
+{
+ va_list ap;
+
+#if GTK_MAJOR_VERSION < 2
+ gchar *ent[10]; /* new entry added in clist */
+#else
+ GtkTreeIter iter;
+ GtkListStore *store;
+#endif
+
+ va_start(ap, list);
+#if GTK_MAJOR_VERSION < 2
+ simple_list_convert(ent, ap);
+ gtk_clist_append(GTK_CLIST(list), ent);
+#else
+ store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)));
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set_valist(store, &iter, ap);
+#endif
+ va_end(ap);
+}
+
+/* create a simple list widget */
+GtkWidget *
+simple_list_new(gint cols, const gchar **titles) {
+ GtkWidget *plugins_list;
+#if GTK_MAJOR_VERSION >= 2
+ int i;
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+#endif
+
+
+#if GTK_MAJOR_VERSION < 2
+ plugins_list = gtk_clist_new_with_titles(cols, (gchar **) titles);
+ gtk_clist_set_selection_mode(GTK_CLIST(plugins_list), GTK_SELECTION_SINGLE);
+ gtk_clist_column_titles_passive(GTK_CLIST(plugins_list));
+ if(titles) {
+ gtk_clist_column_titles_show(GTK_CLIST(plugins_list));
+ } else {
+ gtk_clist_column_titles_hide(GTK_CLIST(plugins_list));
+ }
+ gtk_clist_set_column_auto_resize(GTK_CLIST(plugins_list), 0, TRUE);
+ gtk_clist_set_column_auto_resize(GTK_CLIST(plugins_list), 1, TRUE);
+#else
+ g_assert(cols <= 10);
+ store = gtk_list_store_new(cols,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+ plugins_list = tree_view_new(GTK_TREE_MODEL(store));
+ g_object_unref(G_OBJECT(store));
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(plugins_list), (titles != NULL));
+ for(i=0; i<cols; i++) {
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(titles ? titles[i] : "", renderer,
+ "text", i, NULL);
+ gtk_tree_view_column_set_sort_column_id(column, i);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(plugins_list), column);
+ }
+#endif
+
+ return plugins_list;
+}
+
+extern void
+copy_to_clipboard(GString *str)
+{
+#if (GTK_MAJOR_VERSION >= 2)
+ GtkClipboard *cb;
+
+ cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); /* Get the default clipboard */
+ gtk_clipboard_set_text(cb, str->str, -1); /* Copy the byte data into the clipboard */
+#else
+ GtkWidget *window;
+ GtkWidget *text;
+
+ window = window_new (GTK_WINDOW_TOPLEVEL,"");
+ text = gtk_text_new (NULL, NULL); /* Create the GtkText widget */
+ gtk_container_add (GTK_CONTAINER (window), text); /* Avoid a GTK assertion */
+ gtk_widget_realize (text); /* Realizing a widget creates a window for it, ready for us to insert some text */
+ gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, str->str, -1);
+ gtk_editable_select_region((GtkEditable *)text, 0, -1); /* Select ALL text */
+ gtk_editable_copy_clipboard((GtkEditable *)text); /* Copy the byte data into the clipboard */
+#endif
+}
+
+/*
+ * Create a new window title string with user-defined title preference.
+ * (Or ignore it if unspecified).
+ */
+gchar *
+create_user_window_title(const gchar *caption)
+{
+ /* fail-safe */
+ if (caption == NULL)
+ return g_strdup("");
+
+ /* no user-defined title specified */
+ if ((prefs.gui_window_title == NULL) || (*prefs.gui_window_title == '\0'))
+ return g_strdup(caption);
+
+ return g_strdup_printf("%s %s", prefs.gui_window_title, caption);
+}
diff --git a/gtk/ui_util.h b/gtk/gui_utils.h
index 99f89541ff..898b32f9f0 100644
--- a/gtk/ui_util.h
+++ b/gtk/gui_utils.h
@@ -1,308 +1,308 @@
-/* ui_util.h
- * Definitions for UI utility routines
- *
- * $Id$
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GTKGUIUI_UTIL_H__
-#define __GTKGUIUI_UTIL_H__
-
-/** @defgroup windows_group Windows
- *
- * There are the following toplevel windows:
- *
- * - @ref main_window_group
- * - Statistic Windows (several different statistic windows)
- *
- * See: @ref howto_window_page for details.
- *
- */
-
-/** @page howto_window_page How to develop a window / dialog
- *
- * Windows and dialogs are related to each other. Dialogs are special kind of windows, but they behave
- * slightly different. Dialogs stick on it's parent window, normal windows will be much more independant
- * from it's parent window. Dialogs should be used to ask or note the user something, while windows should
- * show data independantly from the main window.
- * Dialogs are created by calling dlg_window_new() which in turn will call window_new().
- * After that, dialogs can be developed the same way as windows, all window related functions in ui_util.h
- * can be used for both.
- *
- * @section window_create Create a window
- *
- * A typical window / dialog will be created by the following calls:
- *
- * - window_new() will create a new window with default position and size,
- * use dlg_window_new() if you need a dialog (transient to the main window)
- * - gtk_window_set_default_size() to set the default size of the window. Only
- * needed, if the initial size is not appropriate, e.g. when a scrolled_window_new() is used.
- * Be sure that the given size is larger than the initial size, otherwise the window might
- * clip the content (at least on GTK1)
- * - SIGNAL_CONNECT(my_win, "destroy", my_destroy_cb, NULL) callback, if some cleanup needs to be
- * done after the window is destroyed, e.g. free up memory, or set the window pointer
- * of a singleton window (only one instance allowed, e.g. about dialog) back to zero
- * - create and fill in the content and button widgets
- * - gtk_widget_show_all() shows all the widgets in the window
- * - window_present() present the window on screen and
- * (if available) set previously saved position and size
- *
- * @section window_events Events
- *
- * The following events are usually interesting:
- *
- * - "delete_event": the window managers "X" (e.g. upper right edge) of the window
- * was clicked, default handler will call gtk_widget_destroy()
- * - "destroy": everything is already gone, only cleanup of left over ressources
- * can/should be done now
- *
- * @section window_hints Hints
- *
- * If you want to save size and position, be sure to call window_destroy() instead of only
- * gtk_widget_destroy(), so you will probably have to SIGNAL_CONNECT to the "delete_event"!
- *
- * Don't use WIDGET_SET_SIZE() to set the size of a window,
- * use gtk_window_set_default_size() for that purpose!
- *
- * Be sure to call window_present() / window_destroy() appropriately, if you
- * want to have size and position of the window handled by ui_util.
- *
- */
-
-/** @file
- * Utilities for Windows and other user interface functions. See: @ref howto_window_page for details.
- * @ingroup dialog_group
- * @ingroup windows_group
- */
-
-/** @name Window Functions
- * @todo Move these window functions to a new file win_utils.h?
- * @{ */
-
-/** Create a new window with the Ethereal icon.
- * If you want to create a dialog, use dlg_window_new() instead.
- *
- * @param type window type, typical GTK_WINDOW_TOPLEVEL
- * @param title the title for the new window
- * @return the newly created window
- */
-extern GtkWidget *window_new(GtkWindowType type, const gchar *title);
-
-/** Same as window_new(), but will keep its geometry values (size, position, ...).
- * Be sure to use window_present() and window_destroy() appropriately!
- *
- * @param type window type, typical GTK_WINDOW_TOPLEVEL
- * @param title the title for the new window
- * @param geom_name the name to distinguish this window, will also be used for the recent file (don't use special chars)
- * @return the newly created window
- */
-extern GtkWidget *window_new_with_geom(GtkWindowType type, const gchar *title, const gchar *geom_name);
-
-/** Create a new splash window, with no icon or title bar.
- *
- * @return the newly created window
- */
-extern GtkWidget *splash_window_new(void);
-
-/** Present the created window on the top of the screen. This will put the window on top and
- * (if available) set previously saved position and size.
- *
- * @param win the window from window_new()
- */
-extern void window_present(GtkWidget *win);
-
-/** callback function for window_set_cancel_button() */
-typedef void (*window_cancel_button_fct) (GtkWidget *w, gpointer data);
-
-/** Register the default cancel button "Cancel"/"Close"/"Ok" of this window.
- * This will set the callback function for this button, grab this button as the default one and
- * set the "ESC" key handler to call the callback function if key is pressed.
- *
- * @param win the window from window_new()
- * @param bt the default button of this window
- * @param cb callback function to be called, when this button is pressed
- */
-extern void window_set_cancel_button(GtkWidget *win, GtkWidget *bt, window_cancel_button_fct cb);
-
-/** Remember the current window position / size and then destroy the window.
- * It's important to call this instead of gtk_widget_destroy() when using window_new_with_geom().
- *
- * @param win the window from window_new()
- */
-extern void window_destroy(GtkWidget *win);
-
-/** Default callback handler for cancel button "clicked" signal.
- * Use this for window_set_cancel_button(), if no user specific functionality required,
- * will simply call window_destroy()
- */
-extern void window_cancel_button_cb(GtkWidget *w _U_, gpointer data);
-
-/** Default callback handler if the window managers X of the window was clicked (delete_event).
- * Use this for SIGNAL_CONNECT(), if no user specific functionality required,
- * will simply call window_destroy()
- */
-extern gboolean window_delete_event_cb(GtkWidget *win, GdkEvent *event _U_, gpointer user_data _U_);
-
-/** geometry values for use in window_get_geometry() and window_set_geometry() */
-typedef struct window_geometry_s {
- gchar *key; /**< current key in hashtable (internally used only) */
- gboolean set_pos; /**< set the x and y position values */
- gint x; /**< the windows x position */
- gint y; /**< the windows y position */
- gboolean set_size; /**< set the width and height values */
- gint width; /**< the windows width */
- gint height; /**< the windows height */
-
- gboolean set_maximized; /**< set the maximized state (GTK2 only) */
- gboolean maximized; /**< the windows maximized state (GTK2 only) */
-} window_geometry_t;
-
-/** Get the geometry of a window.
- *
- * @param win the window from window_new()
- * @param geom the current geometry values of the window, the set_xy values will not be used
- * @todo if main uses the window_new_with_geom() to save size and such, make this function static
- */
-extern void window_get_geometry(GtkWidget *win, window_geometry_t *geom);
-/** Set the geometry of a window.
- *
- * @param win the window from window_new()
- * @param geom the new geometry values of the window
- * @todo if main uses the window_new_with_geom() to save size and such, make this function static
- */
-extern void window_set_geometry(GtkWidget *win, window_geometry_t *geom);
-
-/** Write all geometry values of all windows to the recent file.
- * Will call write_recent_geom() for every existing window type.
- *
- * @param rf recent file handle from caller
- */
-extern void window_geom_recent_write_all(gpointer rf);
-
-/** Read in a single geometry key value pair from the recent file.
- *
- * @param name the geom_name of the window
- * @param key the subkey of this pair (e.g. "x")
- * @param value the new value (e.g. "123")
- */
-extern void window_geom_recent_read_pair(const char *name, const char *key, const char *value);
-
-/** Raise a top-level window and de-iconify it.
- * This routine is used if the user has done something to
- * ask that a window of a certain type be popped up when there can be only
- * one such window and such a window has already been popped up - we
- * pop up the existing one rather than creating a new one.
- *
- * @param win the window from window_new() to be reactivated
- */
-extern void reactivate_window(GtkWidget *win);
-
-/** @} */
-
-/** Create a GtkScrolledWindow, set its scrollbar placement appropriately,
- * and remember it.
- *
- * @param hadjustment horizontal adjustment
- * @param vadjustment vertical adjustment
- * @return the new scrolled window
- */
-extern GtkWidget *scrolled_window_new(GtkAdjustment *hadjustment,
- GtkAdjustment *vadjustment);
-
-/** Set the scrollbar placement of all scrolled windows based on user
- preference. */
-extern void set_scrollbar_placement_all(void);
-
-#if GTK_MAJOR_VERSION < 2
-/** Create a GtkCTree, give it the right styles, and remember it.
- *
- * @param columns the number of columns
- * @param tree_column which column has the tree graphic
- * @return the newly created GtkCTree
- */
-extern GtkWidget *ctree_new(gint columns, gint tree_column);
-/** Create a GtkCTree, give it the right styles, and remember it.
- *
- * @param columns the number of columns
- * @param tree_column which column has the tree graphic
- * @param titles the titles of all columns
- * @return the newly created GtkCTree
- */
-extern GtkWidget *ctree_new_with_titles(gint columns, gint tree_column,
- const gchar *titles[]);
-#else
-/** Create a GtkTreeView, give it the right styles, and remember it.
- *
- * @param model the model (the data) of this tree view
- */
-extern GtkWidget *tree_view_new(GtkTreeModel *model);
-#endif
-
-/** Create a simple list widget.
- *
- * @param cols number of columns
- * @param titles the titles of all columns
- * @return the new simple list widget
- */
-extern GtkWidget *simple_list_new(gint cols, const gchar **titles);
-/** Append a row to the simple list.
- *
- * @param list the list from simple_list_new()
- * @param ... row and title, finished by -1 (e.g.: 0, "first", 1, "second", -1).
- */
-extern void simple_list_append(GtkWidget *list, ...);
-
-
-
-/** Set the styles of all Trees based upon user preferences. */
-extern void set_tree_styles_all(void);
-
-/** Convert an xpm picture into a GtkWidget showing it.
- * Beware: Ethereal's main window must already be visible!
- *
- * @param xpm the character array containing the picture
- * @return a newly created GtkWidget showing the picture
- */
-extern GtkWidget *xpm_to_widget(const char ** xpm);
-
-/** Convert an xpm picture into a GtkWidget showing it.
- * Beware: the given parent window must already be visible!
- *
- * @param parent the parent window of to widget to be generated
- * @param xpm the character array containing the picture
- * @return a newly created GtkWidget showing the picture
- */
-extern GtkWidget *xpm_to_widget_from_parent(GtkWidget *parent, const char ** xpm);
-
-/** Copy a GString to the clipboard.
- *
- * @param str GString that is to be copied to the clipboard.
- */
-extern void copy_to_clipboard(GString *str);
-
-/** Create a new window title that includes user-defined preference string.
- *
- * @param caption string you want included in title (appended to user-defined string)
- * @return a newly created title string including user-defined preference (if specified)
- */
-extern gchar *create_user_window_title(const gchar *caption);
-
-
-#endif /* __GTKGUIUI_UTIL_H__ */
+/* gui_utils.h
+ * Definitions for UI utility routines
+ *
+ * $Id: ui_util.h 15263 2005-08-08 17:22:55Z ulfl $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GTKGUIUI_UTIL_H__
+#define __GTKGUIUI_UTIL_H__
+
+/** @defgroup windows_group Windows
+ *
+ * There are the following toplevel windows:
+ *
+ * - @ref main_window_group
+ * - Statistic Windows (several different statistic windows)
+ *
+ * See: @ref howto_window_page for details.
+ *
+ */
+
+/** @page howto_window_page How to develop a window / dialog
+ *
+ * Windows and dialogs are related to each other. Dialogs are special kind of windows, but they behave
+ * slightly different. Dialogs stick on it's parent window, normal windows will be much more independant
+ * from it's parent window. Dialogs should be used to ask or note the user something, while windows should
+ * show data independantly from the main window.
+ * Dialogs are created by calling dlg_window_new() which in turn will call window_new().
+ * After that, dialogs can be developed the same way as windows, all window related functions in gui_utils.h
+ * can be used for both.
+ *
+ * @section window_create Create a window
+ *
+ * A typical window / dialog will be created by the following calls:
+ *
+ * - window_new() will create a new window with default position and size,
+ * use dlg_window_new() if you need a dialog (transient to the main window)
+ * - gtk_window_set_default_size() to set the default size of the window. Only
+ * needed, if the initial size is not appropriate, e.g. when a scrolled_window_new() is used.
+ * Be sure that the given size is larger than the initial size, otherwise the window might
+ * clip the content (at least on GTK1)
+ * - SIGNAL_CONNECT(my_win, "destroy", my_destroy_cb, NULL) callback, if some cleanup needs to be
+ * done after the window is destroyed, e.g. free up memory, or set the window pointer
+ * of a singleton window (only one instance allowed, e.g. about dialog) back to zero
+ * - create and fill in the content and button widgets
+ * - gtk_widget_show_all() shows all the widgets in the window
+ * - window_present() present the window on screen and
+ * (if available) set previously saved position and size
+ *
+ * @section window_events Events
+ *
+ * The following events are usually interesting:
+ *
+ * - "delete_event": the window managers "X" (e.g. upper right edge) of the window
+ * was clicked, default handler will call gtk_widget_destroy()
+ * - "destroy": everything is already gone, only cleanup of left over ressources
+ * can/should be done now
+ *
+ * @section window_hints Hints
+ *
+ * If you want to save size and position, be sure to call window_destroy() instead of only
+ * gtk_widget_destroy(), so you will probably have to SIGNAL_CONNECT to the "delete_event"!
+ *
+ * Don't use WIDGET_SET_SIZE() to set the size of a window,
+ * use gtk_window_set_default_size() for that purpose!
+ *
+ * Be sure to call window_present() / window_destroy() appropriately, if you
+ * want to have size and position of the window handled by ui_util.
+ *
+ */
+
+/** @file
+ * Utilities for Windows and other user interface functions. See: @ref howto_window_page for details.
+ * @ingroup dialog_group
+ * @ingroup windows_group
+ */
+
+/** @name Window Functions
+ * @todo Move these window functions to a new file win_utils.h?
+ * @{ */
+
+/** Create a new window with the Ethereal icon.
+ * If you want to create a dialog, use dlg_window_new() instead.
+ *
+ * @param type window type, typical GTK_WINDOW_TOPLEVEL
+ * @param title the title for the new window
+ * @return the newly created window
+ */
+extern GtkWidget *window_new(GtkWindowType type, const gchar *title);
+
+/** Same as window_new(), but will keep its geometry values (size, position, ...).
+ * Be sure to use window_present() and window_destroy() appropriately!
+ *
+ * @param type window type, typical GTK_WINDOW_TOPLEVEL
+ * @param title the title for the new window
+ * @param geom_name the name to distinguish this window, will also be used for the recent file (don't use special chars)
+ * @return the newly created window
+ */
+extern GtkWidget *window_new_with_geom(GtkWindowType type, const gchar *title, const gchar *geom_name);
+
+/** Create a new splash window, with no icon or title bar.
+ *
+ * @return the newly created window
+ */
+extern GtkWidget *splash_window_new(void);
+
+/** Present the created window on the top of the screen. This will put the window on top and
+ * (if available) set previously saved position and size.
+ *
+ * @param win the window from window_new()
+ */
+extern void window_present(GtkWidget *win);
+
+/** callback function for window_set_cancel_button() */
+typedef void (*window_cancel_button_fct) (GtkWidget *w, gpointer data);
+
+/** Register the default cancel button "Cancel"/"Close"/"Ok" of this window.
+ * This will set the callback function for this button, grab this button as the default one and
+ * set the "ESC" key handler to call the callback function if key is pressed.
+ *
+ * @param win the window from window_new()
+ * @param bt the default button of this window
+ * @param cb callback function to be called, when this button is pressed
+ */
+extern void window_set_cancel_button(GtkWidget *win, GtkWidget *bt, window_cancel_button_fct cb);
+
+/** Remember the current window position / size and then destroy the window.
+ * It's important to call this instead of gtk_widget_destroy() when using window_new_with_geom().
+ *
+ * @param win the window from window_new()
+ */
+extern void window_destroy(GtkWidget *win);
+
+/** Default callback handler for cancel button "clicked" signal.
+ * Use this for window_set_cancel_button(), if no user specific functionality required,
+ * will simply call window_destroy()
+ */
+extern void window_cancel_button_cb(GtkWidget *w _U_, gpointer data);
+
+/** Default callback handler if the window managers X of the window was clicked (delete_event).
+ * Use this for SIGNAL_CONNECT(), if no user specific functionality required,
+ * will simply call window_destroy()
+ */
+extern gboolean window_delete_event_cb(GtkWidget *win, GdkEvent *event _U_, gpointer user_data _U_);
+
+/** geometry values for use in window_get_geometry() and window_set_geometry() */
+typedef struct window_geometry_s {
+ gchar *key; /**< current key in hashtable (internally used only) */
+ gboolean set_pos; /**< set the x and y position values */
+ gint x; /**< the windows x position */
+ gint y; /**< the windows y position */
+ gboolean set_size; /**< set the width and height values */
+ gint width; /**< the windows width */
+ gint height; /**< the windows height */
+
+ gboolean set_maximized; /**< set the maximized state (GTK2 only) */
+ gboolean maximized; /**< the windows maximized state (GTK2 only) */
+} window_geometry_t;
+
+/** Get the geometry of a window.
+ *
+ * @param win the window from window_new()
+ * @param geom the current geometry values of the window, the set_xy values will not be used
+ * @todo if main uses the window_new_with_geom() to save size and such, make this function static
+ */
+extern void window_get_geometry(GtkWidget *win, window_geometry_t *geom);
+/** Set the geometry of a window.
+ *
+ * @param win the window from window_new()
+ * @param geom the new geometry values of the window
+ * @todo if main uses the window_new_with_geom() to save size and such, make this function static
+ */
+extern void window_set_geometry(GtkWidget *win, window_geometry_t *geom);
+
+/** Write all geometry values of all windows to the recent file.
+ * Will call write_recent_geom() for every existing window type.
+ *
+ * @param rf recent file handle from caller
+ */
+extern void window_geom_recent_write_all(gpointer rf);
+
+/** Read in a single geometry key value pair from the recent file.
+ *
+ * @param name the geom_name of the window
+ * @param key the subkey of this pair (e.g. "x")
+ * @param value the new value (e.g. "123")
+ */
+extern void window_geom_recent_read_pair(const char *name, const char *key, const char *value);
+
+/** Raise a top-level window and de-iconify it.
+ * This routine is used if the user has done something to
+ * ask that a window of a certain type be popped up when there can be only
+ * one such window and such a window has already been popped up - we
+ * pop up the existing one rather than creating a new one.
+ *
+ * @param win the window from window_new() to be reactivated
+ */
+extern void reactivate_window(GtkWidget *win);
+
+/** @} */
+
+/** Create a GtkScrolledWindow, set its scrollbar placement appropriately,
+ * and remember it.
+ *
+ * @param hadjustment horizontal adjustment
+ * @param vadjustment vertical adjustment
+ * @return the new scrolled window
+ */
+extern GtkWidget *scrolled_window_new(GtkAdjustment *hadjustment,
+ GtkAdjustment *vadjustment);
+
+/** Set the scrollbar placement of all scrolled windows based on user
+ preference. */
+extern void set_scrollbar_placement_all(void);
+
+#if GTK_MAJOR_VERSION < 2
+/** Create a GtkCTree, give it the right styles, and remember it.
+ *
+ * @param columns the number of columns
+ * @param tree_column which column has the tree graphic
+ * @return the newly created GtkCTree
+ */
+extern GtkWidget *ctree_new(gint columns, gint tree_column);
+/** Create a GtkCTree, give it the right styles, and remember it.
+ *
+ * @param columns the number of columns
+ * @param tree_column which column has the tree graphic
+ * @param titles the titles of all columns
+ * @return the newly created GtkCTree
+ */
+extern GtkWidget *ctree_new_with_titles(gint columns, gint tree_column,
+ const gchar *titles[]);
+#else
+/** Create a GtkTreeView, give it the right styles, and remember it.
+ *
+ * @param model the model (the data) of this tree view
+ */
+extern GtkWidget *tree_view_new(GtkTreeModel *model);
+#endif
+
+/** Create a simple list widget.
+ *
+ * @param cols number of columns
+ * @param titles the titles of all columns
+ * @return the new simple list widget
+ */
+extern GtkWidget *simple_list_new(gint cols, const gchar **titles);
+/** Append a row to the simple list.
+ *
+ * @param list the list from simple_list_new()
+ * @param ... row and title, finished by -1 (e.g.: 0, "first", 1, "second", -1).
+ */
+extern void simple_list_append(GtkWidget *list, ...);
+
+
+
+/** Set the styles of all Trees based upon user preferences. */
+extern void set_tree_styles_all(void);
+
+/** Convert an xpm picture into a GtkWidget showing it.
+ * Beware: Ethereal's main window must already be visible!
+ *
+ * @param xpm the character array containing the picture
+ * @return a newly created GtkWidget showing the picture
+ */
+extern GtkWidget *xpm_to_widget(const char ** xpm);
+
+/** Convert an xpm picture into a GtkWidget showing it.
+ * Beware: the given parent window must already be visible!
+ *
+ * @param parent the parent window of to widget to be generated
+ * @param xpm the character array containing the picture
+ * @return a newly created GtkWidget showing the picture
+ */
+extern GtkWidget *xpm_to_widget_from_parent(GtkWidget *parent, const char ** xpm);
+
+/** Copy a GString to the clipboard.
+ *
+ * @param str GString that is to be copied to the clipboard.
+ */
+extern void copy_to_clipboard(GString *str);
+
+/** Create a new window title that includes user-defined preference string.
+ *
+ * @param caption string you want included in title (appended to user-defined string)
+ * @return a newly created title string including user-defined preference (if specified)
+ */
+extern gchar *create_user_window_title(const gchar *caption);
+
+
+#endif /* __GTKGUIUI_UTIL_H__ */
diff --git a/gtk/h225_counter.c b/gtk/h225_counter.c
index 6c172e3c8f..8fa95e63ee 100644
--- a/gtk/h225_counter.c
+++ b/gtk/h225_counter.c
@@ -52,7 +52,7 @@
#include "../globals.h"
#include "../tap_dfilter_dlg.h"
#include "tap_dfilter_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
static void gtk_h225counter_init(const char *optarg);
diff --git a/gtk/h225_ras_srt.c b/gtk/h225_ras_srt.c
index e55e353b64..5c04136806 100644
--- a/gtk/h225_ras_srt.c
+++ b/gtk/h225_ras_srt.c
@@ -53,7 +53,7 @@
#include "../globals.h"
#include "../tap_dfilter_dlg.h"
#include "tap_dfilter_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
static void gtk_h225rassrt_init(const char *optarg);
diff --git a/gtk/help_dlg.c b/gtk/help_dlg.c
index 91810117b5..2af00ce804 100644
--- a/gtk/help_dlg.c
+++ b/gtk/help_dlg.c
@@ -37,7 +37,7 @@
#include "text_page.h"
#include <epan/prefs.h>
#include "gtkglobals.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include "dlg_utils.h"
#include "simple_dialog.h"
diff --git a/gtk/hostlist_table.c b/gtk/hostlist_table.c
index 7ad13d8a0a..c7265506e8 100644
--- a/gtk/hostlist_table.c
+++ b/gtk/hostlist_table.c
@@ -50,7 +50,7 @@
#include "gtk/color_dlg.h"
#include "gtkglobals.h"
#include "main.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "help_dlg.h"
diff --git a/gtk/io_stat.c b/gtk/io_stat.c
index 7078a2ebd8..100b5e934f 100644
--- a/gtk/io_stat.c
+++ b/gtk/io_stat.c
@@ -41,7 +41,7 @@
#include <epan/packet_info.h>
#include "gtkglobals.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include <epan/stat.h>
#include "stat_menu.h"
#include <epan/tap.h>
diff --git a/gtk/layout_prefs.c b/gtk/layout_prefs.c
index b198df8a5c..09cc42d3ce 100644
--- a/gtk/layout_prefs.c
+++ b/gtk/layout_prefs.c
@@ -31,10 +31,8 @@
#include "globals.h"
#include "layout_prefs.h"
#include "gtkglobals.h"
-/*#include <epan/resolv.h>*/
#include <epan/prefs.h>
-/*#include "prefs_dlg.h"*/
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "compat_macros.h"
#include "dlg_utils.h"
diff --git a/gtk/ldap_stat.c b/gtk/ldap_stat.c
index 3fd02857c9..f9428e3754 100644
--- a/gtk/ldap_stat.c
+++ b/gtk/ldap_stat.c
@@ -46,7 +46,7 @@
#include "../timestats.h"
#include "compat_macros.h"
#include "../simple_dialog.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "../file.h"
#include "../globals.h"
diff --git a/gtk/main.c b/gtk/main.c
index 6aa20ab69a..351bf1347a 100644
--- a/gtk/main.c
+++ b/gtk/main.c
@@ -81,7 +81,7 @@
#include "register.h"
#include <epan/prefs-int.h>
#include "ringbuffer.h"
-#include "../ui_util.h" /* beware: ui_util.h exists twice! */
+#include "../ui_util.h"
#include <epan/tap.h>
#include <epan/stat.h>
#include "util.h"
@@ -110,7 +110,7 @@
#include "dlg_utils.h"
#include "gtkglobals.h"
#include "colors.h"
-#include "ui_util.h" /* beware: ui_util.h exists twice! */
+#include "gui_utils.h"
#include "compat_macros.h"
#include "main.h"
diff --git a/gtk/mgcp_stat.c b/gtk/mgcp_stat.c
index fd7eb50cd1..9b24356f9a 100644
--- a/gtk/mgcp_stat.c
+++ b/gtk/mgcp_stat.c
@@ -53,7 +53,7 @@
#include "../globals.h"
#include "../tap_dfilter_dlg.h"
#include "tap_dfilter_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#define NUM_TIMESTATS 10
diff --git a/gtk/mtp3_stat.c b/gtk/mtp3_stat.c
index 4f350c0a04..8bcf0b275a 100644
--- a/gtk/mtp3_stat.c
+++ b/gtk/mtp3_stat.c
@@ -52,7 +52,7 @@
#include "../globals.h"
#include "filter_dlg.h"
#include "compat_macros.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include <epan/dissectors/packet-mtp3.h>
#include "mtp3_stat.h"
diff --git a/gtk/mtp3_summary.c b/gtk/mtp3_summary.c
index 0de9494d6a..55e061cfc3 100644
--- a/gtk/mtp3_summary.c
+++ b/gtk/mtp3_summary.c
@@ -46,7 +46,7 @@
#include "image/clist_ascend.xpm"
#include "image/clist_descend.xpm"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include <epan/tap.h>
diff --git a/gtk/nameres_prefs.c b/gtk/nameres_prefs.c
index f3fb415b2d..22d701009d 100644
--- a/gtk/nameres_prefs.c
+++ b/gtk/nameres_prefs.c
@@ -34,7 +34,7 @@
#include <epan/addr_resolv.h>
#include <epan/prefs.h>
#include "prefs_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "menu.h"
#include "compat_macros.h"
diff --git a/gtk/packet_list.c b/gtk/packet_list.c
index 5d2f414de9..2b00695d8f 100644
--- a/gtk/packet_list.c
+++ b/gtk/packet_list.c
@@ -35,7 +35,7 @@
#include "color.h"
#include "color_filters.h"
#include "../ui_util.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "menu.h"
#include "colors.h"
diff --git a/gtk/packet_win.c b/gtk/packet_win.c
index 427b4fe9d1..07321be5a0 100644
--- a/gtk/packet_win.c
+++ b/gtk/packet_win.c
@@ -56,7 +56,7 @@
#include "proto_draw.h"
#include "keys.h"
#include "gtkglobals.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include <epan/plugins.h>
#include <epan/epan_dissect.h>
#include "compat_macros.h"
diff --git a/gtk/plugins_dlg.c b/gtk/plugins_dlg.c
index 90d4f47c8d..f7015f4e98 100644
--- a/gtk/plugins_dlg.c
+++ b/gtk/plugins_dlg.c
@@ -31,7 +31,7 @@
#include "globals.h"
#include <epan/plugins.h>
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#ifdef HAVE_PLUGINS
diff --git a/gtk/prefs_dlg.c b/gtk/prefs_dlg.c
index 6854008b03..69d5ee5539 100644
--- a/gtk/prefs_dlg.c
+++ b/gtk/prefs_dlg.c
@@ -45,7 +45,7 @@
#include "layout_prefs.h"
#include "capture_prefs.h"
#include "nameres_prefs.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "simple_dialog.h"
#include "compat_macros.h"
diff --git a/gtk/print_dlg.c b/gtk/print_dlg.c
index 31c2395fe4..1992dc3081 100644
--- a/gtk/print_dlg.c
+++ b/gtk/print_dlg.c
@@ -37,7 +37,7 @@
#include "alert_box.h"
#include "simple_dialog.h"
#include "file_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "main.h"
#include <epan/epan_dissect.h>
diff --git a/gtk/print_prefs.c b/gtk/print_prefs.c
index ad6e13327a..451c50f400 100644
--- a/gtk/print_prefs.c
+++ b/gtk/print_prefs.c
@@ -36,7 +36,7 @@
#include <epan/prefs.h>
#include "prefs_dlg.h"
#include "util.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "file_dlg.h"
#include "compat_macros.h"
diff --git a/gtk/progress_dlg.c b/gtk/progress_dlg.c
index 120763774f..1adb0a9743 100644
--- a/gtk/progress_dlg.c
+++ b/gtk/progress_dlg.c
@@ -31,7 +31,7 @@
#include <gtk/gtk.h>
#include "gtkglobals.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "progress_dlg.h"
#include "compat_macros.h"
diff --git a/gtk/proto_dlg.c b/gtk/proto_dlg.c
index 7b968c8b6f..2772168a0e 100644
--- a/gtk/proto_dlg.c
+++ b/gtk/proto_dlg.c
@@ -35,7 +35,7 @@
#include "globals.h"
#include "main.h"
#include "util.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "proto_dlg.h"
#include "simple_dialog.h"
diff --git a/gtk/proto_draw.c b/gtk/proto_draw.c
index 59f8fe8194..a9e0f2c29e 100644
--- a/gtk/proto_draw.c
+++ b/gtk/proto_draw.c
@@ -64,7 +64,7 @@
#include "proto_draw.h"
#include "packet_win.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "gtkglobals.h"
#include "compat_macros.h"
#include "alert_box.h"
diff --git a/gtk/proto_hier_stats_dlg.c b/gtk/proto_hier_stats_dlg.c
index d9e4b0cdde..3f9f3f4769 100644
--- a/gtk/proto_hier_stats_dlg.c
+++ b/gtk/proto_hier_stats_dlg.c
@@ -30,7 +30,7 @@
#include "proto_hier_stats.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "compat_macros.h"
#include "help_dlg.h"
diff --git a/gtk/range_utils.c b/gtk/range_utils.c
index b35894275c..19ea06cb97 100644
--- a/gtk/range_utils.c
+++ b/gtk/range_utils.c
@@ -33,7 +33,7 @@
#include "globals.h"
#include "packet-range.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "compat_macros.h"
#include "simple_dialog.h"
diff --git a/gtk/recent.c b/gtk/recent.c
index 7849d5e99f..c51ea5d118 100644
--- a/gtk/recent.c
+++ b/gtk/recent.c
@@ -39,7 +39,7 @@
#include "main.h"
#include <epan/prefs.h>
#include <epan/prefs-int.h>
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "cfilter_combo_utils.h"
#include "simple_dialog.h"
diff --git a/gtk/rpc_progs.c b/gtk/rpc_progs.c
index 03d4f06bc7..a69fa8053f 100644
--- a/gtk/rpc_progs.c
+++ b/gtk/rpc_progs.c
@@ -43,7 +43,7 @@
#include "../register.h"
#include <epan/dissectors/packet-rpc.h>
#include "../globals.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "compat_macros.h"
diff --git a/gtk/rpc_stat.c b/gtk/rpc_stat.c
index f1f9bcb3cc..53decfc517 100644
--- a/gtk/rpc_stat.c
+++ b/gtk/rpc_stat.c
@@ -40,7 +40,7 @@
#include <epan/stat.h>
#include "stat_menu.h"
#include "simple_dialog.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include <epan/tap.h>
#include "../register.h"
diff --git a/gtk/rtp_analysis.c b/gtk/rtp_analysis.c
index fb38cdac1c..be4f2763e8 100644
--- a/gtk/rtp_analysis.c
+++ b/gtk/rtp_analysis.c
@@ -65,7 +65,7 @@
#include <epan/stat.h>
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "alert_box.h"
#include "simple_dialog.h"
#include "stat_menu.h"
diff --git a/gtk/rtp_stream_dlg.c b/gtk/rtp_stream_dlg.c
index 548697eb4b..7ba93641cc 100644
--- a/gtk/rtp_stream_dlg.c
+++ b/gtk/rtp_stream_dlg.c
@@ -38,7 +38,7 @@
#include "stat_menu.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include "gtkglobals.h"
diff --git a/gtk/sctp_assoc_analyse.c b/gtk/sctp_assoc_analyse.c
index 2a0610c215..6354a14edb 100644
--- a/gtk/sctp_assoc_analyse.c
+++ b/gtk/sctp_assoc_analyse.c
@@ -35,7 +35,7 @@
#include "register.h"
#include "stat_menu.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "compat_macros.h"
diff --git a/gtk/sctp_byte_graph_dlg.c b/gtk/sctp_byte_graph_dlg.c
index aaf60dc37c..4802014b3b 100644
--- a/gtk/sctp_byte_graph_dlg.c
+++ b/gtk/sctp_byte_graph_dlg.c
@@ -37,7 +37,7 @@
#include "../color.h"
#include "stat_menu.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "compat_macros.h"
#include "simple_dialog.h"
diff --git a/gtk/sctp_chunk_stat.c b/gtk/sctp_chunk_stat.c
index 972ef49629..e81871446c 100644
--- a/gtk/sctp_chunk_stat.c
+++ b/gtk/sctp_chunk_stat.c
@@ -53,7 +53,7 @@
#include "../globals.h"
#include "../tap_dfilter_dlg.h"
#include "tap_dfilter_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
static void sctpstat_init(const char *optarg);
diff --git a/gtk/sctp_chunk_stat_dlg.c b/gtk/sctp_chunk_stat_dlg.c
index cea840b03c..e5e330fca6 100644
--- a/gtk/sctp_chunk_stat_dlg.c
+++ b/gtk/sctp_chunk_stat_dlg.c
@@ -37,7 +37,7 @@
#include "stat_menu.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "compat_macros.h"
diff --git a/gtk/sctp_error_dlg.c b/gtk/sctp_error_dlg.c
index e74c1af6f8..91211cd1c2 100644
--- a/gtk/sctp_error_dlg.c
+++ b/gtk/sctp_error_dlg.c
@@ -33,7 +33,7 @@
#include "simple_dialog.h"
#include "stat_menu.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "compat_macros.h"
diff --git a/gtk/sctp_graph_dlg.c b/gtk/sctp_graph_dlg.c
index e75df1f715..7bb7a92768 100644
--- a/gtk/sctp_graph_dlg.c
+++ b/gtk/sctp_graph_dlg.c
@@ -37,7 +37,7 @@
#include "../color.h"
#include "stat_menu.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "compat_macros.h"
#include "simple_dialog.h"
diff --git a/gtk/sctp_stat_dlg.c b/gtk/sctp_stat_dlg.c
index 23de118f72..e497855569 100644
--- a/gtk/sctp_stat_dlg.c
+++ b/gtk/sctp_stat_dlg.c
@@ -37,7 +37,7 @@
#include "stat_menu.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "main.h"
#include "compat_macros.h"
diff --git a/gtk/service_response_time_table.c b/gtk/service_response_time_table.c
index 9281766de0..9ef0c0b80c 100644
--- a/gtk/service_response_time_table.c
+++ b/gtk/service_response_time_table.c
@@ -44,7 +44,7 @@
#include "color.h"
#include "gtk/color_dlg.h"
#include "main.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "gtkglobals.h"
diff --git a/gtk/simple_dialog.c b/gtk/simple_dialog.c
index 249e19d662..39c953ac44 100644
--- a/gtk/simple_dialog.c
+++ b/gtk/simple_dialog.c
@@ -33,7 +33,7 @@
#include "gtkglobals.h"
#include "simple_dialog.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include <epan/strutil.h>
diff --git a/gtk/sip_stat.c b/gtk/sip_stat.c
index 8554cc6528..e6ba9a8628 100644
--- a/gtk/sip_stat.c
+++ b/gtk/sip_stat.c
@@ -37,7 +37,7 @@
#include <epan/stat.h>
#include "stat_menu.h"
#include "simple_dialog.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include <epan/tap.h>
#include "../register.h"
diff --git a/gtk/smb_stat.c b/gtk/smb_stat.c
index 5581bbf322..830471e432 100644
--- a/gtk/smb_stat.c
+++ b/gtk/smb_stat.c
@@ -46,7 +46,7 @@
#include "../timestats.h"
#include "compat_macros.h"
#include "../simple_dialog.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "../file.h"
#include "../globals.h"
diff --git a/gtk/stats_tree_stat.c b/gtk/stats_tree_stat.c
index 0faf017cfb..7794a045b2 100644
--- a/gtk/stats_tree_stat.c
+++ b/gtk/stats_tree_stat.c
@@ -36,7 +36,7 @@
#include "globals.h"
#include <epan/stat.h>
#include "stat_menu.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include "compat_macros.h"
#include "tap_dfilter_dlg.h"
diff --git a/gtk/summary_dlg.c b/gtk/summary_dlg.c
index 079862ed9d..d93bc8411f 100644
--- a/gtk/summary_dlg.c
+++ b/gtk/summary_dlg.c
@@ -43,7 +43,7 @@
#include "summary.h"
#include "summary_dlg.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include "help_dlg.h"
diff --git a/gtk/supported_protos_dlg.c b/gtk/supported_protos_dlg.c
index a9978265c2..3b1def05f0 100644
--- a/gtk/supported_protos_dlg.c
+++ b/gtk/supported_protos_dlg.c
@@ -34,7 +34,7 @@
#include <epan/prefs.h>
#include "globals.h"
#include "gtkglobals.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include "dlg_utils.h"
#include "font_utils.h"
diff --git a/gtk/tap_dfilter_dlg.c b/gtk/tap_dfilter_dlg.c
index be713cd836..262bc09ac7 100644
--- a/gtk/tap_dfilter_dlg.c
+++ b/gtk/tap_dfilter_dlg.c
@@ -44,7 +44,7 @@
#include "filter_dlg.h"
#include "../tap_dfilter_dlg.h"
#include "tap_dfilter_dlg.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "gtkglobals.h"
diff --git a/gtk/tcp_graph.c b/gtk/tcp_graph.c
index 1b48d014c6..11c5f98bad 100644
--- a/gtk/tcp_graph.c
+++ b/gtk/tcp_graph.c
@@ -38,7 +38,7 @@
#include <epan/packet.h> /* frame_data */
#include "gtkglobals.h" /* packet_list */
#include "simple_dialog.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "color.h"
#include "compat_macros.h"
#include "etypes.h"
diff --git a/gtk/text_page.c b/gtk/text_page.c
index 5bdb519b45..eb4d415682 100644
--- a/gtk/text_page.c
+++ b/gtk/text_page.c
@@ -34,7 +34,7 @@
#include "epan/filesystem.h"
#include "text_page.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include "simple_dialog.h"
#include "font_utils.h"
diff --git a/gtk/voip_calls_dlg.c b/gtk/voip_calls_dlg.c
index c02766ec8e..f05496bb67 100644
--- a/gtk/voip_calls_dlg.c
+++ b/gtk/voip_calls_dlg.c
@@ -53,7 +53,7 @@
#include <epan/stat.h>
#include "stat_menu.h"
#include "dlg_utils.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "compat_macros.h"
#include "gtkglobals.h"
diff --git a/gtk/wsp_stat.c b/gtk/wsp_stat.c
index 463427073b..631a26c698 100644
--- a/gtk/wsp_stat.c
+++ b/gtk/wsp_stat.c
@@ -37,7 +37,7 @@
#include <epan/stat.h>
#include "stat_menu.h"
#include "simple_dialog.h"
-#include "ui_util.h"
+#include "gui_utils.h"
#include "dlg_utils.h"
#include <epan/tap.h>
#include "../register.h"