static GSList * make_triple (const PrintHF *hf) { GSList *l = NULL; GO_SLIST_PREPEND (l, hf->left_format ? hf->left_format : NULL); GO_SLIST_PREPEND (l, hf->middle_format ? hf->middle_format : NULL); GO_SLIST_PREPEND (l, hf->right_format ? hf->right_format : NULL); return l; }
static void cb_list_names (G_GNUC_UNUSED gpointer key, gpointer value, gpointer user_data) { GSList **pres = user_data; GO_SLIST_PREPEND (*pres, value); }
/** * stf_parse_options_add_line_terminator: * * This will add to the line terminators, in both the Fixed width and CSV delimited importers * this indicates the end of a row. * **/ void stf_parse_options_add_line_terminator (StfParseOptions_t *parseoptions, char const *terminator) { g_return_if_fail (parseoptions != NULL); g_return_if_fail (terminator != NULL && *terminator != 0); GO_SLIST_PREPEND (parseoptions->terminator, g_strdup (terminator)); compile_terminators (parseoptions); }
/* * This can get out of hand, we should limit the number of stored * formats. */ static void save_formats (void) { int base = hf_formats_base_num; GList *l; GSList *left = NULL; GSList *middle = NULL; GSList *right = NULL; int start; start = g_list_length (hf_formats) - MAX_SAVED_CUSTOM_HF_FORMATS; if (start > base) base = start; for (l = hf_formats; l; l = l->next) { PrintHF *hf = l->data; if (base-- > 0) continue; GO_SLIST_PREPEND (left, g_strdup(hf->left_format)); GO_SLIST_PREPEND (middle, g_strdup(hf->middle_format)); GO_SLIST_PREPEND (right, g_strdup(hf->right_format)); } GO_SLIST_REVERSE(left); gnm_conf_set_printsetup_hf_left (left); g_slist_free_full (left, g_free); GO_SLIST_REVERSE(middle); gnm_conf_set_printsetup_hf_middle (middle); g_slist_free_full (middle, g_free); GO_SLIST_REVERSE(right); gnm_conf_set_printsetup_hf_right (right); g_slist_free_full (right, g_free); }
static void cb_pm_button_directory_add_clicked (PluginManagerGUI *pm_gui) { GtkFileChooser *fsel; fsel = GTK_FILE_CHOOSER (g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, "title", _("Select Directory"), /* We need to force local-only as plugins won't work over the network. */ "local-only", TRUE, NULL)); gtk_dialog_add_buttons (GTK_DIALOG (fsel), _("Cancel"), GTK_RESPONSE_CANCEL, _("Add"), GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (fsel), GTK_RESPONSE_OK); if (go_gtk_file_sel_dialog (pm_gui->parent_window, GTK_WIDGET (fsel))) { char *path = gtk_file_chooser_get_filename (fsel); if (!g_file_test (path, G_FILE_TEST_IS_DIR)) { char *dir_name = g_path_get_dirname (path); g_free (path); path = dir_name; } if (g_slist_find_custom (gnm_conf_get_plugins_extra_dirs (), path, go_str_compare) == NULL) { GSList *extra_dirs = go_string_slist_copy (gnm_conf_get_plugins_extra_dirs ()); GO_SLIST_PREPEND (extra_dirs, path); gnm_conf_set_plugins_extra_dirs (extra_dirs); g_slist_free_full (extra_dirs, g_free); pm_gui_load_directory_page (pm_gui); cb_pm_button_rescan_directories_clicked (pm_gui); } else g_free (path); } gtk_widget_destroy (GTK_WIDGET (fsel)); }
static void go_plugin_service_file_opener_read_xml (GOPluginService *service, xmlNode *tree, GOErrorInfo **ret_error) { int priority; gboolean has_probe; gboolean encoding_dependent; xmlNode *information_node; gchar *description; GO_INIT_RET_ERROR_INFO (ret_error); if (go_xml_node_get_int (tree, "priority", &priority)) priority = CLAMP (priority, 0, 100); else priority = 50; if (!go_xml_node_get_bool (tree, "probe", &has_probe)) has_probe = TRUE; if (!go_xml_node_get_bool (tree, "encoding_dependent", &encoding_dependent)) encoding_dependent = FALSE; information_node = go_xml_get_child_by_name (tree, "information"); if (information_node != NULL) { xmlNode *node = go_xml_get_child_by_name_by_lang (information_node, "description"); description = node ? xml2c (xmlNodeGetContent (node)) : NULL; } else { description = NULL; } if (description != NULL) { GSList *suffixes = NULL, *mimes = NULL; xmlNode *list, *node; GOPluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (service); list = go_xml_get_child_by_name (tree, "suffixes"); if (list != NULL) { for (node = list->xmlChildrenNode; node != NULL; node = node->next) { char *tmp; if (strcmp (node->name, "suffix")) continue; tmp = xml2c (xmlNodeGetContent (node)); if (!tmp) continue; GO_SLIST_PREPEND (suffixes, tmp); } } GO_SLIST_REVERSE (suffixes); list = go_xml_get_child_by_name (tree, "mime-types"); if (list != NULL) { for (node = list->xmlChildrenNode; node != NULL; node = node->next) { char *tmp; if (strcmp (node->name, "mime-type")) continue; tmp = xml2c (xmlNodeGetContent (node)); if (!tmp) continue; GO_SLIST_PREPEND (mimes, tmp); } } GO_SLIST_REVERSE (mimes); service_file_opener->priority = priority; service_file_opener->has_probe = has_probe; service_file_opener->encoding_dependent = encoding_dependent; service_file_opener->description = description; service_file_opener->suffixes = suffixes; service_file_opener->mimes = mimes; } else { *ret_error = go_error_info_new_str (_("File opener has no description")); } }