G_MODULE_EXPORT void gw_addvocabularywindow_definitions_paste_done_cb (GtkTextBuffer *buffer, GtkClipboard *clipboard, gpointer data ) { GwAddVocabularyWindow *window; GwAddVocabularyWindowPrivate *priv; GtkTextIter start, end; gchar *text; window = GW_ADDVOCABULARYWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_ADDVOCABULARYWINDOW)); g_return_if_fail (window != NULL); priv = window->priv; gtk_text_buffer_get_start_iter (buffer, &start); gtk_text_buffer_get_end_iter (buffer, &end); text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); g_strdelimit (text, "\n", ' '); g_strstrip (text); gtk_text_buffer_set_text (buffer, text, -1); priv->pasted = TRUE; g_free (text); }
G_MODULE_EXPORT void gw_addvocabularywindow_add_cb (GtkWidget *widget, gpointer data) { GwAddVocabularyWindow *window; GwAddVocabularyWindowPrivate *priv; GwAddVocabularyWindowClass *klass; GtkListStore *wordstore; const gchar *kanji, *furigana, *definitions; window = GW_ADDVOCABULARYWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_ADDVOCABULARYWINDOW)); g_return_if_fail (window != NULL); priv = window->priv; klass = GW_ADDVOCABULARYWINDOW_CLASS (G_OBJECT_GET_CLASS (window)); kanji = gw_addvocabularywindow_get_kanji (window); furigana = gw_addvocabularywindow_get_furigana (window); definitions = gw_addvocabularywindow_get_definitions (window); wordstore = gw_addvocabularywindow_get_wordstore (window); priv->wordstore = GW_VOCABULARYWORDSTORE (wordstore); gw_vocabularywordstore_load (priv->wordstore, NULL); gw_vocabularywordstore_new_word (priv->wordstore, &(priv->iter), NULL, kanji, furigana, definitions); if (klass->last_selected_list_name != NULL) g_free (klass->last_selected_list_name); klass->last_selected_list_name = g_strdup (gw_addvocabularywindow_get_list (window)); priv->valid = TRUE; g_signal_emit (G_OBJECT (window), klass->signalid[GW_ADDVOCABULARYWINDOW_CLASS_SIGNALID_WORD_ADDED], 0); gtk_widget_destroy (GTK_WIDGET (window)); }
G_MODULE_EXPORT void gw_addvocabularywindow_cancel_cb (GtkWidget *widget, gpointer data) { GwAddVocabularyWindow *window; window = GW_ADDVOCABULARYWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_ADDVOCABULARYWINDOW)); g_return_if_fail (window != NULL); gtk_widget_destroy (GTK_WIDGET (window)); }
G_MODULE_EXPORT void gw_addvocabularywindow_definitions_event_after_cb (GtkWidget *widget, GdkEvent *event, gpointer data) { GwAddVocabularyWindow *window; GwAddVocabularyWindowPrivate *priv; GtkTextIter start, end; GtkTextBuffer *buffer; gboolean valid; gboolean activate; window = GW_ADDVOCABULARYWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_ADDVOCABULARYWINDOW)); g_return_if_fail (window != NULL); priv = window->priv; if (priv->pasted == TRUE) { priv->pasted = FALSE; return; } buffer = gtk_text_view_get_buffer (priv->definitions_textview); gtk_text_buffer_get_start_iter (buffer, &start); gtk_text_buffer_get_end_iter (buffer, &end); if (priv->definitions_text != NULL) g_free (priv->definitions_text); priv->definitions_text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); activate = (strchr (priv->definitions_text, '\n') != NULL); g_strstrip (priv->definitions_text); gchar *source_ptr, *target_ptr; source_ptr = target_ptr = priv->definitions_text; while (*target_ptr != '\0') { if (*target_ptr == '\n') target_ptr++; else if (source_ptr == target_ptr) { source_ptr = ++target_ptr; } else { *(source_ptr++) = *(target_ptr++); } } *source_ptr = '\0'; valid = gw_addvocabularywindow_validate (window); if (activate) { G_GNUC_EXTENSION g_signal_handlers_block_by_func (widget, gw_addvocabularywindow_definitions_event_after_cb, data); gtk_text_buffer_set_text (buffer, priv->definitions_text, -1); G_GNUC_EXTENSION g_signal_handlers_unblock_by_func (widget, gw_addvocabularywindow_definitions_event_after_cb, data); if (valid) { gtk_button_clicked (priv->add_button); } } }
G_MODULE_EXPORT void gw_addvocabularywindow_furigana_changed_cb (GtkWidget *widget, gpointer data) { GwAddVocabularyWindow *window; GwAddVocabularyWindowPrivate *priv; window = GW_ADDVOCABULARYWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_ADDVOCABULARYWINDOW)); g_return_if_fail (window != NULL); priv = window->priv; if (priv->furigana_text != NULL) g_free (priv->furigana_text); priv->furigana_text = g_strdup (gtk_entry_get_text (priv->furigana_entry)); g_strstrip (priv->furigana_text); gw_addvocabularywindow_validate (window); }
static void gw_addvocabularywindow_finalize (GObject *object) { GwAddVocabularyWindow *window; GwAddVocabularyWindowPrivate *priv; window = GW_ADDVOCABULARYWINDOW (object); priv = window->priv; if (priv->kanji_text != NULL) g_free (priv->kanji_text); if (priv->furigana_text != NULL) g_free (priv->furigana_text); if (priv->definitions_text != NULL) g_free (priv->definitions_text); if (priv->list_text != NULL) g_free (priv->list_text); G_OBJECT_CLASS (gw_addvocabularywindow_parent_class)->finalize (object); }
//! //! @brief Sets up the variables in main-interface.c and main-callbacks.c for use //! GtkWindow* gw_addvocabularywindow_new (GtkApplication *application) { g_assert (application != NULL); //Declarations GwAddVocabularyWindow *window; //Initializations window = GW_ADDVOCABULARYWINDOW (g_object_new (GW_TYPE_ADDVOCABULARYWINDOW, "type", GTK_WINDOW_TOPLEVEL, "application", GW_APPLICATION (application), "ui-xml", "addvocabularywindow.ui", NULL)); return GTK_WINDOW (window); }
G_MODULE_EXPORT void gw_addvocabularywindow_list_changed_cb (GtkWidget *widget, gpointer data) { GwAddVocabularyWindow *window; GwAddVocabularyWindowPrivate *priv; GtkEntry *entry; window = GW_ADDVOCABULARYWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_ADDVOCABULARYWINDOW)); g_return_if_fail (window != NULL); priv = window->priv; entry = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->vocabulary_list_combobox))); if (priv->list_text != NULL) g_free (priv->list_text); priv->list_text = g_strdup (gtk_entry_get_text (entry)); g_strstrip (priv->list_text); gw_addvocabularywindow_validate (window); }
static void gw_addvocabularywindow_constructed (GObject *object) { //Declarations GwAddVocabularyWindow *window; GwAddVocabularyWindowPrivate *priv; //Chain the parent class { G_OBJECT_CLASS (gw_addvocabularywindow_parent_class)->constructed (object); } //Initializations window = GW_ADDVOCABULARYWINDOW (object); priv = window->priv; //Set up the gtkbuilder links priv->kanji_entry = GTK_ENTRY (gw_window_get_object (GW_WINDOW (window), "kanji_entry")); priv->furigana_entry = GTK_ENTRY (gw_window_get_object (GW_WINDOW (window), "furigana_entry")); priv->definitions_textview = GTK_TEXT_VIEW (gw_window_get_object (GW_WINDOW (window), "definitions_textview")); priv->cancel_button = GTK_BUTTON (gw_window_get_object (GW_WINDOW (window), "cancel_button")); priv->add_button = GTK_BUTTON (gw_window_get_object (GW_WINDOW (window), "add_button")); priv->vocabulary_list_combobox = GTK_COMBO_BOX (gw_window_get_object (GW_WINDOW (window), "vocabulary_list_combobox")); //Set up the gtk window gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_default_size (GTK_WINDOW (window), 500, 250); gtk_window_set_icon_name (GTK_WINDOW (window), "gwaei"); gtk_window_set_title (GTK_WINDOW (window), gettext("Add Vocabulary Word...")); gtk_window_set_resizable (GTK_WINDOW (window), TRUE); gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE); gtk_window_set_skip_pager_hint (GTK_WINDOW (window), TRUE); gtk_window_set_destroy_with_parent (GTK_WINDOW (window), FALSE); gtk_window_set_modal (GTK_WINDOW (window), TRUE); gtk_window_set_default (GTK_WINDOW (window), GTK_WIDGET (priv->add_button)); gw_addvocabularywindow_init_accelerators (window); gw_addvocabularywindow_init_combobox (window); gw_window_unload_xml (GW_WINDOW (window)); }