aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Fisher <steve@stephen-fisher.com>2008-10-26 23:07:37 +0000
committerStephen Fisher <steve@stephen-fisher.com>2008-10-26 23:07:37 +0000
commit1fa606decfc91329e9a264bb02b955a8b2aae191 (patch)
tree520381822391740b78e5af95beedcc5eabec8d82
parent3a14d073c0ff54a425ddf22463ff461c7a2087da (diff)
More updates to the IGE Mac OS X integration feature:
- Adds preference "MacOS X style" to the (G)UI preferences pane - When the preference above is enabled, the menu bar is moved from the Wireshark window to the top of the screen. It is no longer displayed in both places at once. This preference defaults to on. - Calls function to enable shortcut keys for OS X top of screen menus. - NOTE: The IGE Mac Integration functions change the Control key to Command key in the menus. This may or may not be desirable. svn path=/trunk/; revision=26565
-rw-r--r--epan/prefs.c15
-rw-r--r--epan/prefs.h1
-rw-r--r--gtk/main.c16
-rw-r--r--gtk/main_menu.c8
-rw-r--r--gtk/prefs_gui.c18
5 files changed, 48 insertions, 10 deletions
diff --git a/epan/prefs.c b/epan/prefs.c
index e450ce48ad..195f11c935 100644
--- a/epan/prefs.c
+++ b/epan/prefs.c
@@ -1158,6 +1158,7 @@ init_prefs(void) {
prefs.gui_geometry_save_position = FALSE;
prefs.gui_geometry_save_size = TRUE;
prefs.gui_geometry_save_maximized= TRUE;
+ prefs.gui_macosx_style = TRUE;
prefs.gui_console_open = console_open_never;
prefs.gui_fileopen_style = FO_STYLE_LAST_OPENED;
prefs.gui_recent_df_entries_max = 10;
@@ -1641,6 +1642,7 @@ prefs_is_capture_device_hidden(const char *name)
#define PRS_GUI_GEOMETRY_SAVE_POSITION "gui.geometry.save.position"
#define PRS_GUI_GEOMETRY_SAVE_SIZE "gui.geometry.save.size"
#define PRS_GUI_GEOMETRY_SAVE_MAXIMIZED "gui.geometry.save.maximized"
+#define PRS_GUI_MACOSX_STYLE "gui.macosx_style"
#define PRS_GUI_GEOMETRY_MAIN_X "gui.geometry.main.x"
#define PRS_GUI_GEOMETRY_MAIN_Y "gui.geometry.main.y"
#define PRS_GUI_GEOMETRY_MAIN_WIDTH "gui.geometry.main.width"
@@ -1970,6 +1972,13 @@ set_pref(gchar *pref_name, gchar *value, void *private_data _U_)
else {
prefs.gui_geometry_save_maximized = FALSE;
}
+ } else if (strcmp(pref_name, PRS_GUI_MACOSX_STYLE) == 0) {
+ if (g_ascii_strcasecmp(value, "true") == 0) {
+ prefs.gui_macosx_style = TRUE;
+ }
+ else {
+ prefs.gui_macosx_style = FALSE;
+ }
} else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_X) == 0) { /* deprecated */
} else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_Y) == 0) { /* deprecated */
} else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_WIDTH) == 0) { /* deprecated */
@@ -2714,6 +2723,11 @@ write_prefs(char **pf_path_return)
fprintf(pf, PRS_GUI_GEOMETRY_SAVE_MAXIMIZED ": %s\n",
prefs.gui_geometry_save_maximized == TRUE ? "TRUE" : "FALSE");
+ fprintf(pf, "\n# Use MacOS X style (Mac OS X with native GTK only)?\n");
+ fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+ fprintf(pf, PRS_GUI_MACOSX_STYLE ": %s\n",
+ prefs.gui_macosx_style == TRUE ? "TRUE" : "FALSE");
+
fprintf(pf, "\n# Open a console window (WIN32 only)?\n");
fprintf(pf, "# One of: NEVER, AUTOMATIC, ALWAYS\n");
fprintf(pf, PRS_GUI_CONSOLE_OPEN ": %s\n",
@@ -3035,6 +3049,7 @@ copy_prefs(e_prefs *dest, e_prefs *src)
dest->gui_geometry_save_position = src->gui_geometry_save_position;
dest->gui_geometry_save_size = src->gui_geometry_save_size;
dest->gui_geometry_save_maximized = src->gui_geometry_save_maximized;
+ dest->gui_macosx_style = src->gui_macosx_style;
dest->gui_webbrowser = g_strdup(src->gui_webbrowser);
dest->gui_window_title = g_strdup(src->gui_window_title);
dest->gui_start_title = g_strdup(src->gui_start_title);
diff --git a/epan/prefs.h b/epan/prefs.h
index ae9414729b..07760a3745 100644
--- a/epan/prefs.h
+++ b/epan/prefs.h
@@ -123,6 +123,7 @@ typedef struct _e_prefs {
gboolean gui_geometry_save_position;
gboolean gui_geometry_save_size;
gboolean gui_geometry_save_maximized;
+ gboolean gui_macosx_style;
console_open_e gui_console_open;
guint gui_recent_df_entries_max;
guint gui_recent_files_count_max;
diff --git a/gtk/main.c b/gtk/main.c
index aabb651d1a..7798825590 100644
--- a/gtk/main.c
+++ b/gtk/main.c
@@ -174,6 +174,9 @@
#include <epan/crypt/airpdcap_ws.h>
#endif
+#ifdef HAVE_IGE_MAC_INTEGRATION
+#include <ige-mac-menu.h>
+#endif
/*
* Files under personal and global preferences directories in which
@@ -3151,8 +3154,17 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
/* Menu bar */
menubar = main_menu_new(&accel);
- gtk_window_add_accel_group(GTK_WINDOW(top_level), accel);
- gtk_widget_show(menubar);
+#ifdef HAVE_IGE_MAC_INTEGRATION
+ if(prefs->gui_macosx_style) {
+ ige_mac_menu_set_menu_bar(GTK_MENU_SHELL(menubar));
+ ige_mac_menu_set_global_key_handler_enabled(TRUE);
+ } else {
+#endif
+ gtk_window_add_accel_group(GTK_WINDOW(top_level), accel);
+ gtk_widget_show(menubar);
+#ifdef HAVE_IGE_MAC_INTEGRATION
+ }
+#endif
/* Main Toolbar */
main_tb = toolbar_new();
diff --git a/gtk/main_menu.c b/gtk/main_menu.c
index f94c8dcac3..e85ecf4cc8 100644
--- a/gtk/main_menu.c
+++ b/gtk/main_menu.c
@@ -90,10 +90,6 @@
#include "gtk/main_toolbar.h"
#include "gtk/main_welcome.h"
-#ifdef HAVE_IGE_MAC_INTEGRATION
-#include <ige-mac-menu.h>
-#endif
-
typedef struct _menu_item {
char *name;
gint group;
@@ -1050,10 +1046,6 @@ main_menu_new(GtkAccelGroup ** table) {
if (table)
*table = grp;
-#ifdef HAVE_IGE_MAC_INTEGRATION
- ige_mac_menu_set_menu_bar(GTK_MENU_SHELL(menubar));
-#endif
-
return menubar;
}
diff --git a/gtk/prefs_gui.c b/gtk/prefs_gui.c
index cb2ac5ba55..337447a9d7 100644
--- a/gtk/prefs_gui.c
+++ b/gtk/prefs_gui.c
@@ -64,6 +64,8 @@ static gint recent_df_entries_changed_cb(GtkWidget *recent_df_entry _U_,
#define GEOMETRY_SIZE_KEY "geometry_size"
#define GEOMETRY_MAXIMIZED_KEY "geometry_maximized"
+#define MACOSX_STYLE_KEY "macosx_style"
+
#define GUI_CONSOLE_OPEN_KEY "console_open"
#define GUI_FILEOPEN_KEY "fileopen_behavior"
#define GUI_FILEOPEN_PREVIEW_KEY "fileopen_preview_timeout"
@@ -167,6 +169,7 @@ gui_prefs_show(void)
GtkWidget *show_version_cb;
GtkWidget *webbrowser_te;
GtkWidget *save_position_cb, *save_size_cb, *save_maximized_cb;
+ GtkWidget *macosx_style_cb;
GtkTooltips *tooltips = gtk_tooltips_new();
@@ -224,6 +227,16 @@ gui_prefs_show(void)
"maximed state of the main window.", NULL);
g_object_set_data(G_OBJECT(main_vb), GEOMETRY_MAXIMIZED_KEY, save_maximized_cb);
+#ifdef HAVE_IGE_MAC_INTEGRATION
+ macosx_style_cb = create_preference_check_button(main_tb, pos++,
+ "MacOS X style", NULL, prefs.gui_macosx_style);
+ gtk_tooltips_set_tip(tooltips, macosx_style_cb, "Whether to create a "
+ "MacOS X look and feel. Checking this box will move the menu bar to "
+ "the top of the screen instead of the top of the Wireshark window. "
+ "Requires a restart of Wireshark to take effect.", NULL);
+ g_object_set_data(G_OBJECT(main_vb), MACOSX_STYLE_KEY, macosx_style_cb);
+#endif
+
#ifdef _WIN32
/* How the console window should be opened */
console_open_om = create_preference_option_menu(main_tb, pos++,
@@ -388,6 +401,11 @@ gui_prefs_fetch(GtkWidget *w)
prefs.gui_geometry_save_maximized =
gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GEOMETRY_MAXIMIZED_KEY));
+#ifdef HAVE_IGE_MAC_INTEGRATION
+ prefs.gui_macosx_style =
+ gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), MACOSX_STYLE_KEY));
+#endif
+
#ifdef _WIN32
prefs.gui_console_open = fetch_enum_value(
g_object_get_data(G_OBJECT(w), GUI_CONSOLE_OPEN_KEY), gui_console_open_vals);