From 008f7c19854edad97656c96cc61e24fed0e4c783 Mon Sep 17 00:00:00 2001
From: winckel <winckel@eurecom.fr>
Date: Thu, 21 Nov 2013 22:23:31 +0000
Subject: [PATCH] Added filters reload button and menu.

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4490 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 .../utils/itti_analyzer/libui/ui_callbacks.c  | 385 +++++++++---------
 .../itti_analyzer/libui/ui_main_screen.h      |   1 +
 .../utils/itti_analyzer/libui/ui_menu_bar.c   |  40 +-
 3 files changed, 231 insertions(+), 195 deletions(-)

diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c
index b2dca233cf7..f12f4226efd 100644
--- a/common/utils/itti_analyzer/libui/ui_callbacks.c
+++ b/common/utils/itti_analyzer/libui/ui_callbacks.c
@@ -28,7 +28,7 @@
 static gboolean refresh_message_list = TRUE;
 static gboolean filters_changed = FALSE;
 
-gboolean ui_callback_on_open_messages(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_open_messages (GtkWidget *widget, gpointer data)
 {
     gboolean refresh = (data != NULL) ? TRUE : FALSE;
 
@@ -46,48 +46,47 @@ gboolean ui_callback_on_open_messages(GtkWidget *widget, gpointer data)
     return TRUE;
 }
 
-gboolean ui_callback_on_save_messages(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_save_messages (GtkWidget *widget, gpointer data)
 {
     g_message("Save messages event occurred");
     // CHECK_FCT(ui_file_chooser());
     return TRUE;
 }
 
-gboolean ui_callback_on_filters_enabled(GtkToolButton *button, gpointer data)
+gboolean ui_callback_on_filters_enabled (GtkToolButton *button, gpointer data)
 {
     gboolean enabled;
     gboolean changed;
 
-    enabled = gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON(button));
+    enabled = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(button));
 
     g_debug("Filters enabled event occurred %d", enabled);
 
-    changed = ui_filters_enable (enabled);
+    changed = ui_filters_enable(enabled);
 
     if (changed)
     {
         /* Set the tool tip text */
         if (enabled)
         {
-            gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM(button), "Disable messages filtering");
+            gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), "Disable messages filtering");
         }
         else
         {
-            gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM(button), "Enable messages filtering");
+            gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), "Enable messages filtering");
         }
-        ui_tree_view_refilter ();
+        ui_tree_view_refilter();
 
         if (ui_main_data.messages_list != NULL)
         {
             GtkTreePath *path_row;
 
             /* Get the currently selected message */
-            gtk_tree_view_get_cursor (GTK_TREE_VIEW(ui_main_data.messages_list), &path_row, NULL);
+            gtk_tree_view_get_cursor(GTK_TREE_VIEW(ui_main_data.messages_list), &path_row, NULL);
             if (path_row != NULL)
             {
                 /* Center the message in the middle of the list if possible */
-                gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, TRUE, 0.5,
-                                              0.0);
+                gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, TRUE, 0.5, 0.0);
             }
         }
     }
@@ -95,49 +94,61 @@ gboolean ui_callback_on_filters_enabled(GtkToolButton *button, gpointer data)
     return TRUE;
 }
 
-gboolean ui_callback_on_open_filters(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_open_filters (GtkWidget *widget, gpointer data)
 {
+    gboolean refresh = (data != NULL) ? TRUE : FALSE;
+
     g_message("Open filters event occurred");
-    CHECK_FCT(ui_filters_open_file_chooser());
+
+    if (refresh && (ui_main_data.filters_file_name != NULL))
+    {
+        CHECK_FCT(ui_filters_read (ui_main_data.filters_file_name));
+    }
+    else
+    {
+        CHECK_FCT(ui_filters_open_file_chooser());
+    }
+
     return TRUE;
 }
 
-gboolean ui_callback_on_save_filters(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_save_filters (GtkWidget *widget, gpointer data)
 {
     g_message("Save filters event occurred");
     CHECK_FCT(ui_filters_save_file_chooser());
     return TRUE;
 }
 
-gboolean ui_callback_on_enable_filters(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_enable_filters (GtkWidget *widget, gpointer data)
 {
     gboolean enabled;
 
-    enabled = gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.filters_enabled));
-    gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.filters_enabled), !enabled);
+    enabled = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(ui_main_data.filters_enabled));
+    gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(ui_main_data.filters_enabled), !enabled);
 
     return TRUE;
 }
 
-gboolean ui_callback_on_about(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_about (GtkWidget *widget, gpointer data)
 {
 #if defined(PACKAGE_STRING)
     ui_notification_dialog (GTK_MESSAGE_INFO, "about", "Eurecom %s", PACKAGE_STRING);
 #else
-    ui_notification_dialog (GTK_MESSAGE_INFO, "about", "Eurecom itti_analyzer");
+    ui_notification_dialog(GTK_MESSAGE_INFO, "about", "Eurecom itti_analyzer");
 #endif
 
     return TRUE;
 }
 
-gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path,
-                                      gboolean path_currently_selected, gpointer user_data)
+gboolean ui_callback_on_select_signal (GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path,
+        gboolean path_currently_selected, gpointer user_data)
 {
     static gpointer buffer_current;
     ui_text_view_t *text_view;
     GtkTreeIter iter;
 
-    g_debug("Message selected %d %p %p %s", path_currently_selected, buffer_current, path, gtk_tree_path_to_string(path));
+    g_debug("Message selected %d %p %p %s", path_currently_selected, buffer_current, path,
+            gtk_tree_path_to_string(path));
 
     if (!path_currently_selected)
     {
@@ -145,7 +156,7 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
 
         g_assert(text_view != NULL);
 
-        if (gtk_tree_model_get_iter (model, &iter, path))
+        if (gtk_tree_model_get_iter(model, &iter, path))
         {
             gpointer buffer;
 
@@ -155,14 +166,15 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
             uint32_t instance;
             char label[100];
 
-            gtk_tree_model_get (model, &iter, COL_MESSAGE_ID, &message_id, COL_FROM_TASK_ID, &origin_task_id,
-                                COL_TO_TASK_ID, &destination_task_id, COL_INSTANCE, &instance, COL_BUFFER, &buffer, -1);
+            gtk_tree_model_get(model, &iter, COL_MESSAGE_ID, &message_id, COL_FROM_TASK_ID, &origin_task_id,
+                    COL_TO_TASK_ID, &destination_task_id, COL_INSTANCE, &instance, COL_BUFFER, &buffer, -1);
 
             g_debug("  Get iter %p %p", buffer_current, buffer);
 
             if (ui_tree_view_last_event)
             {
-                g_debug("last_event %p %d %d", ui_tree_view_last_event, ui_tree_view_last_event->type, ui_tree_view_last_event->button);
+                g_debug("last_event %p %d %d", ui_tree_view_last_event, ui_tree_view_last_event->type,
+                        ui_tree_view_last_event->button);
 
                 if (ui_tree_view_last_event->type == GDK_BUTTON_PRESS)
                 {
@@ -179,24 +191,25 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
 
                         if (ui_main_data.menu_filter_messages == NULL)
                         {
-                            ui_create_filter_menus ();
+                            ui_create_filter_menus();
                         }
 
-                        g_debug("Message selected right click %d %d %d %d", message_id, origin_task_id, destination_task_id, instance);
+                        g_debug("Message selected right click %d %d %d %d", message_id, origin_task_id,
+                                destination_task_id, instance);
 
                         /* Message Id menu */
                         {
                             /* Invalidate associated menu item to avoid issue with call back when updating the menu item check state */
                             ui_tree_view_menu_enable[MENU_MESSAGE].filter_item = NULL;
-                            item = ui_filters_search_id (&ui_filters.messages, message_id);
+                            item = ui_filters_search_id(&ui_filters.messages, message_id);
                             /* Update the menu item check state based on message ID state */
-                            gtk_check_menu_item_set_active (
+                            gtk_check_menu_item_set_active(
                                     GTK_CHECK_MENU_ITEM(ui_tree_view_menu_enable[MENU_MESSAGE].menu_enable),
                                     ui_filters.messages.items[item].enabled);
                             /* Set menu item label */
-                            sprintf (label, "Message:  %s", message_id_to_string (message_id));
-                            gtk_menu_item_set_label (GTK_MENU_ITEM(ui_tree_view_menu_enable[MENU_MESSAGE].menu_enable),
-                                                     label);
+                            sprintf(label, "Message:  %s", message_id_to_string(message_id));
+                            gtk_menu_item_set_label(GTK_MENU_ITEM(ui_tree_view_menu_enable[MENU_MESSAGE].menu_enable),
+                                    label);
                             /* Save menu item associated to this row */
                             ui_tree_view_menu_enable[MENU_MESSAGE].filter_item = &ui_filters.messages.items[item];
                         }
@@ -205,15 +218,15 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
                         {
                             /* Invalidate associated menu item to avoid issue with call back when updating the menu item check state */
                             ui_tree_view_menu_enable[MENU_FROM_TASK].filter_item = NULL;
-                            item = ui_filters_search_id (&ui_filters.origin_tasks, origin_task_id);
+                            item = ui_filters_search_id(&ui_filters.origin_tasks, origin_task_id);
                             /* Update the menu item check state based on message ID state */
-                            gtk_check_menu_item_set_active (
+                            gtk_check_menu_item_set_active(
                                     GTK_CHECK_MENU_ITEM(ui_tree_view_menu_enable[MENU_FROM_TASK].menu_enable),
                                     ui_filters.origin_tasks.items[item].enabled);
                             /* Set menu item label */
-                            sprintf (label, "From:  %s", task_id_to_string (origin_task_id, origin_task_id_type));
-                            gtk_menu_item_set_label (
-                                    GTK_MENU_ITEM(ui_tree_view_menu_enable[MENU_FROM_TASK].menu_enable), label);
+                            sprintf(label, "From:  %s", task_id_to_string(origin_task_id, origin_task_id_type));
+                            gtk_menu_item_set_label(GTK_MENU_ITEM(ui_tree_view_menu_enable[MENU_FROM_TASK].menu_enable),
+                                    label);
                             /* Save menu item associated to this row */
                             ui_tree_view_menu_enable[MENU_FROM_TASK].filter_item = &ui_filters.origin_tasks.items[item];
                         }
@@ -222,16 +235,15 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
                         {
                             /* Invalidate associated menu item to avoid issue with call back when updating the menu item check state */
                             ui_tree_view_menu_enable[MENU_TO_TASK].filter_item = NULL;
-                            item = ui_filters_search_id (&ui_filters.destination_tasks, destination_task_id);
+                            item = ui_filters_search_id(&ui_filters.destination_tasks, destination_task_id);
                             /* Update the menu item check state based on message ID state */
-                            gtk_check_menu_item_set_active (
+                            gtk_check_menu_item_set_active(
                                     GTK_CHECK_MENU_ITEM(ui_tree_view_menu_enable[MENU_TO_TASK].menu_enable),
                                     ui_filters.destination_tasks.items[item].enabled);
                             /* Set menu item label */
-                            sprintf (label, "To:  %s",
-                                     task_id_to_string (destination_task_id, destination_task_id_type));
-                            gtk_menu_item_set_label (GTK_MENU_ITEM(ui_tree_view_menu_enable[MENU_TO_TASK].menu_enable),
-                                                     label);
+                            sprintf(label, "To:  %s", task_id_to_string(destination_task_id, destination_task_id_type));
+                            gtk_menu_item_set_label(GTK_MENU_ITEM(ui_tree_view_menu_enable[MENU_TO_TASK].menu_enable),
+                                    label);
                             /* Save menu item associated to this row */
                             ui_tree_view_menu_enable[MENU_TO_TASK].filter_item =
                                     &ui_filters.destination_tasks.items[item];
@@ -241,21 +253,21 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
                         {
                             /* Invalidate associated menu item to avoid issue with call back when updating the menu item check state */
                             ui_tree_view_menu_enable[MENU_INSTANCE].filter_item = NULL;
-                            item = ui_filters_search_id (&ui_filters.instances, instance);
+                            item = ui_filters_search_id(&ui_filters.instances, instance);
                             /* Update the menu item check state based on message ID state */
-                            gtk_check_menu_item_set_active (
+                            gtk_check_menu_item_set_active(
                                     GTK_CHECK_MENU_ITEM(ui_tree_view_menu_enable[MENU_INSTANCE].menu_enable),
                                     ui_filters.instances.items[item].enabled);
                             /* Set menu item label */
-                            sprintf (label, "Instance:  %d", instance);
-                            gtk_menu_item_set_label (GTK_MENU_ITEM(ui_tree_view_menu_enable[MENU_INSTANCE].menu_enable),
-                                                     label);
+                            sprintf(label, "Instance:  %d", instance);
+                            gtk_menu_item_set_label(GTK_MENU_ITEM(ui_tree_view_menu_enable[MENU_INSTANCE].menu_enable),
+                                    label);
                             /* Save menu item associated to this row */
                             ui_tree_view_menu_enable[MENU_INSTANCE].filter_item = &ui_filters.instances.items[item];
                         }
 
-                        gtk_menu_popup (GTK_MENU (ui_tree_view_menu), NULL, NULL, NULL, NULL, 0,
-                                        gtk_get_current_event_time ());
+                        gtk_menu_popup(GTK_MENU (ui_tree_view_menu), NULL, NULL, NULL, NULL, 0,
+                                gtk_get_current_event_time());
                     }
                 }
 
@@ -275,12 +287,12 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
                     CHECK_FCT_DO(dissect_signal_header((buffer_t*)buffer, ui_signal_set_text, text_view), return FALSE);
                 }
 
-                if ((strcmp (message_id_to_string (message_id), "ERROR_LOG") == 0)
-                        || (strcmp (message_id_to_string (message_id), "WARNING_LOG") == 0)
-                        || (strcmp (message_id_to_string (message_id), "NOTICE_LOG") == 0)
-                        || (strcmp (message_id_to_string (message_id), "INFO_LOG") == 0)
-                        || (strcmp (message_id_to_string (message_id), "DEBUG_LOG") == 0)
-                        || (strcmp (message_id_to_string (message_id), "GENERIC_LOG") == 0))
+                if ((strcmp(message_id_to_string(message_id), "ERROR_LOG") == 0)
+                        || (strcmp(message_id_to_string(message_id), "WARNING_LOG") == 0)
+                        || (strcmp(message_id_to_string(message_id), "NOTICE_LOG") == 0)
+                        || (strcmp(message_id_to_string(message_id), "INFO_LOG") == 0)
+                        || (strcmp(message_id_to_string(message_id), "DEBUG_LOG") == 0)
+                        || (strcmp(message_id_to_string(message_id), "GENERIC_LOG") == 0))
                 {
                     gchar *data;
                     gint data_size;
@@ -288,16 +300,17 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
 
                     if (ui_main_data.display_message_header)
                     {
-                        ui_signal_set_text (text_view, "\n", 1);
+                        ui_signal_set_text(text_view, "\n", 1);
                     }
 
-                    message_header_type_size = get_message_header_type_size ();
-                    data = (gchar *) buffer_at_offset ((buffer_t*) buffer, message_header_type_size);
-                    data_size = get_message_size ((buffer_t*) buffer);
+                    message_header_type_size = get_message_header_type_size();
+                    data = (gchar *) buffer_at_offset((buffer_t*) buffer, message_header_type_size);
+                    data_size = get_message_size((buffer_t*) buffer);
 
-                    g_debug("    message header type size: %u, data size: %u %p %d", message_header_type_size, data_size, buffer, ui_main_data.follow_last);
+                    g_debug("    message header type size: %u, data size: %u %p %d", message_header_type_size,
+                            data_size, buffer, ui_main_data.follow_last);
 
-                    ui_signal_set_text (text_view, data, data_size);
+                    ui_signal_set_text(text_view, data, data_size);
                 }
                 else
                 {
@@ -312,21 +325,21 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
     return TRUE;
 }
 
-gboolean ui_callback_on_menu_enable(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_menu_enable (GtkWidget *widget, gpointer data)
 {
     ui_tree_view_menu_enable_t *menu_enable = data;
 
     if (menu_enable->filter_item != NULL)
     {
-        gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(menu_enable->filter_item->menu_item),
-                                        gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM(menu_enable->menu_enable)));
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_enable->filter_item->menu_item),
+                gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu_enable->menu_enable)));
         menu_enable->filter_item = NULL;
     }
 
     return TRUE;
 }
 
-gboolean ui_callback_on_menu_color(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_menu_color (GtkWidget *widget, gpointer data)
 {
     ui_tree_view_menu_enable_t *menu_enable = data;
 
@@ -334,30 +347,31 @@ gboolean ui_callback_on_menu_color(GtkWidget *widget, gpointer data)
     GtkWidget *color_chooser;
     gint response;
 
-    color_chooser = gtk_color_chooser_dialog_new ("Select message background color", GTK_WINDOW(ui_main_data.window));
-    gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER(color_chooser), FALSE);
-    response = gtk_dialog_run (GTK_DIALOG (color_chooser));
+    color_chooser = gtk_color_chooser_dialog_new("Select message background color", GTK_WINDOW(ui_main_data.window));
+    gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(color_chooser), FALSE);
+    response = gtk_dialog_run(GTK_DIALOG (color_chooser));
 
     if (response == GTK_RESPONSE_OK)
     {
         int red, green, blue;
 
-        gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER(color_chooser), &color);
+        gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(color_chooser), &color);
 
         red = (int) (color.red * 255);
         green = (int) (color.green * 255);
         blue = (int) (color.blue * 255);
-        g_debug("Selected color for %s %f->%02x %f->%02x %f->%02x", menu_enable->filter_item->name, color.red, red, color.green, green, color.blue, blue);
+        g_debug("Selected color for %s %f->%02x %f->%02x %f->%02x", menu_enable->filter_item->name, color.red, red,
+                color.green, green, color.blue, blue);
 
-        snprintf (menu_enable->filter_item->background, BACKGROUND_SIZE, "#%02x%02x%02x", red, green, blue);
-        ui_tree_view_refilter ();
+        snprintf(menu_enable->filter_item->background, BACKGROUND_SIZE, "#%02x%02x%02x", red, green, blue);
+        ui_tree_view_refilter();
     }
