summaryrefslogtreecommitdiffstats
path: root/client/advancedwin.c
diff options
context:
space:
mode:
Diffstat (limited to 'client/advancedwin.c')
-rw-r--r--client/advancedwin.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/client/advancedwin.c b/client/advancedwin.c
new file mode 100644
index 0000000..4cbac57
--- /dev/null
+++ b/client/advancedwin.c
@@ -0,0 +1,59 @@
+#include <gtk/gtk.h>
+
+#include "advancedwin.h"
+#include "interface.h"
+#include "format.h"
+#include "support.h"
+#include "connection.h"
+#include "ruleset.h"
+
+static gboolean ignore_apply = TRUE;
+
+static GtkWidget* get_window(void) {
+ static GtkWidget *aw = NULL;
+
+ if (!aw) {
+ aw = create_advanced_window();
+ fill_icmp_menu(GTK_OPTION_MENU(lookup_widget(aw, "icmp_option_menu")), TRUE, 0);
+ }
+ return aw;
+}
+
+
+void advancedwin_show(gboolean b) {
+ if (b) {
+ advancedwin_fill();
+ gtk_widget_show_all(get_window());
+ ignore_apply = FALSE;
+ } else {
+ ignore_apply = TRUE;
+ gtk_widget_hide(get_window());
+ }
+}
+
+void advancedwin_fill() {
+ GtkWidget *aw = get_window();
+
+ set_icmp_menu_entry(GTK_OPTION_MENU(lookup_widget(aw, "icmp_option_menu")), TRUE, ruleset.icmp_reject_code);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lookup_widget(aw, "tcp_rst_check_button")), ruleset.use_tcp_rst);
+}
+
+void advancedwin_apply() {
+ GtkWidget *w, *aw;
+ GtkOptionMenu *om;
+
+ if (ignore_apply)
+ return;
+
+ aw = get_window();
+ om = GTK_OPTION_MENU(lookup_widget(aw, "icmp_option_menu"));
+
+ w = GTK_WIDGET(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(gtk_option_menu_get_menu(om))),
+ gtk_option_menu_get_history(om)));
+ ruleset.icmp_reject_code = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(w), "icmp_value"));
+
+ ruleset.use_tcp_rst = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(aw, "tcp_rst_check_button")));
+
+ ruleset.modified = TRUE;
+ ruleset_update_ui();
+}