Bill pointed out that gtk_window_get_size() + gtk_window_resize()
authorGerald Combs <gerald@wireshark.org>
Thu, 21 Mar 2013 18:39:16 +0000 (18:39 -0000)
committerGerald Combs <gerald@wireshark.org>
Thu, 21 Mar 2013 18:39:16 +0000 (18:39 -0000)
doesn't work well in some cases.  Switch to window_get_geometry() +
gtk_window_set_default_size(). (We use gtk_widget_get_preferred_size()
elsewhere but fetches what appeares the minimum width of the top-level
window on my machine instead of the actual width.)

Use a macro to define the initial conversation and endpoint dialog
heigth and increase its value. Use best-guess dialog metrics and UTF8
entities in a few more spots.

Add a comment about alignment not working quite right in Gtk3.

svn path=/trunk/; revision=48459

ui/gtk/capture_dlg.c
ui/gtk/conversations_table.c
ui/gtk/hostlist_table.c
ui/gtk/stock_icons.c

index 0c47948da3feeabc12228ec2abe3a2a5e91fa160..5d1631b7c12a370f90a76a1639f72096945ed9fb 100644 (file)
@@ -4430,7 +4430,7 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
   GtkTreeViewColumn *column;
   gboolean           if_present = TRUE;
   GList             *all_cfilter_list, *cf_entry;
-  gint               tl_width, co_width, co_height;
+  window_geometry_t  tl_geom;
 
   if (interfaces_dialog_window_present()) {
     destroy_if_window();
@@ -4784,6 +4784,11 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
   g_signal_connect(file_bt, "clicked", G_CALLBACK(capture_prep_file_cb), file_te);
 
   /* multiple files table */
+  /* XXX We want multi_grid to shrink to its minimum size horizontally
+   * and be left-aligned within file_fr. Using a horizontal GtkBox works
+   * in Gtk2 but not Gtk3. The situation gets sillier below with limit_fr
+   * and limit_grid because we have both horizontal and vertical GtkBoxes.
+   */
   multi_hb = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0, FALSE);
   gtk_box_pack_start(GTK_BOX(file_vb), multi_hb, FALSE, FALSE, 0);
   multi_grid = ws_gtk_grid_new();
@@ -4906,7 +4911,7 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
   row++;
 
   /* Capture limits frame */
-  limit_fr = frame_new("Stop Capture ...");
+  limit_fr = frame_new("Stop Capture...");
   gtk_box_pack_start(GTK_BOX (left_vb), limit_fr, TRUE, TRUE, 0);
 
   limit_vb = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, DLG_UNRELATED_SPACING, FALSE);
@@ -4923,7 +4928,7 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
   row = 0;
 
   /* Packet count row */
-  stop_packets_cb = gtk_check_button_new_with_label("... after");
+  stop_packets_cb = gtk_check_button_new_with_label("after");
   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(stop_packets_cb),
                                global_capture_opts.has_autostop_packets);
   g_signal_connect(stop_packets_cb, "toggled", G_CALLBACK(capture_prep_adjust_sensitivity), cap_open_w);
@@ -4943,7 +4948,7 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
   row++;
 
   /* Filesize row */
-  stop_filesize_cb = gtk_check_button_new_with_label("... after");
+  stop_filesize_cb = gtk_check_button_new_with_label("after");
   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(stop_filesize_cb),
                                global_capture_opts.has_autostop_filesize);
   g_signal_connect(stop_filesize_cb, "toggled", G_CALLBACK(capture_prep_adjust_sensitivity), cap_open_w);
@@ -4966,7 +4971,7 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
   row++;
 
   /* Duration row */
-  stop_duration_cb = gtk_check_button_new_with_label("... after");
+  stop_duration_cb = gtk_check_button_new_with_label("after");
   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(stop_duration_cb),
                                global_capture_opts.has_autostop_duration);
   g_signal_connect(stop_duration_cb, "toggled", G_CALLBACK(capture_prep_adjust_sensitivity), cap_open_w);
