static GdictContext * get_context_from_loader (GdictApplet *applet) { GdictAppletPrivate *priv = applet->priv; GdictSource *source; GdictContext *retval; if (!priv->source_name) priv->source_name = g_strdup (GDICT_DEFAULT_SOURCE_NAME); source = gdict_source_loader_get_source (priv->loader, priv->source_name); if (!source) { gchar *detail; detail = g_strdup_printf (_("No dictionary source available with name '%s'"), priv->source_name); gdict_show_error_dialog (NULL, _("Unable to find dictionary source"), NULL); g_free (detail); return NULL; } gdict_applet_set_database (applet, gdict_source_get_database (source)); gdict_applet_set_strategy (applet, gdict_source_get_strategy (source)); retval = gdict_source_get_context (source); if (!retval) { gchar *detail; detail = g_strdup_printf (_("No context available for source '%s'"), gdict_source_get_description (source)); gdict_show_error_dialog (NULL, _("Unable to create a context"), detail); g_free (detail); g_object_unref (source); return NULL; } g_object_unref (source); return retval; }
static GdictContext * get_context_from_loader (GtrDictPanel * panel) { GtrDictPanelPrivate *priv = panel->priv; GdictSource *source; GdictContext *retval; if (!priv->source_name) priv->source_name = g_strdup (DICTIONARY_DEFAULT_SOURCE_NAME); source = gdict_source_loader_get_source (priv->loader, priv->source_name); if (!source) { gchar *detail; detail = g_strdup_printf (_("No dictionary source available with name '%s'"), priv->source_name); gtr_dict_panel_create_warning_dialog (_ ("Unable to find dictionary source"), detail); g_free (detail); return NULL; } gtr_dict_panel_set_database (panel, gdict_source_get_database (source)); gtr_dict_panel_set_strategy (panel, gdict_source_get_strategy (source)); retval = gdict_source_get_context (source); if (!retval) { gchar *detail; detail = g_strdup_printf (_("No context available for source '%s'"), gdict_source_get_description (source)); gtr_dict_panel_create_warning_dialog (_ ("Unable to create a context"), detail); g_free (detail); g_object_unref (source); return NULL; } g_object_unref (source); return retval; }
static void row_activated_cb (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer data) { GdictSourceChooser *chooser = GDICT_SOURCE_CHOOSER (data); GdictSourceChooserPrivate *priv = chooser->priv; GtkTreeIter iter; gchar *name; GdictSource *source; if (!priv->loader) return; if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->store), &iter, path)) return; gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter, SOURCE_NAME, &name, -1); if (!name) return; source = gdict_source_loader_get_source (priv->loader, name); if (!source) { g_free (name); return; } g_signal_emit (chooser, source_chooser_signals[SOURCE_ACTIVATED], 0, name, source); g_free (name); g_object_unref (source); }
static void save_source (GdictSourceDialog *dialog) { GdictSource *source; GdictDatabaseChooser *db_chooser; GdictStrategyChooser *strat_chooser; gchar *name, *text; GdictSourceTransport transport; gchar *host, *port; gchar *data; gsize length; GError *error; gchar *filename; source = gdict_source_loader_get_source (dialog->loader, dialog->source_name); if (!source) { g_warning ("Attempting to save source `%s', but no " "source for that name was found.", dialog->source_name); return; } text = get_text_from_entry (dialog, "description_entry"); gdict_source_set_description (source, text); g_free (text); db_chooser = GDICT_DATABASE_CHOOSER (dialog->db_chooser); text = gdict_database_chooser_get_current_database (db_chooser); gdict_source_set_database (source, text); g_free (text); strat_chooser = GDICT_STRATEGY_CHOOSER (dialog->strat_chooser); text = gdict_strategy_chooser_get_current_strategy (strat_chooser); gdict_source_set_strategy (source, text); g_free (text); /* get the selected transport id */ transport = dialog->transport; switch (transport) { case GDICT_SOURCE_TRANSPORT_DICTD: host = get_text_from_entry (dialog, "hostname_entry"); port = get_text_from_entry (dialog, "port_entry"); gdict_source_set_transport (source, GDICT_SOURCE_TRANSPORT_DICTD, "hostname", host, "port", atoi (port), NULL); g_free (host); g_free (port); break; case GDICT_SOURCE_TRANSPORT_INVALID: default: g_warning ("Invalid transport"); return; } error = NULL; data = gdict_source_to_data (source, &length, &error); if (error) { gdict_show_gerror_dialog (GTK_WINDOW (dialog), _("Unable to create a source file"), error); g_object_unref (source); return; } name = g_strdup_printf ("%s.desktop", gdict_source_get_name (source)); filename = g_build_filename (g_get_home_dir (), ".gnome2", "gnome-dictionary", name, NULL); g_free (name); g_file_set_contents (filename, data, length, &error); if (error) gdict_show_gerror_dialog (GTK_WINDOW (dialog), _("Unable to save source file"), error); g_free (filename); g_free (data); g_object_unref (source); }
static void update_dialog_ui (GdictSourceDialog *dialog) { GdictSource *source; /* TODO - add code to update the contents of the dialog depending * on the action; if we are in _CREATE, no action is needed */ switch (dialog->action) { case GDICT_SOURCE_DIALOG_VIEW: case GDICT_SOURCE_DIALOG_EDIT: if (!dialog->source_name) { g_warning ("Attempting to retrieve source, but no " "source name has been defined. Aborting..."); return; } source = gdict_source_loader_get_source (dialog->loader, dialog->source_name); if (!source) { g_warning ("Attempting to retrieve source, but no " "source named `%s' was found. Aborting...", dialog->source_name); return; } g_object_ref (source); dialog->source = source; set_text_to_entry (dialog, "description_entry", gdict_source_get_description (source)); dialog->transport = gdict_source_get_transport (source); gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->transport_combo), (gint) dialog->transport); /* set the context for the database and strategy choosers */ dialog->context = gdict_source_get_context (source); if (!dialog->context) { g_warning ("Attempting to retrieve the context, but " "none was found for source `%s'.", dialog->source_name); return; } set_transport_settings (dialog); gdict_database_chooser_set_context (GDICT_DATABASE_CHOOSER (dialog->db_chooser), dialog->context); gdict_database_chooser_refresh (GDICT_DATABASE_CHOOSER (dialog->db_chooser)); gdict_strategy_chooser_set_context (GDICT_STRATEGY_CHOOSER (dialog->strat_chooser), dialog->context); gdict_strategy_chooser_refresh (GDICT_STRATEGY_CHOOSER (dialog->strat_chooser)); break; case GDICT_SOURCE_DIALOG_CREATE: /* DICTD transport is default */ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->transport_combo), 0); g_signal_emit_by_name (dialog->transport_combo, "changed"); break; default: g_assert_not_reached (); break; } }
static void gdict_look_up_word_and_quit (GdictApp *app) { GdictSource *source; GdictContext *context; GSList *l; if ((!app->lookup_words) || (!app->match_words)) { g_print (_("See mate-dictionary --help for usage\n")); gdict_cleanup (); exit (1); } if (app->source_name) source = gdict_source_loader_get_source (app->loader, app->source_name); else source = gdict_source_loader_get_source (app->loader, GDICT_DEFAULT_SOURCE_NAME); if (!source) { g_warning (_("Unable to find a suitable dictionary source")); gdict_cleanup (); exit (1); } /* we'll just use this one context, so we can destroy it along with * the source that contains it */ context = gdict_source_peek_context (source); g_assert (GDICT_IS_CONTEXT (context)); g_signal_connect (context, "definition-found", G_CALLBACK (definition_found_cb), app); g_signal_connect (context, "error", G_CALLBACK (error_cb), app); g_signal_connect (context, "lookup-end", G_CALLBACK (lookup_end_cb), app); app->remaining_words = 0; for (l = app->lookup_words; l != NULL; l = l->next) { gchar *word = l->data; GError *err = NULL; app->remaining_words += 1; gdict_context_define_word (context, app->database, word, &err); if (err) { g_warning (_("Error while looking up the definition of \"%s\":\n%s"), word, err->message); g_error_free (err); } } gtk_main (); g_object_unref (source); gdict_cleanup (); exit (0); }