Пример #1
0
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 */
}
Пример #2
0
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);
}
Пример #3
0
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 */
}
Пример #4
0
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);
	}
}
Пример #5
0
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;
}