@@ -5139,12 +5144,8 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
   g_signal_connect(cap_open_w, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
   g_signal_connect(cap_open_w, "destroy", G_CALLBACK(capture_prep_destroy_cb), NULL);
 
-  gtk_window_get_size(GTK_WINDOW(top_level), &tl_width, NULL);
-  gtk_window_get_size(GTK_WINDOW(cap_open_w), &co_width, &co_height);
-  tl_width = tl_width * 8 / 10;
-  if (tl_width > co_width) {
-    gtk_window_resize(GTK_WINDOW(cap_open_w), tl_width, co_height);
-  }
+  window_get_geometry(top_level, &tl_geom);
+  gtk_window_set_default_size(GTK_WINDOW(cap_open_w), tl_geom.width * 8 / 10, -1);
   
   gtk_widget_show_all(cap_open_w);
   window_present(cap_open_w);
@@ -5461,7 +5462,7 @@ capture_dlg_prep(gpointer parent_w) {
       } else {
         simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
           "%sStop Capture: Requested filesize too large!%s\n\n"
-          "The setting \"... after x byte(s)\" can't be greater than %u bytes (2GB).",
+          "The setting \"after x byte(s)\" can't be greater than %u bytes (2GB).",
           simple_dialog_primary_start(), simple_dialog_primary_end(), G_MAXINT);
         return FALSE;
       }
index aa04e643cfc25976151224a987595fdff6200306..7dd8dbb5a24c2fd5588e4c41ad88bc50d193e2c5 100644 (file)
@@ -65,6 +65,7 @@
 #define GRAPH_A_B_BT_KEY     "graph-a-b-button"
 #define GRAPH_B_A_BT_KEY     "graph-b-a-button"
 #define NO_BPS_STR "N/A"
+#define CONV_DLG_HEIGHT 550
 
 #define CMP_NUM(n1, n2)                         \
     if ((n1) > (n2))                            \
@@ -2609,7 +2610,7 @@ init_conversation_table(gboolean hide_ports, const char *table_name, const char
     GtkWidget *graph_b_a_bt;
     gboolean add_follow_stream_button = FALSE;
     gboolean add_graph_buttons = FALSE;
-    gint tl_width, ct_width, ct_height;
+    window_geometry_t tl_geom;
 
     conversations=g_new0(conversations_table,1);
 
@@ -2622,11 +2623,12 @@ init_conversation_table(gboolean hide_ports, const char *table_name, const char
     conversations->win = dlg_window_new(title);  /* transient_for top_level */
     gtk_window_set_destroy_with_parent (GTK_WINDOW(conversations->win), TRUE);
 
-    gtk_window_set_default_size(GTK_WINDOW(conversations->win), 750, 400);
+    window_get_geometry(top_level, &tl_geom);
+    gtk_window_set_default_size(GTK_WINDOW(conversations->win), tl_geom.width * 8 / 10, CONV_DLG_HEIGHT);
 
-    vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);
+    vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, DLG_LABEL_SPACING, FALSE);
     gtk_container_add(GTK_CONTAINER(conversations->win), vbox);
-    gtk_container_set_border_width(GTK_CONTAINER(vbox), 12);
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), DLG_OUTER_MARGIN);
 
     ret = init_ct_table_page(conversations, vbox, hide_ports, table_name, tap_name, filter, packet_func);
     if(ret == FALSE) {
@@ -2684,14 +2686,14 @@ init_conversation_table(gboolean hide_ports, const char *table_name, const char
     if (add_graph_buttons) {
         /* Graph A->B */
         graph_a_b_bt = (GtkWidget *)g_object_get_data(G_OBJECT(bbox), WIRESHARK_STOCK_GRAPH_A_B);
-        gtk_widget_set_tooltip_text(graph_a_b_bt, "Graph A->B.");
+        gtk_widget_set_tooltip_text(graph_a_b_bt, "Graph traffic from address A to address B.");
         g_object_set_data(G_OBJECT(graph_a_b_bt), E_DFILTER_TE_KEY, main_display_filter_widget);
         g_object_set_data(G_OBJECT(graph_a_b_bt), CONV_PTR_KEY, conversations);
         g_signal_connect(graph_a_b_bt, "clicked", G_CALLBACK(graph_cb), (gpointer)FALSE);
 
         /* Graph B->A */
         graph_b_a_bt = (GtkWidget *)g_object_get_data(G_OBJECT(bbox), WIRESHARK_STOCK_GRAPH_B_A);
-        gtk_widget_set_tooltip_text(graph_b_a_bt, "Graph B->A.");
+        gtk_widget_set_tooltip_text(graph_b_a_bt, "Graph traffic from address B to address A.");
         g_object_set_data(G_OBJECT(graph_b_a_bt), E_DFILTER_TE_KEY, main_display_filter_widget);
         g_object_set_data(G_OBJECT(graph_b_a_bt), CONV_PTR_KEY, conversations);
         g_signal_connect(graph_b_a_bt, "clicked", G_CALLBACK(graph_cb), (gpointer)TRUE);
@@ -2706,13 +2708,6 @@ init_conversation_table(gboolean hide_ports, const char *table_name, const char
     /* Initially there is no conversation selection to reselect */
     conversations->reselection_idx = -1;
 
-    gtk_window_get_size(GTK_WINDOW(top_level), &tl_width, NULL);
-    gtk_window_get_size(GTK_WINDOW(conversations->win), &ct_width, &ct_height);
-    tl_width = tl_width * 8 / 10;
-    if (tl_width > ct_width) {
-      gtk_window_resize(GTK_WINDOW(conversations->win), tl_width, ct_height);
-    }
-
     gtk_widget_show_all(conversations->win);
     window_present(conversations->win);
 
@@ -2744,7 +2739,7 @@ ct_nb_switch_page_cb(GtkNotebook *nb, gpointer *pg _U_, guint page, gpointer dat
         if (strcmp(((conversations_table *)pages[page])->name, "TCP") == 0) {
             gtk_widget_set_tooltip_text(follow_stream_bt, "Follow TCP Stream.");
             gtk_widget_set_sensitive(follow_stream_bt, TRUE);
-            gtk_widget_set_tooltip_text(follow_stream_bt, "Graph A->B.");
+            gtk_widget_set_tooltip_text(follow_stream_bt, "Graph traffic from address A to address B.");
             gtk_widget_set_sensitive(graph_a_b_bt, TRUE);
             gtk_widget_set_sensitive(graph_b_a_bt, TRUE);
         } else if (strcmp(((conversations_table *)pages[page])->name, "UDP") == 0) {
@@ -2896,7 +2891,7 @@ init_conversation_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
     GtkWidget *follow_stream_bt;
     GtkWidget *graph_a_b_bt;
     GtkWidget *graph_b_a_bt;
-    gint tl_width, cn_width, cn_height;
+    window_geometry_t tl_geom;
 
     pages = (void **)g_malloc(sizeof(void *) * (g_slist_length(registered_ct_tables) + 1));
 
@@ -2906,11 +2901,12 @@ init_conversation_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
     win = dlg_window_new(title);  /* transient_for top_level */
     gtk_window_set_destroy_with_parent (GTK_WINDOW(win), TRUE);
 
-    gtk_window_set_default_size(GTK_WINDOW(win), 750, 400);
+    window_get_geometry(top_level, &tl_geom);
+    gtk_window_set_default_size(GTK_WINDOW(win), tl_geom.width * 8 / 10, CONV_DLG_HEIGHT);
 
-    vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 6, FALSE);
+    vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, DLG_LABEL_SPACING, FALSE);
     gtk_container_add(GTK_CONTAINER(win), vbox);
-    gtk_container_set_border_width(GTK_CONTAINER(vbox), 12);
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), DLG_OUTER_MARGIN);
 
     nb = gtk_notebook_new();
     gtk_box_pack_start(GTK_BOX (vbox), nb, TRUE, TRUE, 0);
@@ -2936,7 +2932,7 @@ init_conversation_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
 
     pages[0] = GINT_TO_POINTER(page);
 
-    hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3, FALSE);
+    hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, DLG_UNRELATED_SPACING, FALSE);
     gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
     resolv_cb = gtk_check_button_new_with_mnemonic("Name resolution");
@@ -2947,7 +2943,7 @@ init_conversation_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
     g_signal_connect(resolv_cb, "toggled", G_CALLBACK(ct_resolve_toggle_dest), pages);
 
     filter_cb = gtk_check_button_new_with_mnemonic("Limit to display filter");
-    gtk_box_pack_start(GTK_BOX (hbox), filter_cb, FALSE, FALSE, DLG_UNRELATED_SPACING);
+    gtk_box_pack_start(GTK_BOX (hbox), filter_cb, FALSE, FALSE, 0);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filter_cb), FALSE);
     gtk_widget_set_tooltip_text(filter_cb, "Limit the list to conversations matching the current display filter.");
     g_signal_connect(filter_cb, "toggled", G_CALLBACK(ct_filter_toggle_dest), pages);
@@ -2975,7 +2971,7 @@ init_conversation_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
 
     /* Graph A->B */
     graph_a_b_bt = (GtkWidget *)g_object_get_data(G_OBJECT(bbox), WIRESHARK_STOCK_GRAPH_A_B);
-    gtk_widget_set_tooltip_text(graph_a_b_bt, "Graph A->B.");
+    gtk_widget_set_tooltip_text(graph_a_b_bt, "Graph traffic from address A to address B.");
     g_object_set_data(G_OBJECT(graph_a_b_bt), E_DFILTER_TE_KEY, main_display_filter_widget);
     g_object_set_data(G_OBJECT(graph_a_b_bt), CONV_PTR_KEY, pages[page]);
     g_signal_connect(graph_a_b_bt, "clicked", G_CALLBACK(graph_cb), (gpointer)FALSE);
