//! //! @brief Searches for the word in a webbrower in an external dictionary //! @param widget Unused GtkWidget pointer //! @param data Unused gpointer //! static void _resultpopup_search_online_cb (GtkMenuItem *widget, gpointer data) { //Sanity check g_assert (data != NULL); //Declarations GwApplication *application; LwSearchItem *item; GError *error; GwSearchWindow *window; GtkTextView *view; GwSearchData *sdata; //Initializations item = LW_SEARCHITEM (data); if (item != NULL) { sdata = GW_SEARCHDATA (lw_searchitem_get_data (item)); window = GW_SEARCHWINDOW (sdata->window); application = GW_APPLICATION (gw_window_get_application (GW_WINDOW (window))); view = gw_searchwindow_get_current_textview (window); sdata = gw_searchdata_new (view, window); lw_searchitem_set_data (item, sdata, LW_SEARCHITEM_DATA_FREE_FUNC (gw_searchdata_free)); error = NULL; printf("%s\n", item->queryline->string); gtk_show_uri (NULL, item->queryline->string, gtk_get_current_event_time (), &error); gw_application_handle_error (application, GTK_WINDOW (window), TRUE, &error); } }
//! //! @brief Opens the dictionary folder using the user's default file browser //! @param widget Unused GtkWidget pointer //! @param data Unused gpointer //! G_MODULE_EXPORT void gw_settingswindow_open_dictionary_folder_cb (GtkWidget *widget, gpointer data) { //Declarations GwSettingsWindow *window; GwApplication *application; char *directory; char *uri; GError *error; //Initializations window = GW_SETTINGSWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_SETTINGSWINDOW)); g_return_if_fail (window != NULL); application = gw_window_get_application (GW_WINDOW (window)); directory = lw_util_build_filename (LW_PATH_DICTIONARY, NULL); uri = g_build_filename ("file://", directory, NULL); error = NULL; gtk_show_uri (NULL, uri, gtk_get_current_event_time (), &error); gw_application_handle_error (application, GTK_WINDOW (window), TRUE, &error); g_free (uri); g_free (directory); }
void gw_settingswindow_remove_dictionary_cb (GSimpleAction *action, GVariant *parameter, gpointer data) { //Declarations GwSettingsWindow *window; GwSettingsWindowPrivate *priv; GwApplication *application; GwDictionaryList *dictionarylist; GtkTreePath *path; GtkTreeIter iter; LwDictionary *dictionary; GError *error; GtkTreeSelection *selection; GtkTreeModel *model; gboolean has_selection; gint* indices; GtkTreeView *view; //Initializations window = GW_SETTINGSWINDOW (data); priv = window->priv; application = gw_window_get_application (GW_WINDOW (window)); dictionarylist = gw_application_get_installed_dictionarylist (application); view = priv->manage_dictionaries_treeview; selection = gtk_tree_view_get_selection (view); model = GTK_TREE_MODEL (gw_dictionarylist_get_liststore (dictionarylist)); has_selection = gtk_tree_selection_get_selected (selection, &model, &iter); error = NULL; //Sanity check if (!has_selection) return; path = gtk_tree_model_get_path (model, &iter); indices = gtk_tree_path_get_indices (path); dictionary = lw_dictionarylist_remove_by_position (LW_DICTIONARYLIST (dictionarylist), *indices); if (dictionary != NULL) { lw_dictionary_uninstall (dictionary, NULL, &error); } //Cleanup gtk_tree_path_free (path); path = NULL; if (error != NULL) { gw_application_handle_error (application, GTK_WINDOW (window), TRUE, &error); exit(EXIT_SUCCESS); } gw_settingswindow_check_for_dictionaries (window); }
//! //! @brief Open the connection to the engine //! static void _kanjipadwindow_initialize_engine (GwKanjipadWindow *window) { //Declarations GwApplication *application; GwKanjipadWindowPrivate *priv; char *dir; char *path; char *argv[2]; GError *error; int stdin_fd; int stdout_fd; //Initializations application = gw_window_get_application (GW_WINDOW (window)); priv = window->priv; error = NULL; dir = g_get_current_dir (); #ifdef G_OS_WIN32 path = g_build_filename (dir, "..", "lib", PACKAGE, "kpengine.exe", NULL); #else path = g_build_filename (LIBDIR, PACKAGE, "kpengine", NULL); #endif argv[0] = path; argv[1] = NULL; if (!g_file_test(argv[0], G_FILE_TEST_EXISTS)) { fprintf(stderr, "Error: Can't find kpengine at %s\n", argv[0]); exit (EXIT_FAILURE); } if (!g_spawn_async_with_pipes (NULL, /* working directory */ argv, NULL, /* argv, envp */ 0, NULL, NULL, /* child_setup */ (gpointer)&priv->engine_pid, /* child pid */ &stdin_fd, &stdout_fd, NULL, &error)) { gw_application_handle_error (application, NULL, FALSE, &error); exit (EXIT_FAILURE); } if (!(priv->to_engine = g_io_channel_unix_new (stdin_fd))) g_error ("Couldn't create pipe to child process: %s", g_strerror(errno)); if (!(priv->from_engine = g_io_channel_unix_new (stdout_fd))) g_error ("Couldn't create pipe from child process: %s", g_strerror(errno)); priv->iowatchid = g_io_add_watch (priv->from_engine, G_IO_IN, _kanjipadwindow_engine_input_handler, window); //Cleanup g_free(path); g_free(dir); }
void gw_application_parse_args (GwApplication *application, int *argc, char** argv[]) { GwApplicationPrivate *priv; priv = application->priv; //Reset the switches to their default state if (priv->arg_dictionary != NULL) g_free (priv->arg_dictionary); priv->arg_dictionary = NULL; if (priv->arg_query != NULL) g_free (priv->arg_query); priv->arg_query = NULL; priv->arg_version_switch = FALSE; priv->arg_new_vocabulary_window_switch = FALSE; GOptionEntry entries[] = { { "dictionary", 'd', 0, G_OPTION_ARG_STRING, &(priv->arg_dictionary), gettext("Choose the dictionary to use"), "English" }, { "word", 'o', 0, G_OPTION_ARG_NONE, &(priv->arg_new_vocabulary_window_switch), gettext("Open the vocabulary manager window"), NULL }, { "version", 'v', 0, G_OPTION_ARG_NONE, &(priv->arg_version_switch), gettext("Check the gWaei version information"), NULL }, { NULL } }; //Program flags setup GError *error = NULL; if (priv->context != NULL) g_option_context_free (priv->context); priv->context = g_option_context_new (gettext("- A dictionary program for Japanese-English translation.")); g_option_context_add_main_entries (priv->context, entries, PACKAGE); g_option_context_set_ignore_unknown_options (priv->context, TRUE); g_option_context_parse (priv->context, argc, argv, &error); //g_log_set_always_fatal (G_LOG_LEVEL_WARNING); if (error != NULL) { gw_application_handle_error (application, NULL, FALSE, &error); exit(EXIT_SUCCESS); } //Get the query after the flags have been parsed out priv->arg_query = lw_util_get_query_from_args (*argc, *argv); }
//! //! @brief Sends the user to the gWaei homepage for whatever they need //! @param widget Unused GtkWidget pointer //! @param data Unused gpointer //! G_MODULE_EXPORT void gw_application_open_homepage_cb (GSimpleAction *action, GVariant *parameter, gpointer data) { //Declarations GError *error; GwSearchWindow *window; GwApplication *application; //Initializations error = NULL; window = GW_SEARCHWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_SEARCHWINDOW)); g_return_if_fail (window != NULL); application = gw_window_get_application (GW_WINDOW (window)); gtk_show_uri (NULL, "http://gwaei.sourceforge.net/", gtk_get_current_event_time (), &error); //Cleanup gw_application_handle_error (application, GTK_WINDOW (window), TRUE, &error); }
//! //! @brief Opens the gWaei dictionary glossary help documentation //! @param widget Unused GtkWidget pointer //! @param data Unused gpointer //! G_MODULE_EXPORT void gw_application_open_glossary_cb (GSimpleAction *action, GVariant *parameter, gpointer data) { //Declarations gchar *uri; GError *error; GwApplication *application; //Initializations application = GW_APPLICATION (data); uri = g_build_filename ("ghelp://", DATADIR2, "gnome", "help", "gwaei", "C", "glossary.xml", NULL); error = NULL; if (uri != NULL) { gtk_show_uri (NULL, uri, gtk_get_current_event_time (), &error); g_free (uri); uri = NULL; } gw_application_handle_error (application, NULL, FALSE, &error); }
//! //! @brief Starts the install when the add button on the dictionary chooser is selected //! void gw_installprogresswindow_start (GwInstallProgressWindow *window) { //Sanity check g_assert (window != NULL); //Declarations GwApplication *application; GError *error; //Initializations application = gw_window_get_application (GW_WINDOW (window)); error = NULL; //Set the new window g_thread_try_new ( "gwaei-install-thread", gw_installprogresswindow_install_thread, window, &error ); gw_application_handle_error (application, gtk_window_get_transient_for (GTK_WINDOW (window)), TRUE, &error); }
//! //! @brief Callback to update the install dialog progress. The data passed to it should be //! in the form of a LwDictInst. If it is NULL, the progress window will be closed. //! G_MODULE_EXPORT gboolean gw_installprogresswindow_update_ui_timeout (gpointer data) { //Sanity check g_assert (data != NULL); //Declarations GwInstallProgressWindow *window; GwInstallProgressWindowPrivate *priv; GtkWindow *settingswindow; GwApplication *application; LwDictInstList *dictinstlist; GwDictInfoList *dictinfolist; LwDictInst *di; GList *iter; int current_to_install; int total_to_install; char *text_installing; char *text_installing_markup; char *text_left; char *text_left_markup; char *text_progressbar; //Initializations window = GW_INSTALLPROGRESSWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_INSTALLPROGRESSWINDOW)); if (window == NULL) return FALSE; application = gw_window_get_application (GW_WINDOW (window)); dictinstlist = gw_application_get_dictinstlist (application); priv = window->priv; current_to_install = 0; total_to_install = 0; //The install is complete close the window if (priv->di == NULL) { settingswindow = gtk_window_get_transient_for (GTK_WINDOW (window)); dictinfolist = gw_application_get_dictinfolist (application); gw_dictinfolist_reload (dictinfolist); gtk_widget_destroy (GTK_WIDGET (window)); gw_application_handle_error (application, GTK_WINDOW (settingswindow), TRUE, NULL); lw_dictinstlist_set_cancel_operations (dictinstlist, FALSE); gw_settingswindow_check_for_dictionaries (GW_SETTINGSWINDOW (settingswindow)); return FALSE; } g_mutex_lock (priv->mutex); //Calculate the number of dictionaries left to install for (iter = dictinstlist->list; iter != NULL; iter = iter->next) { di = LW_DICTINST (iter->data); if (di != NULL && di->selected) { current_to_install++; } if (iter->data == priv->di) break; } //Calculate the number of dictionaries left to install for (iter = dictinstlist->list; iter != NULL; iter = iter->next) { di = LW_DICTINST (iter->data); if (di->selected) { total_to_install++; } } di = priv->di; text_progressbar = g_markup_printf_escaped (gettext("Installing %s..."), di->filename); text_left = g_strdup_printf (gettext("Installing dictionary %d of %d..."), current_to_install, total_to_install); text_left_markup = g_markup_printf_escaped ("<big><b>%s</b></big>", text_left); text_installing = lw_dictinst_get_status_string (di, TRUE); text_installing_markup = g_markup_printf_escaped ("<small>%s</small>", text_installing); gtk_label_set_markup (priv->label, text_left_markup); gtk_label_set_markup (priv->sublabel, text_installing_markup); gtk_progress_bar_set_fraction (priv->progressbar, priv->install_fraction); gtk_progress_bar_set_text (priv->progressbar, text_progressbar); g_mutex_unlock (priv->mutex); //Cleanup g_free (text_progressbar); g_free (text_left); g_free (text_left_markup); g_free (text_installing); g_free (text_installing_markup); return TRUE; }