-    gtk_widget_destroy (color_chooser);
+    gtk_widget_destroy(color_chooser);
 
     return TRUE;
 }
 
-void ui_signal_add_to_list(gpointer data, gpointer user_data)
+void ui_signal_add_to_list (gpointer data, gpointer user_data)
 {
     gboolean goto_last = user_data ? TRUE : FALSE;
     buffer_t *signal_buffer;
@@ -371,23 +385,23 @@ void ui_signal_add_to_list(gpointer data, gpointer user_data)
 
     char lte_time[15];
 
-    gtk_tree_view_get_cursor (GTK_TREE_VIEW(ui_main_data.messages_list), &path, &focus_column);
+    gtk_tree_view_get_cursor(GTK_TREE_VIEW(ui_main_data.messages_list), &path, &focus_column);
 
     signal_buffer = (buffer_t *) data;
 
-    lte_frame = get_lte_frame (signal_buffer);
-    lte_slot = get_lte_slot (signal_buffer);
-    sprintf (lte_time, "%d.%02d", lte_frame, lte_slot);
+    lte_frame = get_lte_frame(signal_buffer);
+    lte_slot = get_lte_slot(signal_buffer);
+    sprintf(lte_time, "%d.%02d", lte_frame, lte_slot);
 
-    get_message_id (root, signal_buffer, &signal_buffer->message_id);
-    origin_task_id = get_task_id (signal_buffer, origin_task_id_type);
-    destination_task_id = get_task_id (signal_buffer, destination_task_id_type);
-    instance = get_instance (signal_buffer);
+    get_message_id(root, signal_buffer, &signal_buffer->message_id);
+    origin_task_id = get_task_id(signal_buffer, origin_task_id_type);
+    destination_task_id = get_task_id(signal_buffer, destination_task_id_type);
+    instance = get_instance(signal_buffer);
 
-    ui_tree_view_new_signal_ind (signal_buffer->message_number, lte_time, signal_buffer->message_id,
-                                 message_id_to_string (signal_buffer->message_id), origin_task_id,
-                                 task_id_to_string (origin_task_id, origin_task_id_type), destination_task_id,
-                                 task_id_to_string (destination_task_id, destination_task_id_type), instance, data);
+    ui_tree_view_new_signal_ind(signal_buffer->message_number, lte_time, signal_buffer->message_id,
+            message_id_to_string(signal_buffer->message_id), origin_task_id,
+            task_id_to_string(origin_task_id, origin_task_id_type), destination_task_id,
+            task_id_to_string(destination_task_id, destination_task_id_type), instance, data);
 
     /* Increment number of messages */
     ui_main_data.nb_message_received++;
@@ -395,67 +409,65 @@ void ui_signal_add_to_list(gpointer data, gpointer user_data)
     if ((ui_main_data.follow_last) && (goto_last))
     {
         /* Advance to the new last signal */
-        ui_tree_view_select_row (ui_tree_view_get_filtered_number () - 1);
+        ui_tree_view_select_row(ui_tree_view_get_filtered_number() - 1);
     }
 }
 