@@ -2983,7 +2979,7 @@ init_conversation_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
 
     /* Graph B->A */
     graph_b_a_bt = (GtkWidget *)g_object_get_data(G_OBJECT(bbox), WIRESHARK_STOCK_GRAPH_B_A);
-    gtk_widget_set_tooltip_text(graph_b_a_bt, "Graph B->A.");
+    gtk_widget_set_tooltip_text(graph_b_a_bt, "Graph traffic from address B to address A.");
     g_object_set_data(G_OBJECT(graph_b_a_bt), E_DFILTER_TE_KEY, main_display_filter_widget);
     g_object_set_data(G_OBJECT(graph_b_a_bt), CONV_PTR_KEY, pages[page]);
     g_signal_connect(graph_b_a_bt, "clicked", G_CALLBACK(graph_cb), (gpointer)TRUE);
@@ -3007,13 +3003,6 @@ init_conversation_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
     g_signal_connect(win, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
     g_signal_connect(win, "destroy", G_CALLBACK(ct_win_destroy_notebook_cb), pages);
 
-    gtk_window_get_size(GTK_WINDOW(top_level), &tl_width, NULL);
-    gtk_window_get_size(GTK_WINDOW(win), &cn_width, &cn_height);
-    tl_width = tl_width * 8 / 10;
-    if (tl_width > cn_width) {
-      gtk_window_resize(GTK_WINDOW(win), tl_width, cn_height);
-    }
-
     gtk_widget_show_all(win);
     window_present(win);
 
index abeb38deb9a38a2d89bf1235de54d45bdd44a9b5..8e6138b6a2332583663b33e068bdc5661fe6bb01 100644 (file)
@@ -69,6 +69,7 @@
 
 #define HOST_PTR_KEY "hostlist-pointer"
 #define NB_PAGES_KEY "notebook-pages"
+#define HL_DLG_HEIGHT 550
 
 #define CMP_INT(i1, i2)         \
     if ((i1) > (i2))            \
@@ -1395,7 +1396,7 @@ init_hostlist_table(gboolean hide_ports, const char *table_name, const char *tap
 #ifdef HAVE_GEOIP
     GtkWidget *map_bt;
 #endif
-    gint tl_width, ht_width, ht_height;
+    window_geometry_t tl_geom;
 
     hosttable=g_new(hostlist_table,1);
 
@@ -1408,11 +1409,12 @@ init_hostlist_table(gboolean hide_ports, const char *table_name, const char *tap
     hosttable->win = dlg_window_new(title);  /* transient_for top_level */
     gtk_window_set_destroy_with_parent (GTK_WINDOW(hosttable->win), TRUE);
 
-    gtk_window_set_default_size(GTK_WINDOW(hosttable->win), 750, 400);
+    window_get_geometry(top_level, &tl_geom);
+    gtk_window_set_default_size(GTK_WINDOW(hosttable->win), tl_geom.width * 8 / 10, HL_DLG_HEIGHT);
 
-    vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);
+    vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, DLG_LABEL_SPACING, FALSE);
     gtk_container_add(GTK_CONTAINER(hosttable->win), vbox);
-    gtk_container_set_border_width(GTK_CONTAINER(vbox), 12);
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), DLG_OUTER_MARGIN);
 
     ret = init_hostlist_table_page(hosttable, vbox, hide_ports, table_name, tap_name, filter, packet_func);
     if(ret == FALSE) {
@@ -1458,13 +1460,6 @@ init_hostlist_table(gboolean hide_ports, const char *table_name, const char *tap
     g_signal_connect(hosttable->win, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
     g_signal_connect(hosttable->win, "destroy", G_CALLBACK(hostlist_win_destroy_cb), hosttable);
 
-    gtk_window_get_size(GTK_WINDOW(top_level), &tl_width, NULL);
-    gtk_window_get_size(GTK_WINDOW(hosttable->win), &ht_width, &ht_height);
-    tl_width = tl_width * 8 / 10;
-    if (tl_width > ht_width) {
-      gtk_window_resize(GTK_WINDOW(hosttable->win), tl_width, ht_height);
-    }
-
     gtk_widget_show_all(hosttable->win);
     window_present(hosttable->win);
 
@@ -1644,8 +1639,7 @@ init_hostlist_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
 #ifdef HAVE_GEOIP
     GtkWidget *map_bt;
 #endif
-    gint tl_width, hn_width, hn_height;
-
+    window_geometry_t tl_geom;
 
     pages = (void **)g_malloc(sizeof(void *) * (g_slist_length(registered_hostlist_tables) + 1));
 
@@ -1656,11 +1650,13 @@ init_hostlist_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
     g_snprintf(title, sizeof(title), "Endpoints: %s", display_name);
     g_free(display_name);
     gtk_window_set_title(GTK_WINDOW(win), title);
-    gtk_window_set_default_size(GTK_WINDOW(win), 750, 400);
 
-    vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 6, FALSE);
+    window_get_geometry(top_level, &tl_geom);
+    gtk_window_set_default_size(GTK_WINDOW(win), tl_geom.width * 8 / 10, HL_DLG_HEIGHT);
+
+    vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, DLG_LABEL_SPACING, FALSE);
     gtk_container_add(GTK_CONTAINER(win), vbox);
-    gtk_container_set_border_width(GTK_CONTAINER(vbox), 12);
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), DLG_OUTER_MARGIN);
 
     nb = gtk_notebook_new();
     gtk_box_pack_start(GTK_BOX(vbox), nb, TRUE, TRUE, 0);
