📄 preferences.c
字号:
static voidfilter_host_view_reload (GtkListStore *store){ GIOChannel* in; GError *error = NULL; gchar *line; in = g_io_channel_new_file (FIRESTARTER_FILTER_HOSTS_SCRIPT, "r", &error); if (in == NULL) { g_printerr ("Error reading file %s: %s\n", FIRESTARTER_FILTER_HOSTS_SCRIPT, error->message); g_error_free (error); return; } while (g_io_channel_read_line (in, &line, NULL, NULL, &error) == G_IO_STATUS_NORMAL) { filter_host_view_append (store, g_strstrip (line)); g_free (line); } if (error != NULL) g_error_free (error);}static voidfilter_port_view_reload (GtkListStore *store){ GIOChannel* in; GError *error = NULL; gchar *line; in = g_io_channel_new_file (FIRESTARTER_FILTER_PORTS_SCRIPT, "r", &error); if (in == NULL) { g_printerr ("Error reading file %s: %s\n", FIRESTARTER_FILTER_PORTS_SCRIPT, error->message); g_error_free (error); return; } while (g_io_channel_read_line (in, &line, NULL, NULL, &error) == G_IO_STATUS_NORMAL) { filter_port_view_append (store, line); g_free (line); } if (error != NULL) g_error_free (error);}static voidfilter_host_dialog_cb (GtkDialog *host_dialog, gint response, PreferencesDialog *dialog){ if (response == GTK_RESPONSE_OK) { gchar *host; GtkListStore *store; host = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->entry_host))); printf ("read host: %s\n", host); store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->view_host_filter))); filter_host_view_append (store, host); append_to_file (FIRESTARTER_FILTER_HOSTS_SCRIPT, host, TRUE); g_free (host); } /* Reset dialog */ gtk_entry_set_text (GTK_ENTRY (dialog->entry_host), ""); gtk_widget_grab_focus (dialog->entry_host); gtk_widget_hide (GTK_WIDGET (host_dialog));}static voidfilter_port_dialog_cb (GtkDialog *port_dialog, gint response, PreferencesDialog *dialog){ if (response == GTK_RESPONSE_OK) { gchar *port; GtkListStore *store; port = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->entry_port))); store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->view_port_filter))); filter_port_view_append (store, port); append_to_file (FIRESTARTER_FILTER_PORTS_SCRIPT, port, TRUE); g_free (port); } /* Reset dialog */ gtk_entry_set_text (GTK_ENTRY (dialog->entry_port), ""); gtk_widget_grab_focus (dialog->entry_port); gtk_widget_hide (GTK_WIDGET (port_dialog));}static voidfilter_host_remove (GtkTreeView *view){ GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); if (gtk_tree_selection_get_selected (selection, NULL, &iter)) { GtkTreePath* path; gint pos; path = gtk_tree_model_get_path (model, &iter); pos = gtk_tree_path_get_indices(path)[0]; gtk_list_store_remove (GTK_LIST_STORE (model), &iter); remove_line_from_file (FIRESTARTER_FILTER_HOSTS_SCRIPT, pos); gtk_tree_path_free (path); }}static voidfilter_port_remove (GtkTreeView *view){ GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); if (gtk_tree_selection_get_selected (selection, NULL, &iter)) { GtkTreePath* path; gint pos; path = gtk_tree_model_get_path (model, &iter); pos = gtk_tree_path_get_indices(path)[0]; gtk_list_store_remove (GTK_LIST_STORE (model), &iter); remove_line_from_file (FIRESTARTER_FILTER_PORTS_SCRIPT, pos); gtk_tree_path_free (path); }}static voidactivate_dialog_cb (GtkWidget *dialog){ gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);}static voidsetup_interface_section (PreferencesDialog *dialog){ gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->check_enable_tray_icon), dialog->check_minimize_to_tray);}static voidsetup_events_section (PreferencesDialog *dialog){ GtkWidget *window; GtkWidget *view; GtkListStore *store; View_def host_filter_def = {1, { {_("Hosts"), G_TYPE_STRING, TRUE}, } }; View_def port_filter_def = {1, { {_("Ports"), G_TYPE_STRING, TRUE}, } }; /* Set up list of filtered hosts */ window = dialog->window_host_filter; view = gui_create_list_view (&host_filter_def, 120, 150); dialog->view_host_filter = view; gtk_container_add (GTK_CONTAINER (window), view); store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view))); filter_host_view_reload (store); gtk_widget_show_all (view); g_signal_connect_swapped (dialog->button_add_host, "clicked", G_CALLBACK (gtk_widget_show_all), dialog->dialog_host_filter); g_signal_connect_swapped (dialog->button_remove_host, "clicked", G_CALLBACK (filter_host_remove), dialog->view_host_filter); g_signal_connect (dialog->dialog_host_filter, "response", G_CALLBACK (filter_host_dialog_cb), dialog); g_signal_connect_swapped (dialog->entry_host, "activate", G_CALLBACK (activate_dialog_cb), dialog->dialog_host_filter); /* Set up list of filtered ports */ window = dialog->window_port_filter; view = gui_create_list_view (&port_filter_def, 120, 150); dialog->view_port_filter = view; gtk_container_add (GTK_CONTAINER (window), view); store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view))); filter_port_view_reload (store); gtk_widget_show_all (view); g_signal_connect_swapped (dialog->button_add_port, "clicked", G_CALLBACK (gtk_widget_show_all), dialog->dialog_port_filter); g_signal_connect_swapped (dialog->button_remove_port, "clicked", G_CALLBACK (filter_port_remove), dialog->view_port_filter); g_signal_connect (dialog->dialog_port_filter, "response", G_CALLBACK (filter_port_dialog_cb), dialog); g_signal_connect_swapped (dialog->entry_port, "activate", G_CALLBACK (activate_dialog_cb), dialog->dialog_port_filter);}static voidsetup_network_settings_section (PreferencesDialog *dialog){ GtkTreeModel *model; model = get_devices_model (); gtk_combo_box_set_model (GTK_COMBO_BOX (dialog->combo_ext_device), model); gtk_combo_box_set_model (GTK_COMBO_BOX (dialog->combo_int_device), model); gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->check_enable_dhcp), dialog->expander_dhcp); gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->radio_dhcp_create_conf), dialog->table_dhcp_settings); gtk_expander_set_expanded (GTK_EXPANDER (dialog->expander_dhcp), FALSE); gtk_widget_set_sensitive (dialog->box_local_network_settings, is_capable_of_nat ());}static voidsetup_icmp_section (PreferencesDialog *dialog){ gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->check_enable_icmp), dialog->frame_icmp_types);}static voidsetup_tos_section (PreferencesDialog *dialog){ gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->check_enable_tos), dialog->frame_tos_services); gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->check_enable_tos), dialog->frame_tos_maximize);}voidpreferences_update_widget_from_conf (GtkWidget *widget, const gchar *gconf_key){ if (GTK_IS_ENTRY (widget)) { gchar *data; data = preferences_get_string (gconf_key); gtk_entry_set_text (GTK_ENTRY (widget), data); g_free (data); } else if (GTK_IS_TOGGLE_BUTTON (widget)) { gboolean active; active = preferences_get_bool (gconf_key); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), active); } else { printf ("Failed to update widget from conf: %s\n", gconf_key); g_assert_not_reached (); }}voidpreferences_update_conf_from_widget (GtkWidget *widget, const gchar *gconf_key){ if (GTK_IS_ENTRY (widget)) { const gchar *data; data = gtk_entry_get_text (GTK_ENTRY (widget)); preferences_set_string (gconf_key, data); } else if (GTK_IS_TOGGLE_BUTTON (widget)) { gboolean active; active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); preferences_set_bool (gconf_key, active); } else { printf ("Failed to update conf from widget: %s\n", gconf_key); g_assert_not_reached (); }}static gbooleancombo_set_active_device (GtkComboBox *combo, gchar *new_if){ GtkTreeIter iter; GtkTreeModel *model; gchar *interface; model = gtk_combo_box_get_model (combo); gtk_tree_model_get_iter_first (model, &iter); do { gtk_tree_model_get (model, &iter, 1, &interface, -1); if (g_str_equal (interface, new_if)) { gtk_combo_box_set_active_iter (combo, &iter); return TRUE; } } while (gtk_tree_model_iter_next (model, &iter)); return FALSE;}static gchar *combo_get_active_device (GtkComboBox *combo){ GtkTreeIter iter; GtkTreeModel *model; gchar *interface; model = gtk_combo_box_get_model (combo); gtk_combo_box_get_active_iter (combo, &iter); gtk_tree_model_get (model, &iter, 1, &interface, -1); return interface;}static gbooleanvalidate_dhcp_settings (PreferencesDialog *dialog){ const gchar *name_server, *highest_ip, *lowest_ip; gboolean validates = TRUE; if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->check_enable_dhcp)) || !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->radio_dhcp_create_conf))) return TRUE; name_server = gtk_entry_get_text (GTK_ENTRY (dialog->entry_dhcp_name_server)); highest_ip = gtk_entry_get_text (GTK_ENTRY (dialog->entry_dhcp_highest_ip)); lowest_ip = gtk_entry_get_text (GTK_ENTRY (dialog->entry_dhcp_lowest_ip)); validates = (is_a_valid_host (highest_ip) && is_a_valid_host (lowest_ip) && (is_a_valid_host (name_server) || g_ascii_strcasecmp (name_server, "<dynamic>") == 0)); if (!validates) { error_dialog (_("Please review your choices"), _("Invalid DHCP configuration"), _("Please review your DHCP settings, the configuration\n" "you specified is not valid."), dialog->dialog_main); } return validates;}static voidload_preferences (PreferencesDialog *dialog){ /* Interface */ preferences_update_widget_from_conf (dialog->check_enable_tray_icon, PREFS_ENABLE_TRAY_ICON); preferences_update_widget_from_conf (dialog->check_minimize_to_tray, PREFS_MINIMIZE_TO_TRAY); gtk_widget_set_sensitive (dialog->check_minimize_to_tray, preferences_get_bool (PREFS_ENABLE_TRAY_ICON)); /* Events */ preferences_update_widget_from_conf (dialog->check_skip_redundant, PREFS_SKIP_REDUNDANT); preferences_update_widget_from_conf (dialog->check_skip_not_for_firewall, PREFS_SKIP_NOT_FOR_FIREWALL); /* Policy */ preferences_update_widget_from_conf (dialog->check_apply_policy_instantly, PREFS_APPLY_POLICY_INSTANTLY); /* Firewall */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -