void spell_language_changed_cb (GConfClient *client, guint id, GConfEntry *entry, gpointer user_data) { #ifdef HAVE_GTKSPELL Ebook *ebook; GConfValue *value; GtkSpell *spell; const gchar *gconf_lang; gchar *lang; GtkWidget * window, * G_GNUC_UNUSED spell_check; GtkTextView * text_view; gboolean spellcheck_wanted; g_return_if_fail (user_data); ebook = (Ebook *) user_data; value = gconf_entry_get_value (entry); gconf_lang = gconf_value_get_string (value); window = GTK_WIDGET(gtk_builder_get_object (ebook->builder, "gpdfwindow")); spell_check = GTK_WIDGET(gtk_builder_get_object (ebook->builder, "spellcheckmenuitem")); text_view = GTK_TEXT_VIEW(gtk_builder_get_object (ebook->builder, "textview")); if (*gconf_lang == '\0' || gconf_lang == NULL) lang = NULL; else lang = g_strdup (gconf_lang); if (window) { spellcheck_wanted = gconf_client_get_bool (ebook->client, ebook->spell_check.key, NULL); spell = gtkspell_get_from_text_view (text_view); if (spellcheck_wanted) { if (spell && lang) /* Only if we have both spell and lang non-null we can use _set_language() */ gtkspell_set_language (spell, lang, NULL); else { /* We need to create a new spell widget if we want to use lang == NULL (use default lang) * or if the spell isn't initialized */ if (spell) gtkspell_detach (spell); spell = gtkspell_new_attach (text_view, lang, NULL); } gtkspell_recheck_all (spell); } } spell_language_select_menuitem (ebook, lang); g_free (lang); #endif /* HAVE_GTKSPELL */ }
void jam_view_set_doc(JamView *view, JamDoc *doc) { view->doc = doc; undomgr_detach(view->undomgr, view->entry); if (view->account != jam_doc_get_account(doc)) jam_view_account_changed(view); g_signal_connect_swapped(G_OBJECT(doc), "notify::account", G_CALLBACK(jam_view_account_changed), view); g_signal_connect_swapped(G_OBJECT(doc), "update_doc", G_CALLBACK(jam_view_store_doc), view); g_signal_connect_swapped(G_OBJECT(doc), "entry_changed", G_CALLBACK(jam_view_load_doc), view); jam_view_load_conf(view); jam_view_load_doc(view); /* XXX: gtkspell gets confused if you detach its document, * so we detach the spell checker completely, then reattach * it at the end. */ #ifdef HAVE_GTKSPELL if (conf.options.usespellcheck && view->entry) { GtkSpell *spell; spell = gtkspell_get_from_text_view(GTK_TEXT_VIEW(view->entry)); if (spell) gtkspell_detach(spell); } #endif /* HAVE_GTKSPELL */ gtk_text_view_set_buffer(GTK_TEXT_VIEW(view->entry), jam_doc_get_text_buffer(doc)); #ifdef HAVE_GTKSPELL if (conf.options.usespellcheck) { GError *err = NULL; if (gtkspell_new_attach(GTK_TEXT_VIEW(view->entry), conf.spell_language, &err) == NULL) { GtkWindow *toplevel; toplevel = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(view))); jam_warning(toplevel, _("GtkSpell error: %s"), err->message); g_error_free(err); } } #endif /* HAVE_GTKSPELL */ undomgr_attach(view->undomgr, view->entry); }
void spellcheck_changed_cb (GConfClient *client, guint id, GConfEntry *entry, gpointer user_data) { #ifdef HAVE_GTKSPELL GConfValue *value; GtkSpell *spell; GtkWidget * dict, * spell_check, * spell_button; GtkTextView * text_view; gboolean state; gchar *lang; Ebook *ebook; ebook = (Ebook *) user_data; value = gconf_entry_get_value (entry); state = gconf_value_get_bool (value); dict = GTK_WIDGET(gtk_builder_get_object (ebook->builder, "langboxentry")); gtk_widget_set_sensitive (dict, state); text_view = GTK_TEXT_VIEW(gtk_builder_get_object (ebook->builder, "textview")); spell_check = GTK_WIDGET(gtk_builder_get_object (ebook->builder, "spellcheckmenuitem")); spell_button = GTK_WIDGET(gtk_builder_get_object (ebook->builder, "spellcheckbutton")); spell = gtkspell_get_from_text_view (text_view); lang = gconf_client_get_string (ebook->client, ebook->language.key, NULL); if (state) { if (!spell) gtkspell_new_attach (text_view, (lang == NULL || *lang == '\0') ? NULL : lang, NULL); } else { if (spell) { gtkspell_detach (spell); } } gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (spell_check), state); gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (spell_button), state); #endif /* HAVE_GTKSPELL */ }
void jam_view_settings_changed(JamView *view) { #ifdef HAVE_GTKSPELL GtkSpell *spell; GError *err = NULL; spell = gtkspell_get_from_text_view(GTK_TEXT_VIEW(view->entry)); if (conf.options.usespellcheck) { GtkWindow *toplevel; toplevel = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(view))); if (spell) { if (!gtkspell_set_language(spell, conf.spell_language, &err)) { jam_warning(toplevel, _("GtkSpell error: %s"), err->message); g_error_free(err); } } else { GError *err = NULL; if (gtkspell_new_attach(GTK_TEXT_VIEW(view->entry), conf.spell_language , &err) == NULL) { jam_warning(toplevel, _("GtkSpell error: %s"), err->message); conf.options.usespellcheck = FALSE; g_error_free(err); } } } else { if (spell) gtkspell_detach(spell); } #endif if (conf.uifont) jam_widget_set_font(view->entry, conf.uifont); if (view->musicbar) { /* There are many cleaner ways to add/remove the Refresh button when * the music preference has changed, but this works fine. */ music_remove(view); music_add(view); } }
gboolean open_file (Ebook * ebook, const gchar * filename) { GtkProgressBar * progressbar; GtkStatusbar * statusbar; guint id; GtkWidget * window; PopplerRectangle * rect; GError * err; gint G_GNUC_UNUSED pages; gchar * uri, * msg; GVfs * vfs; GFileInfo * ginfo; GError * result; GConfValue *value; gboolean lines, hyphens, pagenums; vfs = g_vfs_get_default (); if (g_vfs_is_active(vfs)) ebook->gfile = g_vfs_get_file_for_path (vfs, filename); else ebook->gfile = g_file_new_for_commandline_arg (filename); ginfo = g_file_query_info (ebook->gfile, G_FILE_ATTRIBUTE_STANDARD_SIZE, G_FILE_QUERY_INFO_NONE, NULL, &result); if (0 == g_file_info_get_attribute_uint64 (ginfo, G_FILE_ATTRIBUTE_STANDARD_SIZE)) { g_object_unref (ebook->gfile); g_object_unref (ginfo); g_warning ("%s", result->message); return FALSE; } uri = g_file_get_uri (ebook->gfile); err = NULL; pages = 0; rect = poppler_rectangle_new (); rect->x1 = rect->y1 = 0; window = GTK_WIDGET(gtk_builder_get_object (ebook->builder, "gpdfwindow")); progressbar = GTK_PROGRESS_BAR(gtk_builder_get_object (ebook->builder, "progressbar")); gtk_progress_bar_set_fraction (progressbar, 0.0); statusbar = GTK_STATUSBAR(gtk_builder_get_object (ebook->builder, "statusbar")); id = gtk_statusbar_get_context_id (statusbar, PACKAGE); msg = g_strconcat (_("Loading ebook:"), g_file_get_basename (ebook->gfile), NULL); gtk_statusbar_push (statusbar, id, msg); ebook->PDFDoc = poppler_document_new_from_file (uri, NULL, &err); gtk_progress_bar_set_fraction (progressbar, 0.0); /* long lines support */ value = gconf_client_get(ebook->client, ebook->long_lines.key, NULL); if (value) lines = gconf_value_get_bool(value); else lines = TRUE; /* page numbers support */ value = gconf_client_get(ebook->client, ebook->page_number.key, NULL); if (value) pagenums = gconf_value_get_bool(value); else pagenums = TRUE; /* join hyphens support */ value = gconf_client_get(ebook->client, ebook->join_hyphens.key, NULL); if (value) hyphens = gconf_value_get_bool(value); else hyphens = TRUE; if (POPPLER_IS_DOCUMENT (ebook->PDFDoc)) { #ifdef HAVE_GTKSPELL GtkSpell *spell; gchar * G_GNUC_UNUSED lang; #endif GtkWidget * G_GNUC_UNUSED spell_check; GtkTextView * text_view; GtkTextBuffer * buffer; gboolean state; static Equeue queue; spell_check = GTK_WIDGET(gtk_builder_get_object (ebook->builder, "spellcheckmenuitem")); text_view = GTK_TEXT_VIEW(gtk_builder_get_object (ebook->builder, "textview")); buffer = gtk_text_view_get_buffer (text_view); state = gconf_client_get_bool (ebook->client, ebook->spell_check.key, NULL); #ifdef HAVE_GTKSPELL spell = gtkspell_get_from_text_view (text_view); lang = gconf_client_get_string (ebook->client, ebook->language.key, NULL); /* updating the text area with spell enabled is very slow */ if (state) gtkspell_detach (spell); #endif pages = poppler_document_get_n_pages (ebook->PDFDoc); queue.ebook = ebook; queue.c = 0; queue.lines = lines; queue.hyphens = hyphens; queue.pagenums = pagenums; queue.rect = rect; /* whether to enable spell once all pages are loaded. */ queue.spell_state = state; /* loading a file is a single user action */ gtk_text_buffer_begin_user_action (buffer); g_timeout_add (30, load_pdf, &queue); } else { g_message ("err: %s", err->message); return FALSE; } msg = g_strconcat (PACKAGE, " - ", g_file_get_basename (ebook->gfile), NULL); gtk_window_set_title (GTK_WINDOW(window), msg); return TRUE; }