@@ -1685,7 +1681,7 @@ init_hostlist_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
 
     pages[0] = GINT_TO_POINTER(page);
 
-    hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3, FALSE);
+    hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, DLG_UNRELATED_SPACING, FALSE);
     gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
     resolv_cb = gtk_check_button_new_with_mnemonic("Name resolution");
@@ -1697,7 +1693,7 @@ init_hostlist_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
     g_signal_connect(resolv_cb, "toggled", G_CALLBACK(hostlist_resolve_toggle_dest), pages);
 
     filter_cb = gtk_check_button_new_with_mnemonic("Limit to display filter");
-    gtk_box_pack_start(GTK_BOX(hbox), filter_cb, FALSE, FALSE, DLG_UNRELATED_SPACING);
+    gtk_box_pack_start(GTK_BOX(hbox), filter_cb, FALSE, FALSE, 0);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filter_cb), FALSE);
     gtk_widget_set_tooltip_text(filter_cb, "Limit the list to endpoints matching the current display filter.");
 
@@ -1736,13 +1732,6 @@ init_hostlist_notebook_cb(GtkWidget *w _U_, gpointer d _U_)
     g_signal_connect(win, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
     g_signal_connect(win, "destroy", G_CALLBACK(hostlist_win_destroy_notebook_cb), pages);
 
-    gtk_window_get_size(GTK_WINDOW(top_level), &tl_width, NULL);
-    gtk_window_get_size(GTK_WINDOW(win), &hn_width, &hn_height);
-    tl_width = tl_width * 8 / 10;
-    if (tl_width > hn_width) {
-      gtk_window_resize(GTK_WINDOW(win), tl_width, hn_height);
-    }
-
     gtk_widget_show_all(win);
     window_present(win);
 
index 7a95775875e9ef566259efce45b566138a72067d..ae616026d2d0cc2cdb407fb23336bab8c3743138 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "ui/gtk/stock_icons.h"
 #include "ui/gtk/toolbar_icons.h"
+#include "ui/utf8_entities.h"
 
 /* these icons are derived from the original stock icons */
 #include "../../image/toolbar/capture_interfaces_24.xpm"
@@ -108,8 +109,8 @@ void stock_icons_init(void) {
 #ifdef HAVE_GEOIP
         { (char *)WIRESHARK_STOCK_MAP,                   (char *)"Map",                   NO_MOD, 0, NULL },
 #endif
-        { (char *)WIRESHARK_STOCK_GRAPH_A_B,             (char *)"Graph A->B",            NO_MOD, 0, NULL },
-        { (char *)WIRESHARK_STOCK_GRAPH_B_A,             (char *)"Graph B->A",            NO_MOD, 0, NULL },
+        { (char *)WIRESHARK_STOCK_GRAPH_A_B,             (char *)"Graph A" UTF8_RIGHTWARDS_ARROW "B", NO_MOD, 0, NULL },
+        { (char *)WIRESHARK_STOCK_GRAPH_B_A,             (char *)"Graph B" UTF8_RIGHTWARDS_ARROW "A", NO_MOD, 0, NULL },
         { (char *)WIRESHARK_STOCK_FOLLOW_STREAM,         (char *)"Follow Stream",         NO_MOD, 0, NULL },
         { (char *)WIRESHARK_STOCK_DISPLAY_FILTER,        (char *)"Display _Filter",       NO_MOD, 0, NULL },
         { (char *)WIRESHARK_STOCK_DISPLAY_FILTER_ENTRY,  (char *)"F_ilter:",  NO_MOD, 0, NULL },