-static gboolean ui_handle_update_signal_list(gint fd, void *data, size_t data_length)
+static gboolean ui_handle_update_signal_list (gint fd, void *data, size_t data_length)
 {
     pipe_new_signals_list_message_t *signal_list_message;
 
     /* Enable buttons to move in the list of signals */
-    ui_set_sensitive_move_buttons (TRUE);
+    ui_set_sensitive_move_buttons(TRUE);
 
     signal_list_message = (pipe_new_signals_list_message_t *) data;
 
     g_assert(signal_list_message != NULL);
     g_assert(signal_list_message->signal_list != NULL);
 
-    g_list_foreach (signal_list_message->signal_list, ui_signal_add_to_list, (gpointer) TRUE);
+    g_list_foreach(signal_list_message->signal_list, ui_signal_add_to_list, (gpointer) TRUE);
 
     /* Free the list but not user data associated with each element */
-    g_list_free (signal_list_message->signal_list);
+    g_list_free(signal_list_message->signal_list);
     /* Free the message */
-    free (signal_list_message);
+    free(signal_list_message);
 
-    ui_gtk_flush_events ();
+    ui_gtk_flush_events();
 
     return TRUE;
 }
 
-static gboolean ui_handle_socket_connection_failed(gint fd)
+static gboolean ui_handle_socket_connection_failed (gint fd)
 {
     GtkWidget *dialogbox;
 
-    dialogbox = gtk_message_dialog_new (GTK_WINDOW(ui_main_data.window), GTK_DIALOG_DESTROY_WITH_PARENT,
-                                        GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
-                                        "Failed to connect to provided host/ip address");
+    dialogbox = gtk_message_dialog_new(GTK_WINDOW(ui_main_data.window), GTK_DIALOG_DESTROY_WITH_PARENT,
+            GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Failed to connect to provided host/ip address");
 
-    gtk_dialog_run (GTK_DIALOG(dialogbox));
-    gtk_widget_destroy (dialogbox);
+    gtk_dialog_run(GTK_DIALOG(dialogbox));
+    gtk_widget_destroy(dialogbox);
 
     /* Re-enable connect button */
-    ui_enable_connect_button ();
+    ui_enable_connect_button();
     return TRUE;
 }
 
-static gboolean ui_handle_socket_connection_lost(gint fd)
+static gboolean ui_handle_socket_connection_lost (gint fd)
 {
     GtkWidget *dialogbox;
 
-    dialogbox = gtk_message_dialog_new (GTK_WINDOW(ui_main_data.window), GTK_DIALOG_DESTROY_WITH_PARENT,
-                                        GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
-                                        "Connection with remote host has been lost");
+    dialogbox = gtk_message_dialog_new(GTK_WINDOW(ui_main_data.window), GTK_DIALOG_DESTROY_WITH_PARENT,
+            GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Connection with remote host has been lost");
 
-    gtk_dialog_run (GTK_DIALOG(dialogbox));
-    gtk_widget_destroy (dialogbox);
+    gtk_dialog_run(GTK_DIALOG(dialogbox));
+    gtk_widget_destroy(dialogbox);
 
     /* Re-enable connect button */
-    ui_enable_connect_button ();
+    ui_enable_connect_button();
     return TRUE;
 }
 
-static gboolean ui_handle_socket_xml_definition(gint fd, void *data, size_t data_length)
+static gboolean ui_handle_socket_xml_definition (gint fd, void *data, size_t data_length)
 {
     pipe_xml_definition_message_t *xml_definition_message;
 
@@ -463,21 +475,21 @@ static gboolean ui_handle_socket_xml_definition(gint fd, void *data, size_t data
     g_assert(xml_definition_message != NULL);
     g_assert(data_length == sizeof(pipe_xml_definition_message_t));
 
-    xml_parse_buffer (xml_definition_message->xml_definition, xml_definition_message->xml_definition_length);
+    xml_parse_buffer(xml_definition_message->xml_definition, xml_definition_message->xml_definition_length);
 
-    free (data);
+    free(data);
 
     return TRUE;
 }
 
-gboolean ui_pipe_callback(gint source, gpointer user_data)
+gboolean ui_pipe_callback (gint source, gpointer user_data)
 {
     void *input_data = NULL;
     size_t input_data_length = 0;
     pipe_input_header_t input_header;
 
     /* Read the header */
-    if (read (source, &input_header, sizeof(input_header)) < 0)
+    if (read(source, &input_header, sizeof(input_header)) < 0)
     {
         g_warning("Failed to read from pipe %d: %s", source, g_strerror(errno));
         return FALSE;
@@ -488,9 +500,9 @@ gboolean ui_pipe_callback(gint source, gpointer user_data)
     /* Checking for non-header part */
     if (input_data_length > 0)
     {
-        input_data = malloc (input_data_length);
+        input_data = malloc(input_data_length);
 
-        if (read (source, input_data, input_data_length) < 0)
+        if (read(source, input_data, input_data_length) < 0)
         {
             g_warning("Failed to read from pipe %d: %s", source, g_strerror(errno));
             return FALSE;
@@ -499,233 +511,234 @@ gboolean ui_pipe_callback(gint source, gpointer user_data)
 
     switch (input_header.message_type)
     {
-        case UI_PIPE_CONNECTION_FAILED:
-            return ui_handle_socket_connection_failed (source);
-        case UI_PIPE_XML_DEFINITION:
-            return ui_handle_socket_xml_definition (source, input_data, input_data_length);
-        case UI_PIPE_CONNECTION_LOST:
-            return ui_handle_socket_connection_lost (source);
-        case UI_PIPE_UPDATE_SIGNAL_LIST:
-            return ui_handle_update_signal_list (source, input_data, input_data_length);
-        default:
-            g_warning("[gui] Unhandled message type %u", input_header.message_type);
-            g_assert_not_reached();
+    case UI_PIPE_CONNECTION_FAILED:
+        return ui_handle_socket_connection_failed(source);
+    case UI_PIPE_XML_DEFINITION:
+        return ui_handle_socket_xml_definition(source, input_data, input_data_length);
+    case UI_PIPE_CONNECTION_LOST:
+        return ui_handle_socket_connection_lost(source);
+    case UI_PIPE_UPDATE_SIGNAL_LIST:
+        return ui_handle_update_signal_list(source, input_data, input_data_length);
+    default:
+        g_warning("[gui] Unhandled message type %u", input_header.message_type);
+        g_assert_not_reached();
     }
     return FALSE;
 }
 
-gboolean ui_callback_on_connect(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_connect (GtkWidget *widget, gpointer data)
 {
     /* We have to retrieve the ip address and port of remote host */
     const char *ip;
     uint16_t port;
     int pipe_fd[2];
 
-    port = atoi (gtk_entry_get_text (GTK_ENTRY(ui_main_data.port_entry)));
-    ip = gtk_entry_get_text (GTK_ENTRY(ui_main_data.ip_entry));
+    port = atoi(gtk_entry_get_text(GTK_ENTRY(ui_main_data.port_entry)));
+    ip = gtk_entry_get_text(GTK_ENTRY(ui_main_data.ip_entry));
 
     g_message("Connect event occurred to %s:%d", ip, port);
 
-    if (strlen (ip) == 0)
+    if (strlen(ip) == 0)
     {
-        ui_notification_dialog (GTK_MESSAGE_WARNING, "Connect", "Empty host ip address");
+        ui_notification_dialog(GTK_MESSAGE_WARNING, "Connect", "Empty host ip address");
         return FALSE;
     }
 
     if (port == 0)
     {
-        ui_notification_dialog (GTK_MESSAGE_WARNING, "Connect", "Invalid host port value");
+        ui_notification_dialog(GTK_MESSAGE_WARNING, "Connect", "Invalid host port value");
         return FALSE;
     }
 
-    ui_pipe_new (pipe_fd, ui_pipe_callback, NULL);
+    ui_pipe_new(pipe_fd, ui_pipe_callback, NULL);
 
-    memcpy (ui_main_data.pipe_fd, pipe_fd, sizeof(int) * 2);
+    memcpy(ui_main_data.pipe_fd, pipe_fd, sizeof(int) * 2);
 
     /* Disable the connect button */
-    ui_disable_connect_button ();
+    ui_disable_connect_button();
 
-    ui_callback_signal_clear_list (widget, data);
+    ui_callback_signal_clear_list(widget, data);
 
-    if (socket_connect_to_remote_host (ip, port, pipe_fd[1]) != 0)
+    if (socket_connect_to_remote_host(ip, port, pipe_fd[1]) != 0)
     {
-        ui_enable_connect_button ();
+        ui_enable_connect_button();
         return FALSE;
     }
-    ui_set_title ("%s:%d", ip, port);
+    ui_set_title("%s:%d", ip, port);
 
     return TRUE;
 }
 
-gboolean ui_callback_on_disconnect(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_disconnect (GtkWidget *widget, gpointer data)
 {
     /* We have to retrieve the ip address and port of remote host */
 
     g_message("Disconnect event occurred");
 
-    ui_pipe_write_message (ui_main_data.pipe_fd[0], UI_PIPE_DISCONNECT_EVT, NULL, 0);
+    ui_pipe_write_message(ui_main_data.pipe_fd[0], UI_PIPE_DISCONNECT_EVT, NULL, 0);
 
-    ui_enable_connect_button ();
+    ui_enable_connect_button();
     return TRUE;
 }
 
-gboolean ui_callback_signal_go_to_first(GtkWidget *widget, gpointer data)
+gboolean ui_callback_signal_go_to_first (GtkWidget *widget, gpointer data)
 {
-    ui_tree_view_select_row (0);
+    ui_tree_view_select_row(0);
     ui_main_data.follow_last = FALSE;
 
     return TRUE;
 }
 
-gboolean ui_callback_signal_go_to(GtkWidget *widget, gpointer data)
+gboolean ui_callback_signal_go_to (GtkWidget *widget, gpointer data)
 {
-    gtk_window_set_focus (GTK_WINDOW(ui_main_data.window), ui_main_data.signals_go_to_entry);
+    gtk_window_set_focus(GTK_WINDOW(ui_main_data.window), ui_main_data.signals_go_to_entry);
     return TRUE;
 }
 
-gboolean ui_callback_signal_go_to_entry(GtkWidget *widget, gpointer data)
+gboolean ui_callback_signal_go_to_entry (GtkWidget *widget, gpointer data)
 {
     // gtk_entry_buffer_set_text(GTK_ENTRY(ui_main_data.signals_go_to_entry), "");
-    gtk_window_set_focus (GTK_WINDOW(ui_main_data.window), ui_main_data.messages_list);
+    gtk_window_set_focus(GTK_WINDOW(ui_main_data.window), ui_main_data.messages_list);
     return TRUE;
 }
 
-gboolean ui_callback_signal_go_to_last(GtkWidget *widget, gpointer data)
+gboolean ui_callback_signal_go_to_last (GtkWidget *widget, gpointer data)
 {
-    ui_tree_view_select_row (ui_tree_view_get_filtered_number () - 1);
+    ui_tree_view_select_row(ui_tree_view_get_filtered_number() - 1);
     ui_main_data.follow_last = TRUE;
 
     return TRUE;
 }
 
-gboolean ui_callback_display_message_header(GtkWidget *widget, gpointer data)
+gboolean ui_callback_display_message_header (GtkWidget *widget, gpointer data)
 {
     ui_main_data.display_message_header = !ui_main_data.display_message_header;
     // TODO refresh textview.
     return TRUE;
 }
 
-gboolean ui_callback_display_brace(GtkWidget *widget, gpointer data)
+gboolean ui_callback_display_brace (GtkWidget *widget, gpointer data)
 {
     ui_main_data.display_brace = !ui_main_data.display_brace;
     // TODO refresh textview.
     return TRUE;
 }
 
-gboolean ui_callback_signal_clear_list(GtkWidget *widget, gpointer data)
+gboolean ui_callback_signal_clear_list (GtkWidget *widget, gpointer data)
 {
     /* Disable buttons to move in the list of signals */
-    ui_set_sensitive_move_buttons (FALSE);
-    ui_set_title ("");
+    ui_set_sensitive_move_buttons(FALSE);
+    ui_set_title("");
 
     /* Clear list of signals */
-    ui_tree_view_destroy_list (ui_main_data.messages_list);
+    ui_tree_view_destroy_list(ui_main_data.messages_list);
 
     if (ui_main_data.text_view != NULL)
     {
-        ui_signal_dissect_clear_view (ui_main_data.text_view);
+        ui_signal_dissect_clear_view(ui_main_data.text_view);
     }
 
     return TRUE;
 }
 
-static void ui_callback_on_menu_items_selected(GtkWidget *widget, gpointer data)
+static void ui_callback_on_menu_items_selected (GtkWidget *widget, gpointer data)
 {
     gboolean active = data != NULL;
 
     if (GTK_IS_CHECK_MENU_ITEM(widget))
     {
-        gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(widget), active);
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), active);
     }
 }
 
-gboolean ui_callback_on_menu_none(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_menu_none (GtkWidget *widget, gpointer data)
 {
     GtkWidget *menu = (GtkWidget *) data;
 
     g_debug("ui_callback_on_menu_none occurred %lx %lx)", (long) widget, (long) data);
 
     refresh_message_list = FALSE;
-    gtk_container_foreach (GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) FALSE);
+    gtk_container_foreach(GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) FALSE);
     refresh_message_list = TRUE;
 
     if (filters_changed)
     {
-        ui_tree_view_refilter ();
+        ui_tree_view_refilter();
         filters_changed = FALSE;
     }
 
     return TRUE;
 }
 
-gboolean ui_callback_on_menu_all(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_menu_all (GtkWidget *widget, gpointer data)
 {
     GtkWidget *menu = (GtkWidget *) data;
 
     g_debug("ui_callback_on_menu_all occurred %lx %lx)", (long) widget, (long) data);
 
     refresh_message_list = FALSE;
-    gtk_container_foreach (GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) TRUE);
+    gtk_container_foreach(GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) TRUE);
     refresh_message_list = TRUE;
 
     if (filters_changed)
     {
-        ui_tree_view_refilter ();
+        ui_tree_view_refilter();
         filters_changed = FALSE;
     }
 
     return TRUE;
 }
 
-gboolean ui_callback_on_menu_item_selected(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_menu_item_selected (GtkWidget *widget, gpointer data)
 {
     ui_filter_item_t *filter_entry = data;
     gboolean enabled;
 
-    enabled = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM(widget));
+    enabled = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
     if (filter_entry->enabled != enabled)
     {
         filter_entry->enabled = enabled;
         if (refresh_message_list)
         {
-            ui_tree_view_refilter ();
+            ui_tree_view_refilter();
         }
         else
         {
             filters_changed = TRUE;
         }
     }
-    g_debug("ui_callback_on_menu_item_selected occurred %p %p %s %d (%d messages to display)", widget, data, filter_entry->name, enabled, ui_tree_view_get_filtered_number());
+    g_debug("ui_callback_on_menu_item_selected occurred %p %p %s %d (%d messages to display)", widget, data,
+            filter_entry->name, enabled, ui_tree_view_get_filtered_number());
 
     return TRUE;
 }
 
-gboolean ui_callback_on_tree_column_header_click(GtkWidget *widget, gpointer data)
+gboolean ui_callback_on_tree_column_header_click (GtkWidget *widget, gpointer data)
 {
     col_type_t col = (col_type_t) data;
 
     g_debug("ui_callback_on_tree_column_header_click %d", col);
     switch (col)
     {
-        case COL_MESSAGE:
-            ui_show_filter_menu (&ui_main_data.menu_filter_messages, &ui_filters.messages);
-            break;
+    case COL_MESSAGE:
+        ui_show_filter_menu(&ui_main_data.menu_filter_messages, &ui_filters.messages);
+        break;
 
-        case COL_FROM_TASK:
-            ui_show_filter_menu (&ui_main_data.menu_filter_origin_tasks, &ui_filters.origin_tasks);
-            break;
+    case COL_FROM_TASK:
+        ui_show_filter_menu(&ui_main_data.menu_filter_origin_tasks, &ui_filters.origin_tasks);
+        break;
 
-        case COL_TO_TASK:
-            ui_show_filter_menu (&ui_main_data.menu_filter_destination_tasks, &ui_filters.destination_tasks);
-            break;
+    case COL_TO_TASK:
+        ui_show_filter_menu(&ui_main_data.menu_filter_destination_tasks, &ui_filters.destination_tasks);
+        break;
 
-        case COL_INSTANCE:
-            ui_show_filter_menu (&ui_main_data.menu_filter_instances, &ui_filters.instances);
-            break;
+    case COL_INSTANCE:
+        ui_show_filter_menu(&ui_main_data.menu_filter_instances, &ui_filters.instances);
+        break;
 
-        default:
-            g_warning("Unknown column filter %d in call to ui_callback_on_tree_column_header_click", col);
-            return FALSE;
+    default:
+        g_warning("Unknown column filter %d in call to ui_callback_on_tree_column_header_click", col);
+        return FALSE;
     }
 
     return TRUE;
diff --git a/common/utils/itti_analyzer/libui/ui_main_screen.h b/common/utils/itti_analyzer/libui/ui_main_screen.h
index 67d80dcfec7..a3c90e80935 100644
--- a/common/utils/itti_analyzer/libui/ui_main_screen.h
+++ b/common/utils/itti_analyzer/libui/ui_main_screen.h
@@ -20,6 +20,7 @@ typedef struct {
     /* Buttons */
     GtkToolItem *filters_enabled;
     GtkToolItem *open_filters_file;
+    GtkToolItem *refresh_filters_file;
     GtkToolItem *save_filters_file;
 
     GtkToolItem *open_replay_file;
diff --git a/common/utils/itti_analyzer/libui/ui_menu_bar.c b/common/utils/itti_analyzer/libui/ui_menu_bar.c
index 8dacf806ae8..3ff63e4b861 100644
--- a/common/utils/itti_analyzer/libui/ui_menu_bar.c
+++ b/common/utils/itti_analyzer/libui/ui_menu_bar.c
@@ -22,15 +22,16 @@ int ui_menu_bar_create(GtkWidget *vbox)
 {
     GtkAccelGroup *accel_group;
     GtkWidget *menu_bar;
+
     GtkWidget *filters_menu;
-    GtkWidget *messages_menu;
-    GtkWidget *help_menu;
     GtkWidget *filters;
-    GtkWidget *messages;
-    GtkWidget *help;
     GtkWidget *open_filters;
+    GtkWidget *reload_filters;
     GtkWidget *save_filters;
     GtkWidget *enable_filters;
+
+    GtkWidget *messages_menu;
+    GtkWidget *messages;
     GtkWidget *open_messages;
     GtkWidget *reload_messages;
     GtkWidget *save_messages;
@@ -39,6 +40,9 @@ int ui_menu_bar_create(GtkWidget *vbox)
     GtkWidget *goto_last_messages;
     GtkWidget *display_message_header;
     GtkWidget *display_brace;
+
+    GtkWidget *help_menu;
+    GtkWidget *help;
     GtkWidget *quit;
     GtkWidget *about;
 
@@ -64,7 +68,15 @@ int ui_menu_bar_create(GtkWidget *vbox)
             gtk_widget_add_accelerator (open_filters, "activate", accel_group, GDK_KEY_p, GDK_CONTROL_MASK,
                                         GTK_ACCEL_VISIBLE);
             gtk_menu_shell_append (GTK_MENU_SHELL(filters_menu), open_filters);
-            g_signal_connect(G_OBJECT(open_filters), "activate", G_CALLBACK(ui_callback_on_open_filters), NULL);
+            g_signal_connect(G_OBJECT(open_filters), "activate", G_CALLBACK(ui_callback_on_open_filters), (gpointer) FALSE);
+
+            reload_filters = gtk_menu_item_new_with_mnemonic ("_Reload filters file");
+            gtk_widget_add_accelerator (reload_filters, "activate", accel_group, GDK_KEY_d, GDK_CONTROL_MASK,
+                                        GTK_ACCEL_VISIBLE);
+            gtk_widget_add_accelerator (reload_filters, "activate", accel_group, GDK_KEY_F4, 0, GTK_ACCEL_VISIBLE);
+            gtk_menu_shell_append (GTK_MENU_SHELL(filters_menu), reload_filters);
+            g_signal_connect(G_OBJECT(reload_filters), "activate", G_CALLBACK(ui_callback_on_open_filters),
+                             (gpointer) TRUE);
 
             save_filters = gtk_menu_item_new_with_mnemonic ("_Save filters file");
             gtk_widget_add_accelerator (save_filters, "activate", accel_group, GDK_KEY_a, GDK_CONTROL_MASK,
@@ -209,7 +221,16 @@ int ui_toolbar_create(GtkWidget *vbox)
         gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.open_filters_file), "Open filters file");
 
         g_signal_connect(G_OBJECT(ui_main_data.open_filters_file), "clicked",
-                        G_CALLBACK(ui_callback_on_open_filters), NULL);
+                        G_CALLBACK(ui_callback_on_open_filters), (gpointer) FALSE);
+    }
+
+    /* Button to refresh filters file */
+    {
+        ui_main_data.refresh_filters_file = gtk_tool_button_new_from_stock(GTK_STOCK_REFRESH);
+        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.refresh_filters_file), "Reload filters file");
+
+        g_signal_connect(G_OBJECT(ui_main_data.refresh_filters_file), "clicked",
+                        G_CALLBACK(ui_callback_on_open_filters), (gpointer) TRUE);
     }
 
     /* Button to save filters file */
@@ -221,7 +242,7 @@ int ui_toolbar_create(GtkWidget *vbox)
                         G_CALLBACK(ui_callback_on_save_filters), NULL);
     }
 
-    /* Button to open replay file */
+    /* Button to open messages file */
     {
         ui_main_data.open_replay_file = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
         gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.open_replay_file), "Open messages file");
@@ -230,7 +251,7 @@ int ui_toolbar_create(GtkWidget *vbox)
                         G_CALLBACK(ui_callback_on_open_messages), (gpointer) FALSE);
     }
 
-    /* Button to refresh replay file */
+    /* Button to refresh messages file */
     {
         ui_main_data.refresh_replay_file = gtk_tool_button_new_from_stock(GTK_STOCK_REFRESH);
         gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.refresh_replay_file), "Reload messages file");
@@ -239,7 +260,7 @@ int ui_toolbar_create(GtkWidget *vbox)
                         G_CALLBACK(ui_callback_on_open_messages), (gpointer) TRUE);
     }
 
-    /* Button to save replay file */
+    /* Button to save messages file */
     {
         ui_main_data.save_replay_file = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
         gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.save_replay_file), "Save messages file");
@@ -320,6 +341,7 @@ int ui_toolbar_create(GtkWidget *vbox)
 
     gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.filters_enabled), FALSE, FALSE, LABEL_SPACE);
     gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.open_filters_file), FALSE, FALSE, BUTTON_SPACE);
+    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.refresh_filters_file), FALSE, FALSE, BUTTON_SPACE);
     gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.save_filters_file), FALSE, FALSE, BUTTON_SPACE);
 
     gtk_box_pack_start(GTK_BOX(hbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL), FALSE, FALSE, SEPARATOR_SPACE);
-- 
GitLab