From 2640b1c06064e7390dc4c07f25868c7e2c6c8da4 Mon Sep 17 00:00:00 2001 From: Sandro Mani Date: Tue, 15 Nov 2022 15:16:45 +0100 Subject: [PATCH 01/23] Rebuild (minizip-ng) --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index a39a0d2..fa991d4 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 15%{?dist} +Release: 16%{?dist} Summary: Bible study and research tool License: GPLv2+ URL: http://xiphos.org/ @@ -99,6 +99,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Tue Nov 15 2022 Sandro Mani - 4.2.1-16 +- Rebuild (minizip-ng) + * Mon Aug 01 2022 Frantisek Zatloukal - 4.2.1-15 - Rebuilt for ICU 71.1 From b26d3017f0a9e3e0cd01af1c6ebf79e3e2cdd5d9 Mon Sep 17 00:00:00 2001 From: Pete Walter Date: Sat, 31 Dec 2022 03:52:48 +0000 Subject: [PATCH 02/23] Rebuild for ICU 72 --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index fa991d4..bd15800 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 16%{?dist} +Release: 17%{?dist} Summary: Bible study and research tool License: GPLv2+ URL: http://xiphos.org/ @@ -99,6 +99,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sat Dec 31 2022 Pete Walter - 4.2.1-17 +- Rebuild for ICU 72 + * Tue Nov 15 2022 Sandro Mani - 4.2.1-16 - Rebuild (minizip-ng) From 5234f9f405aa9df8446d849f2679a443863890dd Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 21 Jan 2023 07:32:39 +0000 Subject: [PATCH 03/23] Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index bd15800..88b45f5 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 17%{?dist} +Release: 18%{?dist} Summary: Bible study and research tool License: GPLv2+ URL: http://xiphos.org/ @@ -99,6 +99,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sat Jan 21 2023 Fedora Release Engineering - 4.2.1-18 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + * Sat Dec 31 2022 Pete Walter - 4.2.1-17 - Rebuild for ICU 72 From f4a557577cb3e1b2aafd3c945259bf2cc4bbce2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= Date: Tue, 11 Jul 2023 22:23:42 +0200 Subject: [PATCH 04/23] Rebuilt for ICU 73.2 --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index 88b45f5..9a0d4fc 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 18%{?dist} +Release: 19%{?dist} Summary: Bible study and research tool License: GPLv2+ URL: http://xiphos.org/ @@ -99,6 +99,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Tue Jul 11 2023 František Zatloukal - 4.2.1-19 +- Rebuilt for ICU 73.2 + * Sat Jan 21 2023 Fedora Release Engineering - 4.2.1-18 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild From 2d43ca31747f8da67f640d06b255805a8b5cb988 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 22 Jul 2023 18:56:14 +0000 Subject: [PATCH 05/23] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index 9a0d4fc..aa3d54b 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 19%{?dist} +Release: 20%{?dist} Summary: Bible study and research tool License: GPLv2+ URL: http://xiphos.org/ @@ -99,6 +99,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sat Jul 22 2023 Fedora Release Engineering - 4.2.1-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Tue Jul 11 2023 František Zatloukal - 4.2.1-19 - Rebuilt for ICU 73.2 From 272c583c0d0d8af420a3c0ce147e20cf06544e45 Mon Sep 17 00:00:00 2001 From: Lukas Javorsky Date: Mon, 4 Dec 2023 16:51:14 +0000 Subject: [PATCH 06/23] Rebuilt for minizip-ng transition Fedora change Fedora Change: https://fedoraproject.org/wiki/Changes/MinizipNGTransition --- xiphos.spec | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/xiphos.spec b/xiphos.spec index aa3d54b..a1cb5d4 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 20%{?dist} +Release: 21%{?dist} Summary: Bible study and research tool License: GPLv2+ URL: http://xiphos.org/ @@ -23,7 +23,7 @@ BuildRequires: intltool BuildRequires: itstool BuildRequires: libappstream-glib BuildRequires: libuuid-devel -BuildRequires: minizip-devel +BuildRequires: minizip-ng-compat-devel BuildRequires: rarian-compat BuildRequires: sword-devel >= 1.8 BuildRequires: util-linux @@ -99,6 +99,10 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Mon Dec 04 2023 Lukas Javorsky - 4.2.1-21 +- Rebuilt for minizip-ng transition Fedora change +- Fedora Change: https://fedoraproject.org/wiki/Changes/MinizipNGTransition + * Sat Jul 22 2023 Fedora Release Engineering - 4.2.1-20 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From e3982fdf1fbcbc2eee76b35656cce0f87b6cc3a1 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 27 Jan 2024 09:47:36 +0000 Subject: [PATCH 07/23] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index a1cb5d4..e9626eb 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 21%{?dist} +Release: 22%{?dist} Summary: Bible study and research tool License: GPLv2+ URL: http://xiphos.org/ @@ -99,6 +99,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sat Jan 27 2024 Fedora Release Engineering - 4.2.1-22 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Mon Dec 04 2023 Lukas Javorsky - 4.2.1-21 - Rebuilt for minizip-ng transition Fedora change - Fedora Change: https://fedoraproject.org/wiki/Changes/MinizipNGTransition From 72f9280926f6a8e452461d208a7caf7063a42739 Mon Sep 17 00:00:00 2001 From: Pete Walter Date: Thu, 1 Feb 2024 23:24:04 +0000 Subject: [PATCH 08/23] Rebuild for ICU 74 --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index e9626eb..da9f0d1 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 22%{?dist} +Release: 23%{?dist} Summary: Bible study and research tool License: GPLv2+ URL: http://xiphos.org/ @@ -99,6 +99,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Thu Feb 01 2024 Pete Walter - 4.2.1-23 +- Rebuild for ICU 74 + * Sat Jan 27 2024 Fedora Release Engineering - 4.2.1-22 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From cab140a576f8c7d45bc84d4b36e7ddee5b2e0178 Mon Sep 17 00:00:00 2001 From: Software Management Team Date: Thu, 30 May 2024 12:46:50 +0200 Subject: [PATCH 09/23] Eliminate use of obsolete %patchN syntax (#2283636) --- xiphos.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xiphos.spec b/xiphos.spec index da9f0d1..297f4c7 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -48,8 +48,8 @@ Project and elsewhere. %prep %setup -q rm -rf src/biblesync -%patch0 -p0 -%patch1 -p1 +%patch -P0 -p0 +%patch -P1 -p1 %build export CFLAGS="$CFLAGS -fPIC" From 067caca78ce809fb010dd5b2cbe997ad3615bc67 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 20 Jul 2024 10:08:32 +0000 Subject: [PATCH 10/23] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index 297f4c7..8a3b533 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 23%{?dist} +Release: 24%{?dist} Summary: Bible study and research tool License: GPLv2+ URL: http://xiphos.org/ @@ -99,6 +99,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sat Jul 20 2024 Fedora Release Engineering - 4.2.1-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + * Thu Feb 01 2024 Pete Walter - 4.2.1-23 - Rebuild for ICU 74 From be2171609597c106c0d5115ee4f9ea45be78fd03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= Date: Fri, 26 Jul 2024 03:57:08 +0200 Subject: [PATCH 11/23] convert GPLv2+ license to SPDX This is part of https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_4 --- xiphos.spec | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/xiphos.spec b/xiphos.spec index 8a3b533..88c42a5 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,9 +2,10 @@ Name: xiphos Version: 4.2.1 -Release: 24%{?dist} +Release: 25%{?dist} Summary: Bible study and research tool -License: GPLv2+ +# Automatically converted from old format: GPLv2+ - review is highly recommended. +License: GPL-2.0-or-later URL: http://xiphos.org/ Source0: https://github.com/crosswire/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Patch0: glib_version.patch @@ -99,6 +100,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Fri Jul 26 2024 Miroslav Suchý - 4.2.1-25 +- convert license to SPDX + * Sat Jul 20 2024 Fedora Release Engineering - 4.2.1-24 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From 8b3405ad1667b49abc6d623f74be613c009f0b18 Mon Sep 17 00:00:00 2001 From: Pete Walter Date: Sun, 8 Dec 2024 23:04:17 +0000 Subject: [PATCH 12/23] Rebuild for ICU 76 --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index 88c42a5..9b68f38 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 25%{?dist} +Release: 26%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later @@ -100,6 +100,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sun Dec 08 2024 Pete Walter - 4.2.1-26 +- Rebuild for ICU 76 + * Fri Jul 26 2024 Miroslav Suchý - 4.2.1-25 - convert license to SPDX From 1f906c531337e72ee52c2648d70ab3edf9d4ad5b Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sun, 19 Jan 2025 15:55:15 +0000 Subject: [PATCH 13/23] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index 9b68f38..52577b0 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 26%{?dist} +Release: 27%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later @@ -100,6 +100,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sun Jan 19 2025 Fedora Release Engineering - 4.2.1-27 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Sun Dec 08 2024 Pete Walter - 4.2.1-26 - Rebuild for ICU 76 From fd1f65c24b0ed5f84970b4b97c2fb46cc6cd1627 Mon Sep 17 00:00:00 2001 From: Aaron Rainbolt Date: Wed, 29 Jan 2025 17:48:23 -0600 Subject: [PATCH 14/23] Strip out editor component to resolve FTBFS --- no_editor.patch | 1319 +++++++++++++++++++++++++++++++++++++++++++++++ xiphos.spec | 11 +- 2 files changed, 1326 insertions(+), 4 deletions(-) create mode 100644 no_editor.patch diff --git a/no_editor.patch b/no_editor.patch new file mode 100644 index 0000000..814a991 --- /dev/null +++ b/no_editor.patch @@ -0,0 +1,1319 @@ +--- a/src/editor/editor.c 2020-05-07 07:45:31.000000000 -0500 ++++ b/src/editor/editor.c 2025-01-29 17:01:46.046570661 -0600 +@@ -23,7 +23,7 @@ + #include + #endif + +-#ifdef USE_WEBKIT_EDITOR ++#ifndef USE_WEBKIT_EDITOR + + /* X keyboard #definitions, to handle shortcuts */ + /* we must define the categories of #definitions we need. */ +--- a/src/editor/webkit_editor.c 2020-05-07 07:45:31.000000000 -0500 ++++ b/src/editor/webkit_editor.c 2025-01-29 17:01:04.402770869 -0600 +@@ -29,7 +29,6 @@ + #include + + #include +-#include + + #include + #include +@@ -93,7 +92,6 @@ + on_about_dialog_response(GtkDialog *dialog, + gint response_id, gpointer user_data) + { +- gtk_widget_destroy(GTK_WIDGET(dialog)); + } + + /****************************************************************************** +@@ -115,39 +113,21 @@ + G_MODULE_EXPORT void + action_about_activate_cb(GtkWidget *widget, EDITOR *e) + { +- GtkWidget *about; +- GdkPixbuf *about_logo; +- +- about_logo = pixbuf_finder("xiphos-button-125.png", 0, NULL); +- about = gtk_about_dialog_new(); +- +- g_signal_connect(about, "response", +- G_CALLBACK(on_about_dialog_response), NULL); +- gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about), "WebKit editor, Xiphos"); +- gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about), (gchar *)VERSION); +- gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about), "Replacement for gtkhtml editor"); +- gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(about), about_logo); +- set_window_icon(GTK_WINDOW(about)); +- gtk_widget_show(about); + } + + G_MODULE_EXPORT void + action_increase_indent_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_execute_script("document.execCommand('Indent', false, false);", e); +- editor_insert_new_outline_level(e->toolitems.outline_level, e); + } + + G_MODULE_EXPORT void + action_decrease_indent_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_execute_script("document.execCommand('Outdent', false, false);", e); + } + + G_MODULE_EXPORT void + action_insert_rule_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_insert_html("
", e); + } + + G_MODULE_EXPORT void +@@ -158,141 +138,80 @@ + G_MODULE_EXPORT void + action_insert_emoticon_activate_cb(GtkWidget *widget, EDITOR *e) + { +- // This is stupid, if we don't have emoticons working, then we sould +- // remove the button users see. +- +- //script = g_strdup ("document.execCommand('', null, \"\");"); + } + + G_MODULE_EXPORT void + action_insert_image_activate_cb(GtkWidget *widget, EDITOR *e) + { +- gchar *filename = NULL; +- +- GtkWidget *dialog = gtk_file_chooser_dialog_new("Select an image file", +- NULL, +- GTK_FILE_CHOOSER_ACTION_OPEN, +-#if GTK_CHECK_VERSION(3, 10, 0) +- "_Cancel", GTK_RESPONSE_CANCEL, +- "_OK", GTK_RESPONSE_ACCEPT, +-#else +- GTK_STOCK_CANCEL, +- GTK_RESPONSE_CANCEL, +- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, +-#endif +- NULL); +- +- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { +- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); +- gchar *script = g_strdup_printf("document.execCommand('insertImage', null, '%s');", filename); +- editor_execute_script(script, e); +- g_free(script); +- } +- +- if (filename) +- g_free(filename); +- gtk_widget_destroy(dialog); + } + + G_MODULE_EXPORT void + action_insert_outline_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_execute_script("document.execCommand('insertHTML', null, \"
\");", e); + } + + G_MODULE_EXPORT void + action_justify_right_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_execute_script("document.execCommand('justifyright', false, false);", e); + } + + G_MODULE_EXPORT void + action_justify_left_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_execute_script("document.execCommand('justifyleft', false, false);", e); + } + + G_MODULE_EXPORT void + action_justify_center_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_execute_script("document.execCommand('justifycenter', false, false);", e); + } + + G_MODULE_EXPORT void + action_justify_full_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_execute_script("document.execCommand('justifyfull', false, false);", e); + } + + G_MODULE_EXPORT void + action_bold_activate_cb(GtkWidget *widget, EDITOR *e) + { +- if (buttons_state.nochange) +- return; +- +- editor_execute_script("document.execCommand('bold',false,false);", e); + } + + G_MODULE_EXPORT void + action_italic_activate_cb(GtkWidget *widget, EDITOR *e) + { +- //extern BUTTONS_STATE buttons_state; +- if (buttons_state.nochange) +- return; +- +- editor_execute_script("document.execCommand('italic',false,false);", e); + } + + G_MODULE_EXPORT void + action_undo_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_execute_script("document.execCommand('undo',false,false);", e); + } + + G_MODULE_EXPORT void + action_redo_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_execute_script("document.execCommand('redo',false,false);", e); + } + + G_MODULE_EXPORT void + action_underline_activate_cb(GtkWidget *widget, EDITOR *e) + { +- //extern BUTTONS_STATE buttons_state; +- if (buttons_state.nochange) +- return; +- +- editor_execute_script("document.execCommand('underline', false, false);", e); + } + + G_MODULE_EXPORT void + action_strikethrough_activate_cb(GtkWidget *widget, EDITOR *e) + { +- //extern BUTTONS_STATE buttons_state; +- if (buttons_state.nochange) +- return; +- +- editor_execute_script("document.execCommand('strikethrough', false, false);", e); + } + + G_MODULE_EXPORT void action_cut_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_cut(e); + } + + G_MODULE_EXPORT void + action_copy_activate_cb(GtkWidget *widget, EDITOR *e) + { +- if (editor_copy(e)) +- XI_message(("%s", "copy success")); +- else +- XI_message(("%s", "copy failed")); + } + + G_MODULE_EXPORT void + action_paste_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_paste(e); + } + + G_MODULE_EXPORT void +@@ -303,737 +222,92 @@ + G_MODULE_EXPORT void + action_delete_item_activate_cb(GtkWidget *widget, EDITOR *e) + { +- if (e->studypad) +- return; +- +- gchar *buf = +- g_strdup_printf("%s %s?", +- _("Are you sure you want to delete the note for"), e->key); +- +- if (gui_yes_no_dialog(buf, +-#if GTK_CHECK_VERSION(3, 10, 0) +- "dialog-warning" +-#else +- GTK_STOCK_DIALOG_WARNING +-#endif +- )) { +- +- main_delete_note(e->module, e->key); +- +- /* new empty document from template */ +- gchar *fname = g_build_filename(settings.gSwordDir, "studypad.spt", NULL); +- XI_message(("action delete item [%s]", fname)); +- gchar *text = inhale_text_from_file(fname); +- g_free(fname); +- +- if (text && strlen(text)) { +- webkit_web_view_load_string((WebKitWebView *) +- e->html_widget, +- text, +- "application/xhtml+xml", "utf_8", +- "file://"); +- } +- if (text) +- g_free(text); +- } +- +- g_free(buf); +- e->is_changed = FALSE; + } + + void set_button_state(BUTTONS_STATE state, EDITOR *e) + { +-#if GTK_CHECK_VERSION(3, 4, 0) +- GdkRGBA rgba; +-#else +- GdkColor color; +-#endif +- gtk_toggle_tool_button_set_active(e->toolitems.bold, state.bold); +- gtk_toggle_tool_button_set_active(e->toolitems.italic, state.italic); +- gtk_toggle_tool_button_set_active(e->toolitems.underline, state.underline); +- gtk_toggle_tool_button_set_active(e->toolitems.strike, state.strike); +- gtk_combo_box_set_active((GtkComboBox *)e->toolitems.cb, state.style); +- +- if (state.color) { +- XI_message(("state.color: %s", state.color)); +-#if GTK_CHECK_VERSION(3, 4, 0) +- if (gdk_rgba_parse(&rgba, state.color)) +- gtk_color_chooser_set_rgba((GtkColorChooser *) +- e->toolitems.color, +- &rgba); +-#else +- if (gdk_color_parse(state.color, &color)) +- gtk_color_button_set_color((GtkColorButton *) +- e->toolitems.color, +- &color); +-#endif +- } + } + + G_MODULE_EXPORT void + colorbutton1_color_set_cb(GtkColorButton *widget, EDITOR *e) + { +-#if GTK_CHECK_VERSION(3, 4, 0) +- GdkRGBA color; +-#else +- GdkColor color; +-#endif +- gchar *color_str; +- gchar *forecolor = NULL; +- +-#if GTK_CHECK_VERSION(3, 4, 0) +- gtk_color_chooser_get_rgba((GtkColorChooser *)widget, &color); +- color_str = gdk_rgba_to_string(&color); +-#else +- gtk_color_button_get_color((GtkColorButton *)widget, &color); +- /* FIXME: ugly need something better */ +- color_str = g_strdup_printf("rgb(%u,%u,%u)", color.red >> 8, color.green >> 8, color.blue >> 8); +-#endif +- forecolor = g_strdup_printf("document.execCommand('forecolor', null, '%s');", color_str); +- editor_execute_script(forecolor, e); +- g_free(forecolor); +- g_free(color_str); + } + + G_MODULE_EXPORT void + colorbutton_highlight_color_set_cb(GtkColorButton *widget, EDITOR *e) + { +- +-#if GTK_CHECK_VERSION(3, 4, 0) +- GdkRGBA color; +-#else +- GdkColor color; +-#endif +- gchar *color_str; +- gchar *highlightcolor = NULL; +- +-#if GTK_CHECK_VERSION(3, 4, 0) +- gtk_color_chooser_get_rgba((GtkColorChooser *)widget, &color); +- color_str = gdk_rgba_to_string(&color); +-#else +- gtk_color_button_get_color((GtkColorButton *)widget, &color); +- /* FIXME: ugly need something better */ +- color_str = g_strdup_printf("rgb(%u,%u,%u)", color.red >> 8, color.green >> 8, color.blue >> 8); +-#endif +- highlightcolor = g_strdup_printf("document.execCommand('backColor', null, '%s');", color_str); +- editor_execute_script(highlightcolor, e); +- g_free(highlightcolor); +- g_free(color_str); +-} +- +-static gchar *get_font_size_from_name(GString *fontname) +-{ +- gchar buf[80]; +- gint len, i = 0, j = 0; +- +- len = fontname->len; +- XI_message(("\nlength: %d\n", len)); +- for (i = 0; (i < 79 && i < len); i++) { +- if (isdigit(fontname->str[i])) { +- XI_message(("\n\nfontname->str[i]: %c", +- fontname->str[i])); +- buf[j] = fontname->str[i]; +- buf[j + 1] = '\0'; +- j++; +- } +- } +- return g_strdup(buf); +-} +- +-G_MODULE_EXPORT void +-action_font_activate_cb(GtkWidget *widget, EDITOR *e) +-{ +- GtkWidget *dialog; +- gchar *selected_text = NULL; +- gchar *size = NULL; +-#if GTK_CHECK_VERSION(3, 2, 0) +- dialog = gtk_font_chooser_dialog_new("Select font", NULL); +- gtk_font_chooser_set_font((GtkFontChooser *)dialog, +-#else +- dialog = gtk_font_selection_dialog_new("Select font"); +- gtk_font_selection_dialog_set_font_name((GtkFontSelectionDialog *) +- dialog, +-#endif +- "Droid Sans 14"); +- +- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { +-#if GTK_CHECK_VERSION(3, 2, 0) +- const gchar *fontname = gtk_font_chooser_get_font((GtkFontChooser *)dialog); +-#else +- const gchar *fontname = gtk_font_selection_dialog_get_font_name((GtkFontSelectionDialog *)dialog); +-#endif +- GString *name = g_string_new(fontname); +- size = get_font_size_from_name(name); +- g_string_free(name, TRUE); +- +- selected_text = editor_get_selected_text(e); +-#if GTK_CHECK_VERSION(3, 2, 0) +- PangoFontDescription *font_description = +- gtk_font_chooser_get_font_desc((GtkFontChooser *) +- dialog); +- fontname = pango_font_description_get_family(font_description); +-#else +- PangoFontDescription *font_description = +- pango_font_description_from_string(fontname); +- fontname = pango_font_description_get_family(font_description); +-#endif +- +- gchar *script = g_strdup_printf("%s", +- fontname, size, selected_text); +- +- editor_insert_html(script, e); +- g_free(script); +- } +- if (size) +- g_free(size); +- if (selected_text) +- g_free(selected_text); +- gtk_widget_destroy(dialog); + } + + G_MODULE_EXPORT void + find_replace_response_cb(GtkDialog *dialog, gint response_id, EDITOR *e) + { +- switch (response_id) { +- case GTK_RESPONSE_CANCEL: +- gtk_widget_hide(find_dialog.window); +- break; +- case 1: +- editor_find_string((gchar *) +- gtk_entry_get_text(GTK_ENTRY(find_dialog.find_entry)), +- e); +- break; +- case 2: +- editor_replace_string((gchar *) +- gtk_entry_get_text(GTK_ENTRY(find_dialog.find_entry)), +- (gchar *) +- gtk_entry_get_text(GTK_ENTRY(find_dialog.replace_entry)), +- e); +- break; +- default: +- gtk_widget_hide(find_dialog.window); +- break; +- } + } + + G_MODULE_EXPORT void + action_find_activate_cb(GtkWidget *widget, EDITOR *e) + { +- gtk_widget_show(find_dialog.window); +- gtk_widget_hide(find_dialog.box_replace); +- gtk_widget_hide(find_dialog.button_replace); + } + + G_MODULE_EXPORT void + action_replace_activate_cb(GtkWidget *widget, EDITOR *e) + { +- gtk_widget_show(find_dialog.window); +- gtk_widget_show(find_dialog.box_replace); +- gtk_widget_show(find_dialog.button_replace); +-} +- +-static void handle_error(GError **error) +-{ +- if (*error != NULL) { +- g_warning("%s", (*error)->message); +- g_clear_error(error); +- } +-} +- +-static void do_exit(EDITOR *e) +-{ +- if (e->filename) { +- g_free(e->filename); +- } +- if (e->module) { +- g_free(e->module); +- } +- if (e->key) { +- g_free(e->key); +- } +- if (e->window) +- gtk_widget_destroy(e->window); +- g_free(e); +-} +- +-static void recent_item_cb(GtkRecentChooser *chooser, EDITOR *e) +-{ +- gchar *file_uri = gtk_recent_chooser_get_current_uri(chooser); +- +- XI_message(("file_uri: %s", file_uri)); +- if (e->filename) +- g_free(e->filename); +- e->filename = g_strdup(file_uri); +- +- //editor_open_recent (file_uri, e); +- _load_file(e, file_uri); +- xml_set_value("Xiphos", "studypad", "lastfile", e->filename); +- settings.studypadfilename = xml_get_value("studypad", "lastfile"); +- +- change_window_title(e->window, e->filename); +-} +- +-static void change_window_title(GtkWidget *window, const gchar *window_title) +-{ +- gtk_window_set_title(GTK_WINDOW(window), window_title); +-} +- +-static GtkPrintOperationResult +-print(WebKitWebView *html, GtkPrintOperationAction action) +-{ +- GtkPrintOperation *operation; +- GtkPrintOperationResult result; +- GError *error = NULL; +- WebKitWebFrame *frame; +- +- frame = webkit_web_view_get_main_frame(html); +- operation = gtk_print_operation_new(); +- +- result = webkit_web_frame_print_full(frame, operation, action, &error); +- +- g_object_unref(operation); +- handle_error(&error); +- +- return result; +-} +- +-static gint open_dialog(EDITOR *e) +-{ +- GtkWidget *dialog; +- gint response; +- +- dialog = gtk_file_chooser_dialog_new(_("Open"), GTK_WINDOW(e->window), +- GTK_FILE_CHOOSER_ACTION_OPEN, +-#if GTK_CHECK_VERSION(3, 10, 0) +- "_Cancel", GTK_RESPONSE_CANCEL, +- "_Open", GTK_RESPONSE_ACCEPT, +-#else +- GTK_STOCK_CANCEL, +- GTK_RESPONSE_CANCEL, +- GTK_STOCK_OPEN, +- GTK_RESPONSE_ACCEPT, +-#endif +- NULL); +- +- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), settings.studypaddir); +- +- response = gtk_dialog_run(GTK_DIALOG(dialog)); +- +- if (response == GTK_RESPONSE_ACCEPT) { +- gchar *new_filename; +- +- new_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); +- _load_file(e, new_filename); +- g_free(new_filename); +- } +- +- gtk_widget_destroy(dialog); +- +- return response; + } + + G_MODULE_EXPORT void action_print_cb(GtkAction *action, EDITOR *e) + { +- print(WEBKIT_WEB_VIEW(e->html_widget), +- GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG); + } + + G_MODULE_EXPORT void action_print_preview_cb(GtkAction *action, EDITOR *e) + { +- print(WEBKIT_WEB_VIEW(e->html_widget), +- GTK_PRINT_OPERATION_ACTION_PREVIEW); + } + + G_MODULE_EXPORT void action_quit_activate_cb(GtkWidget *widget, EDITOR *e) + { +- delete_event(NULL, NULL, e); + } + + G_MODULE_EXPORT void action_open_activate_cb(GtkWidget *widget, EDITOR *e) + { +- open_dialog(e); + } + + G_MODULE_EXPORT void action_save_activate_cb(GtkWidget *widget, EDITOR *e) + { +- switch (e->type) { +- case STUDYPAD_EDITOR: +- _save_file(e); +- break; +- case NOTE_EDITOR: +- _save_note(e); +- break; +- case BOOK_EDITOR: +- _save_book(e); +- break; +- default: +- XI_message(("\naction_save_cb oops!\n")); +- break; +- } + } + + G_MODULE_EXPORT void action_new_activate_cb(GtkWidget *widget, EDITOR *e) + { /* for studypad only */ +- gchar *filename = NULL; +- +- if (e->is_changed) +- ask_about_saving(e); +- +- filename = g_strdup_printf("%s/%s", settings.gSwordDir, "studypad.spt"); +- +- _load_file(e, filename); +- +- if (e->filename) +- g_free(e->filename); +- e->filename = g_strdup(_("Untitled document")); +- +- xml_set_value("Xiphos", "studypad", "lastfile", e->filename); +- settings.studypadfilename = xml_get_value("studypad", "lastfile"); +- change_window_title(e->window, e->filename); +- e->is_changed = TRUE; + } + + G_MODULE_EXPORT void + action_insert_sword_link_activate_cb(GtkWidget *widget, gpointer data) + { +- editor_link_dialog(data); //editor_insert_sword_link(); + } + + G_MODULE_EXPORT void + action_insert_link_activate_cb(GtkWidget *widget, EDITOR *e) + { +- editor_link_dialog(e); + } + + G_MODULE_EXPORT void + action_save_as_activate_cb(GtkWidget *widget, EDITOR *e) + { +- if (e->filename) +- g_free(e->filename); +- e->filename = NULL; +- _save_file(e); + } + + G_MODULE_EXPORT void combo_box_changed_cb(GtkComboBox *widget, EDITOR *e) + { +- gchar *script = NULL; +- gint choice = gtk_combo_box_get_active(widget); +- /* we need the line of text where the cursor is */ +- //extern BUTTONS_STATE buttons_state; +- +- if (buttons_state.nochange) +- return; +- +- switch (choice) { +- case 0: /* Normal */ +- script = "document.execCommand('formatBlock', false, \"div\");"; +- break; +- +- case 1: /* H1 */ +- script = "document.execCommand('formatBlock', null, \"H1\");"; +- break; +- +- case 2: /* H2 */ +- script = "document.execCommand('formatBlock', null, \"H2\");"; +- break; +- +- case 3: /* H3 */ +- script = "document.execCommand('formatBlock', null, \"H3\");"; +- break; +- +- case 4: /* H4 */ +- script = "document.execCommand('formatBlock', null, \"H4\");"; +- break; +- +- case 5: /* H5 */ +- script = "document.execCommand('formatBlock', null, \"H5\");"; +- break; +- +- case 6: /* H6 */ +- script = "document.execCommand('formatBlock', null, \"H6\");"; +- break; +- +- case 7: /* Address */ +- script = "document.execCommand('formatBlock', null, \"ADDRESS\");"; +- break; +- +- case 8: /* Preformatted */ +- script = "document.execCommand('formatBlock', null, \"PRE\");"; +- break; +- +- case 9: /* Bulleted List insertUnorderedList */ +- script = "document.execCommand('insertUnorderedList', null, \"\");"; +- break; +- +- case 10: /* Roman Numeral List */ +- script = "document.execCommand('insertHTML', null, \"
\");"; +- break; +- +- case 11: /* Numbered List insertOrderedList */ +- script = "document.execCommand('insertOrderedList', null, \"\");"; +- break; +- +- case 12: /* Alphabetical List */ +- script = "document.execCommand('insertHTML', null, \"
\");"; +- break; +- +- default: +- break; +- } +- +- if (script) { +- XI_message(("%s", script)); +- editor_execute_script(script, e); +- } +-} +- +-/* need note toolbars when type is note */ +-static GtkWidget *editor_new(const gchar *title, EDITOR *e) +-{ +- GtkWidget *window; +- GtkWidget *scrollwindow; +- GtkWidget *statusbar; +- GtkBuilder *builder; +- gchar *gbuilder_file; +- GError *error = NULL; +- GtkMenuItem *item; +- GtkWidget *recent_item; +- +- buttons_state.nochange = 1; +- +- gbuilder_file = gui_general_user_file( +-#ifdef USE_GTK_3 +- "gtk_webedit.ui" +-#else +- "gtk2_webedit.ui" +-#endif +- , +- FALSE); +- builder = gtk_builder_new(); +- +- if (!gtk_builder_add_from_file(builder, gbuilder_file, &error)) { +- g_warning("Couldn't load builder file: %s", +- error->message); +- g_error_free(error); +- } +- +- window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); +- e->window = window; +- gtk_window_set_title(GTK_WINDOW(window), title); +- +- statusbar = GTK_WIDGET(gtk_builder_get_object(builder, "statusbar1")); +- gtk_widget_hide(statusbar); +- +- e->toolitems.outline_level = 0; +- e->toolitems.bold = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_bold")); +- e->toolitems.italic = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_italic")); +- e->toolitems.underline = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbuttonunderline")); +- e->toolitems.strike = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_strikethrough")); +- e->toolitems.open = GTK_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_open")); +- e->toolitems.newdoc = GTK_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_new")); +- e->toolitems.deletedoc = GTK_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_delete")); +- e->toolitems.color = GTK_COLOR_BUTTON(gtk_builder_get_object(builder, "colorbutton1")); +- e->toolitems.cb = GTK_COMBO_BOX_TEXT(gtk_builder_get_object(builder, "comboboxtext1")); +- +- gtk_combo_box_set_active((GtkComboBox *)e->toolitems.cb, 0); +- +- item = GTK_MENU_ITEM(gtk_builder_get_object(builder, "menuitem_recent")); +- +- switch (e->type) { +- case STUDYPAD_EDITOR: +- gtk_widget_hide(GTK_WIDGET(e->toolitems.deletedoc)); +- +- recent_item = gtk_recent_chooser_menu_new(); +- g_signal_connect(G_OBJECT(recent_item), "item-activated", +- G_CALLBACK(recent_item_cb), e); +- gtk_menu_item_set_submenu(item, recent_item); +- break; +- case NOTE_EDITOR: +- gtk_widget_hide(GTK_WIDGET(e->toolitems.open)); +- gtk_widget_hide(GTK_WIDGET(e->toolitems.newdoc)); +- gtk_widget_hide(GTK_WIDGET(item)); +- break; +- case BOOK_EDITOR: +- gtk_widget_hide(GTK_WIDGET(e->toolitems.open)); +- gtk_widget_hide(GTK_WIDGET(e->toolitems.newdoc)); +- gtk_widget_hide(GTK_WIDGET(item)); +- break; +- } +- +- e->navbar_box = GTK_WIDGET(gtk_builder_get_object(builder, "box_navbar")); +- e->box = GTK_WIDGET(gtk_builder_get_object(builder, "vbox1")); +- +- scrollwindow = GTK_WIDGET(gtk_builder_get_object(builder, "scrolledwindow1")); +- create_editor_window(scrollwindow, e); +- e->is_changed = FALSE; +- +- /* This is important */ +- gtk_builder_connect_signals(builder, (EDITOR *)e); +- +- find_dialog.window = GTK_WIDGET(gtk_builder_get_object(builder, "dialog_find_replace")); +- find_dialog.find_entry = GTK_WIDGET(gtk_builder_get_object(builder, "entry1")); +- find_dialog.replace_entry = GTK_WIDGET(gtk_builder_get_object(builder, "entry2")); +- find_dialog.box_replace = GTK_WIDGET(gtk_builder_get_object(builder, "box4")); +- find_dialog.button_replace = GTK_WIDGET(gtk_builder_get_object(builder, "button_replace")); +- +- g_object_unref(builder); +- +- return window; +-} +- +-static void _save_note(EDITOR *e) +-{ +- GString *data = g_string_new(""); +- +- editor_get_document_content(data, e); +- main_save_note(e->module, e->key, data->str); +- e->is_changed = FALSE; +- g_string_free(data, TRUE); +-} +- +-static void _save_book(EDITOR *e) +-{ +- GString *data = g_string_new(""); +- +- editor_get_document_content(data, e); +- main_treekey_save_book_text(e->module, e->key, data->str); +- e->is_changed = FALSE; +- g_string_free(data, TRUE); +-} +- +-static void _save_file(EDITOR *e) +-{ +- GtkRecentManager *rm = NULL; +- GString *data = g_string_new(""); +- +- editor_get_document_content(data, e); +- XI_message(("%s", data->str)); +- +- if (!e->filename || (0 == g_strcmp0("Untitled document", e->filename)) || g_strrstr(e->filename, ".spt")) { +- GtkWidget *dialog = gtk_file_chooser_dialog_new("Save as", //const gchar *title, +- NULL, //GtkWindow *parent, +- GTK_FILE_CHOOSER_ACTION_SAVE, //GtkFileChooserAction action, +-#if GTK_CHECK_VERSION(3, 10, 0) +- "_OK", +- GTK_RESPONSE_OK, +- "_Cancel", +- GTK_RESPONSE_CANCEL, +-#else +- GTK_STOCK_OK, +- GTK_RESPONSE_OK, +- GTK_STOCK_CANCEL, +- GTK_RESPONSE_CANCEL, +-#endif +- NULL); +- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); +- +- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), +- settings.studypaddir); +- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { +- gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); +- e->filename = g_strdup(filename); +- GFile *gfile = g_file_parse_name(filename); +- g_file_replace_contents(gfile, data->str, data->len, NULL, TRUE, G_FILE_CREATE_NONE, NULL, NULL, NULL); //GError **error +- } +- change_window_title(e->window, e->filename); +- gtk_widget_destroy(dialog); +- +- } else { +- +- GFile *gfile = g_file_parse_name(e->filename); +- g_file_replace_contents(gfile, data->str, data->len, NULL, TRUE, G_FILE_CREATE_NONE, NULL, NULL, NULL); //GError **error +- } +- +- rm = gtk_recent_manager_get_default(); +- gtk_recent_manager_add_item(rm, e->filename); +- +- e->is_changed = FALSE; +- g_string_free(data, TRUE); +-} +- +-static void _load_file(EDITOR *e, const gchar *filename) +-{ +- char *text = NULL; +- GtkRecentManager *rm = NULL; +- +- rm = gtk_recent_manager_get_default(); +- gtk_recent_manager_add_item(rm, filename); +- +- if (e->filename) +- g_free(e->filename); +- e->filename = g_strdup(filename); +- +- XI_message(("_load_file filename: %s", filename)); +- +- xml_set_value("Xiphos", "studypad", "lastfile", e->filename); +- settings.studypadfilename = xml_get_value("studypad", "lastfile"); +- +- change_window_title(e->window, e->filename); +- text = inhale_text_from_file(!strncmp(filename, "file:", 5) +- ? filename + 5 +- : filename); +- +- XI_message(("web view load string [%s]", text)); +- webkit_web_view_load_string(WEBKIT_WEB_VIEW(e->html_widget), +- text, "application/xhtml+xml", "utf_8", "file://"); +- +- g_free(text); +- e->is_changed = FALSE; + } + + gboolean editor_is_dirty(EDITOR *e) + { +- return e->is_changed; ++ return FALSE; + } + + void editor_save_book(EDITOR *e) + { +- if (editor_is_dirty(e)) +- _save_book(e); + } + + /* save if needed is done in treeky-editor.c before calling editor_load_book() */ + void editor_load_book(EDITOR *e) + { +- gchar *title = NULL, *text = NULL; +- +- if (!g_ascii_isdigit(e->key[0])) +- return; /* make sure is a number (offset) */ +- +- XI_message(("book: %s\noffset :%s", e->module, e->key)); +- +- if (atol(e->key) != 0) +- text = main_get_book_raw_text(e->module, e->key); +- else +- text = g_strdup(e->module); +- +- if ((text == NULL) || strlen(text) == 0) { +- if (text) +- g_free(text); +- +- /* new empty document from template */ +- gchar *fname = g_build_filename(settings.gSwordDir, "studypad.spt", NULL); +- XI_message(("editor load BOOK [%s]", fname)); +- text = inhale_text_from_file(fname); +- g_free(fname); +- } +- +- if (text && strlen(text)) { +- webkit_web_view_load_string((WebKitWebView *) +- e->html_widget, +- text, +- "application/xhtml+xml", "utf_8", +- "file://"); +- } +- +- if (text) +- g_free(text); +- +- title = g_strdup_printf("%s", e->module); +- change_window_title(e->window, title); +- g_free(title); +- +- e->is_changed = FALSE; + } + + /****************************************************************************** +@@ -1054,281 +328,19 @@ + + void editor_sync_with_main(void) + { +- GList *tmp = NULL; +- +- tmp = g_list_first(editors_all); +- while (tmp != NULL) { +- EDITOR *e = (EDITOR *)tmp->data; +- +- switch (e->type) { +- case STUDYPAD_EDITOR: +- case BOOK_EDITOR: +- break; +- case NOTE_EDITOR: +- if (e->sync) +- editor_load_note(e, NULL, +- settings.currentverse); +- break; +- } +- tmp = g_list_next(tmp); +- } + } + + void + editor_load_note(EDITOR *e, const gchar *module_name, const gchar *key) + { +- gchar *title = NULL, *text = NULL; +- +- if (e->is_changed) +- _save_note(e); +- +- if (module_name) { +- if (e->module) +- g_free(e->module); +- e->module = g_strdup(module_name); +- } +- if (key) { +- if (e->key) +- g_free(e->key); +- e->key = g_strdup(key); +- } +- +- text = main_get_raw_text((gchar *)e->module, (gchar *)e->key); +- +- if ((text == NULL) || strlen(text) == 0) { +- if (text) +- g_free(text); +- +- /* new empty document from template */ +- gchar *fname = g_build_filename(settings.gSwordDir, "studypad.spt", NULL); +- XI_message(("editor load NOTE [%s]", fname)); +- text = inhale_text_from_file(fname); +- g_free(fname); +- } +- +- if (text && strlen(text)) { +- webkit_web_view_load_string((WebKitWebView *) +- e->html_widget, +- text, +- "application/xhtml+xml", "utf_8", +- "file://"); +- } +- +- e->is_changed = FALSE; +- if (e->type == NOTE_EDITOR) { +- e->navbar.valid_key = TRUE; +- main_navbar_versekey_set(e->navbar, e->key); +- } +- +- if (text) +- g_free(text); +- +- title = g_strdup_printf("%s - %s", e->module, e->key); +- change_window_title(e->window, title); +- g_free(title); + } + + G_MODULE_EXPORT int + delete_event(GtkWidget *widget, GdkEvent *event, EDITOR *e) + { +- if (e->is_changed) { +- switch (ask_about_saving(e)) { +- case GS_YES: /* exit saving */ +- break; +- +- case GS_NO: /* exit without saving */ +- break; +- +- case GS_CANCEL: +- return TRUE; +- } +- } +- editors_all = g_list_remove(editors_all, e); +- do_exit(e); + return FALSE; + } + +-gint ask_about_saving(EDITOR *e) +-{ +- gint test; +- GS_DIALOG *info; +- gchar *buf = NULL; +- gchar *buf1 = NULL; +- gchar *buf2 = NULL; +- gchar *buf3 = NULL; +- gint retval = FALSE; +- +- switch (e->type) { +- case BOOK_EDITOR: +- case NOTE_EDITOR: +- info = gui_new_dialog(); +- info->stock_icon = +-#if GTK_CHECK_VERSION(3, 10, 0) +- "dialog-warning"; +-#else +- GTK_STOCK_DIALOG_WARNING; +-#endif +- +- buf = g_strdup_printf("%s: %s", e->module, e->key); +- buf1 = _("Save the changes to document"); +- buf2 = _("before closing?"); +- buf3 = g_strdup_printf("%s %s %s", +- buf1, buf, buf2); +- info->label_top = buf3; +- info->label2 = _("If you don't save, changes will be permanently lost."); +- info->save = TRUE; +- info->cancel = TRUE; +- info->no_save = TRUE; +- +- test = gui_alert_dialog(info); +- retval = test; +- +- if (test == GS_YES) { +- if (e->type == NOTE_EDITOR) { +- /* save notes and prayer lists */ +- _save_note(e); +- +- } else { +- /* save notes and prayer lists */ +- _save_book(e); +- } +- } +- g_free(info); +- g_free(buf); +- g_free(buf3); +- break; +- +- case STUDYPAD_EDITOR: +- info = gui_new_dialog(); +- info->stock_icon = +-#if GTK_CHECK_VERSION(3, 10, 0) +- "dialog-warning"; +-#else +- GTK_STOCK_DIALOG_WARNING; +-#endif +- if (settings.studypadfilename) +- buf = settings.studypadfilename; +- else +- buf = N_("File"); +- buf1 = _("Save the changes to document"); +- buf2 = _("before closing?"); +- buf3 = g_strdup_printf("%s %s %s", +- buf1, buf, buf2); +- info->label_top = buf3; +- info->label2 = _("If you don't save, changes will be permanently lost."); +- info->save = TRUE; +- info->cancel = TRUE; +- info->no_save = TRUE; +- +- test = gui_alert_dialog(info); +- retval = test; +- if (test == GS_YES) { +- _save_file(e); +- } +- g_free(info); +- g_free(buf3); +- break; +- } +- sync_windows(); +- return retval; +-} +- +-static gint _create_new(const gchar *filename, const gchar *key, +- gint editor_type) +-{ +- EDITOR *editor; +- GtkWidget *toolbar_nav = NULL; +- +- editor = g_new(EDITOR, 1); +- editor->html_widget = NULL; +- editor->sync = FALSE; +- editor->type = editor_type; +- +- switch (editor_type) { +- case STUDYPAD_EDITOR: +- editor->studypad = TRUE; +- editor->bookeditor = FALSE; +- editor->noteeditor = FALSE; +- editor->module = NULL; +- editor->key = NULL; +- editor->filename = NULL; +- widgets.studypad_dialog = editor_new(_("StudyPad"), editor); +- +- if (filename) { +- editor->filename = g_strdup(filename); +- _load_file(editor, g_strdup(filename)); +- } +- break; +- case NOTE_EDITOR: +- editor->noteeditor = TRUE; +- editor->bookeditor = FALSE; +- editor->studypad = FALSE; +- editor->filename = NULL; +- editor->module = g_strdup(filename); +- editor->key = g_strdup(key); +- editor->navbar.key = NULL; +- editor_new(_("Note Editor"), editor); +- +- toolbar_nav = gui_navbar_versekey_editor_new(editor); +- gtk_widget_show(toolbar_nav); +- gtk_box_pack_start(GTK_BOX(editor->navbar_box), +- GTK_WIDGET(toolbar_nav), FALSE, TRUE, +- 0); +- +- editor_load_note(editor, NULL, NULL); +- break; +- case BOOK_EDITOR: +- editor->bookeditor = TRUE; +- editor->noteeditor = FALSE; +- editor->studypad = FALSE; +- editor->filename = NULL; +- editor->module = g_strdup(filename); +- editor->key = g_strdup(key); +- editor_new(_("Prayer List/Journal Editor"), editor); +- +- GtkWidget *box; +- UI_VBOX(box, FALSE, 0); +- gtk_widget_show(box); +- GtkWidget *hpaned1 = UI_HPANE(); +- gtk_widget_show(hpaned1); +- gtk_paned_pack2(GTK_PANED(hpaned1), box, TRUE, TRUE); +- +- GtkWidget *scrollbar = gtk_scrolled_window_new(NULL, NULL); +- gtk_widget_show(scrollbar); +- gtk_paned_pack1(GTK_PANED(hpaned1), GTK_WIDGET(scrollbar), +- TRUE, TRUE); +- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbar), +- GTK_POLICY_AUTOMATIC, +- GTK_POLICY_AUTOMATIC); +- gtk_scrolled_window_set_shadow_type((GtkScrolledWindow *) +- scrollbar, +- settings.shadow_type); +- +- editor->treeview = gui_create_editor_tree(editor); +- gtk_widget_show(editor->treeview); +- gtk_container_add(GTK_CONTAINER(scrollbar), +- editor->treeview); +- gtk_paned_set_position(GTK_PANED(hpaned1), 125); +- gtk_tree_view_expand_all((GtkTreeView *)editor->treeview); +-// then we should expand on the item to which we've opened for edit. +- +-#if GTK_CHECK_VERSION(3, 10, 0) +- gtk_container_add(GTK_CONTAINER(box), editor->box); +-#else +- gtk_widget_reparent(editor->box, box); +-#endif +- +- gtk_container_add(GTK_CONTAINER(editor->window), hpaned1); +- +- editor_load_book(editor); +- +- break; +- } +- editor->is_changed = FALSE; +- editors_all = g_list_append(editors_all, (EDITOR *)editor); +- return 1; +-} +- + /****************************************************************************** + * Name + * editor_create_new +@@ -1348,85 +360,11 @@ + gint editor_create_new(const gchar *filename, const gchar *key, + gint editor_type) + { +- GList *tmp = NULL; +- +- tmp = g_list_first(editors_all); +- while (tmp != NULL) { +- EDITOR *e = (EDITOR *)tmp->data; +- switch (editor_type) { +- case STUDYPAD_EDITOR: +- if (e->studypad) { +- if (editor_is_dirty(e)) +- _save_file(e); +- if (e->filename) +- g_free(e->filename); +- e->filename = g_strdup(filename); +- gtk_widget_show(e->window); +- gdk_window_raise(gtk_widget_get_parent_window(GTK_WIDGET(e->window))); +- +- _load_file(e, g_strdup(filename)); +- return 1; +- } +- break; +- case NOTE_EDITOR: +- if (!e->noteeditor) +- break; +- if (editor_is_dirty(e)) +- _save_note(e); +- if (e->module) +- g_free(e->module); +- e->module = g_strdup(filename); +- if (e->key) +- g_free(e->key); +- e->key = g_strdup(key); +- gtk_widget_show(e->window); +- gdk_window_raise(gtk_widget_get_parent_window(GTK_WIDGET(e->window))); +- +- editor_load_note(e, NULL, NULL); +- +- return 1; +- break; +- case BOOK_EDITOR: +- if (!e->bookeditor) +- break; +- if (editor_is_dirty(e)) +- _save_book(e); +- if (e->module) +- g_free(e->module); +- e->module = g_strdup(filename); +- if (e->key) +- g_free(e->key); +- e->key = g_strdup(key); +- gtk_widget_show(e->window); +- gdk_window_raise(gtk_widget_get_parent_window(GTK_WIDGET(e->window))); +- main_load_book_tree_in_editor(GTK_TREE_VIEW(e->treeview), +- e->module); +- editor_load_book(e); +- +- return 1; +- break; +- } +- tmp = g_list_next(tmp); +- } +- XI_message(("filename %s, key %s", +- (filename ? filename : "-null-"), +- (key ? key : "-null-"))); +- return _create_new(filename, key, editor_type); ++ return 1; + } + + void editor_maybe_save_all(void) + { +- GList *tmp, *tmp2; +- +- tmp = g_list_first(editors_all); +- while (tmp != NULL) { +- /* 2ndary list chaser: +- elements will be removed by the saver. */ +- tmp2 = g_list_next(tmp); +- +- delete_event(NULL, NULL, (EDITOR *)tmp->data); +- tmp = tmp2; +- } + } + + #endif /* USE_WEBKIT_EDITOR */ diff --git a/xiphos.spec b/xiphos.spec index 52577b0..6521e78 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.2.1 -Release: 27%{?dist} +Release: 28%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later @@ -10,6 +10,7 @@ URL: http://xiphos.org/ Source0: https://github.com/crosswire/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Patch0: glib_version.patch Patch1: minizip.patch +Patch2: no_editor.patch BuildRequires: biblesync-devel >= 2.0.1-3 BuildRequires: cmake BuildRequires: desktop-file-utils @@ -19,7 +20,6 @@ BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: gtk3-devel -BuildRequires: gtkhtml3-devel BuildRequires: intltool BuildRequires: itstool BuildRequires: libappstream-glib @@ -51,6 +51,7 @@ Project and elsewhere. rm -rf src/biblesync %patch -P0 -p0 %patch -P1 -p1 +%patch -P2 -p1 %build export CFLAGS="$CFLAGS -fPIC" @@ -63,8 +64,7 @@ export CXXFLAGS export CFLAGS LDFLAGS='%{?__global_ldflags}' \ -%cmake -DGTKHTML:BOOL=ON \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ +%cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ %{nil} %cmake_build @@ -100,6 +100,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Wed Jan 29 2025 Aaron Rainbolt - 4.2.1-28 +- Strip out editor component to resolve FTBFS + * Sun Jan 19 2025 Fedora Release Engineering - 4.2.1-27 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From deb62dd07cc9a586640d51400f663551ed22daf9 Mon Sep 17 00:00:00 2001 From: Greg Hellings Date: Sun, 23 Mar 2025 05:47:10 +0000 Subject: [PATCH 15/23] Upstream release 4.3.1 --- .gitignore | 1 + glib_version.patch | 8 - minizip.patch | 13 - no_editor.patch | 1319 -------------------------------------------- sources | 2 +- xiphos.spec | 17 +- 6 files changed, 10 insertions(+), 1350 deletions(-) delete mode 100644 glib_version.patch delete mode 100644 minizip.patch delete mode 100644 no_editor.patch diff --git a/.gitignore b/.gitignore index 381b04e..1aceddc 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ xiphos-3.1.3.tar.gz /4.0.7.tar.gz /4.1.0.tar.gz /xiphos-4.2.1.tar.xz +/xiphos-4.3.1.tar.xz diff --git a/glib_version.patch b/glib_version.patch deleted file mode 100644 index 9a89b0d..0000000 --- a/glib_version.patch +++ /dev/null @@ -1,8 +0,0 @@ ---- cmake/config.h.cmake.in-orig 2021-04-15 19:28:57.468140150 +0300 -+++ cmake/config.h.cmake.in 2021-04-15 20:45:57.816551253 +0300 -@@ -65,3 +65,5 @@ - - - #endif -+ -+#define GLIB_VERSION_MIN_REQUIRED (GLIB_VERSION_2_26) diff --git a/minizip.patch b/minizip.patch deleted file mode 100644 index 8b947cd..0000000 --- a/minizip.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/gtk/utilities.c b/src/gtk/utilities.c -index 7dc1a49..708de8d 100644 ---- a/src/gtk/utilities.c -+++ b/src/gtk/utilities.c -@@ -38,7 +38,7 @@ - #include - - #include --#include -+#include - #include - - #include "gui/utilities.h" diff --git a/no_editor.patch b/no_editor.patch deleted file mode 100644 index 814a991..0000000 --- a/no_editor.patch +++ /dev/null @@ -1,1319 +0,0 @@ ---- a/src/editor/editor.c 2020-05-07 07:45:31.000000000 -0500 -+++ b/src/editor/editor.c 2025-01-29 17:01:46.046570661 -0600 -@@ -23,7 +23,7 @@ - #include - #endif - --#ifdef USE_WEBKIT_EDITOR -+#ifndef USE_WEBKIT_EDITOR - - /* X keyboard #definitions, to handle shortcuts */ - /* we must define the categories of #definitions we need. */ ---- a/src/editor/webkit_editor.c 2020-05-07 07:45:31.000000000 -0500 -+++ b/src/editor/webkit_editor.c 2025-01-29 17:01:04.402770869 -0600 -@@ -29,7 +29,6 @@ - #include - - #include --#include - - #include - #include -@@ -93,7 +92,6 @@ - on_about_dialog_response(GtkDialog *dialog, - gint response_id, gpointer user_data) - { -- gtk_widget_destroy(GTK_WIDGET(dialog)); - } - - /****************************************************************************** -@@ -115,39 +113,21 @@ - G_MODULE_EXPORT void - action_about_activate_cb(GtkWidget *widget, EDITOR *e) - { -- GtkWidget *about; -- GdkPixbuf *about_logo; -- -- about_logo = pixbuf_finder("xiphos-button-125.png", 0, NULL); -- about = gtk_about_dialog_new(); -- -- g_signal_connect(about, "response", -- G_CALLBACK(on_about_dialog_response), NULL); -- gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about), "WebKit editor, Xiphos"); -- gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about), (gchar *)VERSION); -- gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about), "Replacement for gtkhtml editor"); -- gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(about), about_logo); -- set_window_icon(GTK_WINDOW(about)); -- gtk_widget_show(about); - } - - G_MODULE_EXPORT void - action_increase_indent_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_execute_script("document.execCommand('Indent', false, false);", e); -- editor_insert_new_outline_level(e->toolitems.outline_level, e); - } - - G_MODULE_EXPORT void - action_decrease_indent_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_execute_script("document.execCommand('Outdent', false, false);", e); - } - - G_MODULE_EXPORT void - action_insert_rule_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_insert_html("
", e); - } - - G_MODULE_EXPORT void -@@ -158,141 +138,80 @@ - G_MODULE_EXPORT void - action_insert_emoticon_activate_cb(GtkWidget *widget, EDITOR *e) - { -- // This is stupid, if we don't have emoticons working, then we sould -- // remove the button users see. -- -- //script = g_strdup ("document.execCommand('', null, \"\");"); - } - - G_MODULE_EXPORT void - action_insert_image_activate_cb(GtkWidget *widget, EDITOR *e) - { -- gchar *filename = NULL; -- -- GtkWidget *dialog = gtk_file_chooser_dialog_new("Select an image file", -- NULL, -- GTK_FILE_CHOOSER_ACTION_OPEN, --#if GTK_CHECK_VERSION(3, 10, 0) -- "_Cancel", GTK_RESPONSE_CANCEL, -- "_OK", GTK_RESPONSE_ACCEPT, --#else -- GTK_STOCK_CANCEL, -- GTK_RESPONSE_CANCEL, -- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, --#endif -- NULL); -- -- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { -- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); -- gchar *script = g_strdup_printf("document.execCommand('insertImage', null, '%s');", filename); -- editor_execute_script(script, e); -- g_free(script); -- } -- -- if (filename) -- g_free(filename); -- gtk_widget_destroy(dialog); - } - - G_MODULE_EXPORT void - action_insert_outline_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_execute_script("document.execCommand('insertHTML', null, \"
\");", e); - } - - G_MODULE_EXPORT void - action_justify_right_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_execute_script("document.execCommand('justifyright', false, false);", e); - } - - G_MODULE_EXPORT void - action_justify_left_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_execute_script("document.execCommand('justifyleft', false, false);", e); - } - - G_MODULE_EXPORT void - action_justify_center_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_execute_script("document.execCommand('justifycenter', false, false);", e); - } - - G_MODULE_EXPORT void - action_justify_full_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_execute_script("document.execCommand('justifyfull', false, false);", e); - } - - G_MODULE_EXPORT void - action_bold_activate_cb(GtkWidget *widget, EDITOR *e) - { -- if (buttons_state.nochange) -- return; -- -- editor_execute_script("document.execCommand('bold',false,false);", e); - } - - G_MODULE_EXPORT void - action_italic_activate_cb(GtkWidget *widget, EDITOR *e) - { -- //extern BUTTONS_STATE buttons_state; -- if (buttons_state.nochange) -- return; -- -- editor_execute_script("document.execCommand('italic',false,false);", e); - } - - G_MODULE_EXPORT void - action_undo_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_execute_script("document.execCommand('undo',false,false);", e); - } - - G_MODULE_EXPORT void - action_redo_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_execute_script("document.execCommand('redo',false,false);", e); - } - - G_MODULE_EXPORT void - action_underline_activate_cb(GtkWidget *widget, EDITOR *e) - { -- //extern BUTTONS_STATE buttons_state; -- if (buttons_state.nochange) -- return; -- -- editor_execute_script("document.execCommand('underline', false, false);", e); - } - - G_MODULE_EXPORT void - action_strikethrough_activate_cb(GtkWidget *widget, EDITOR *e) - { -- //extern BUTTONS_STATE buttons_state; -- if (buttons_state.nochange) -- return; -- -- editor_execute_script("document.execCommand('strikethrough', false, false);", e); - } - - G_MODULE_EXPORT void action_cut_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_cut(e); - } - - G_MODULE_EXPORT void - action_copy_activate_cb(GtkWidget *widget, EDITOR *e) - { -- if (editor_copy(e)) -- XI_message(("%s", "copy success")); -- else -- XI_message(("%s", "copy failed")); - } - - G_MODULE_EXPORT void - action_paste_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_paste(e); - } - - G_MODULE_EXPORT void -@@ -303,737 +222,92 @@ - G_MODULE_EXPORT void - action_delete_item_activate_cb(GtkWidget *widget, EDITOR *e) - { -- if (e->studypad) -- return; -- -- gchar *buf = -- g_strdup_printf("%s %s?", -- _("Are you sure you want to delete the note for"), e->key); -- -- if (gui_yes_no_dialog(buf, --#if GTK_CHECK_VERSION(3, 10, 0) -- "dialog-warning" --#else -- GTK_STOCK_DIALOG_WARNING --#endif -- )) { -- -- main_delete_note(e->module, e->key); -- -- /* new empty document from template */ -- gchar *fname = g_build_filename(settings.gSwordDir, "studypad.spt", NULL); -- XI_message(("action delete item [%s]", fname)); -- gchar *text = inhale_text_from_file(fname); -- g_free(fname); -- -- if (text && strlen(text)) { -- webkit_web_view_load_string((WebKitWebView *) -- e->html_widget, -- text, -- "application/xhtml+xml", "utf_8", -- "file://"); -- } -- if (text) -- g_free(text); -- } -- -- g_free(buf); -- e->is_changed = FALSE; - } - - void set_button_state(BUTTONS_STATE state, EDITOR *e) - { --#if GTK_CHECK_VERSION(3, 4, 0) -- GdkRGBA rgba; --#else -- GdkColor color; --#endif -- gtk_toggle_tool_button_set_active(e->toolitems.bold, state.bold); -- gtk_toggle_tool_button_set_active(e->toolitems.italic, state.italic); -- gtk_toggle_tool_button_set_active(e->toolitems.underline, state.underline); -- gtk_toggle_tool_button_set_active(e->toolitems.strike, state.strike); -- gtk_combo_box_set_active((GtkComboBox *)e->toolitems.cb, state.style); -- -- if (state.color) { -- XI_message(("state.color: %s", state.color)); --#if GTK_CHECK_VERSION(3, 4, 0) -- if (gdk_rgba_parse(&rgba, state.color)) -- gtk_color_chooser_set_rgba((GtkColorChooser *) -- e->toolitems.color, -- &rgba); --#else -- if (gdk_color_parse(state.color, &color)) -- gtk_color_button_set_color((GtkColorButton *) -- e->toolitems.color, -- &color); --#endif -- } - } - - G_MODULE_EXPORT void - colorbutton1_color_set_cb(GtkColorButton *widget, EDITOR *e) - { --#if GTK_CHECK_VERSION(3, 4, 0) -- GdkRGBA color; --#else -- GdkColor color; --#endif -- gchar *color_str; -- gchar *forecolor = NULL; -- --#if GTK_CHECK_VERSION(3, 4, 0) -- gtk_color_chooser_get_rgba((GtkColorChooser *)widget, &color); -- color_str = gdk_rgba_to_string(&color); --#else -- gtk_color_button_get_color((GtkColorButton *)widget, &color); -- /* FIXME: ugly need something better */ -- color_str = g_strdup_printf("rgb(%u,%u,%u)", color.red >> 8, color.green >> 8, color.blue >> 8); --#endif -- forecolor = g_strdup_printf("document.execCommand('forecolor', null, '%s');", color_str); -- editor_execute_script(forecolor, e); -- g_free(forecolor); -- g_free(color_str); - } - - G_MODULE_EXPORT void - colorbutton_highlight_color_set_cb(GtkColorButton *widget, EDITOR *e) - { -- --#if GTK_CHECK_VERSION(3, 4, 0) -- GdkRGBA color; --#else -- GdkColor color; --#endif -- gchar *color_str; -- gchar *highlightcolor = NULL; -- --#if GTK_CHECK_VERSION(3, 4, 0) -- gtk_color_chooser_get_rgba((GtkColorChooser *)widget, &color); -- color_str = gdk_rgba_to_string(&color); --#else -- gtk_color_button_get_color((GtkColorButton *)widget, &color); -- /* FIXME: ugly need something better */ -- color_str = g_strdup_printf("rgb(%u,%u,%u)", color.red >> 8, color.green >> 8, color.blue >> 8); --#endif -- highlightcolor = g_strdup_printf("document.execCommand('backColor', null, '%s');", color_str); -- editor_execute_script(highlightcolor, e); -- g_free(highlightcolor); -- g_free(color_str); --} -- --static gchar *get_font_size_from_name(GString *fontname) --{ -- gchar buf[80]; -- gint len, i = 0, j = 0; -- -- len = fontname->len; -- XI_message(("\nlength: %d\n", len)); -- for (i = 0; (i < 79 && i < len); i++) { -- if (isdigit(fontname->str[i])) { -- XI_message(("\n\nfontname->str[i]: %c", -- fontname->str[i])); -- buf[j] = fontname->str[i]; -- buf[j + 1] = '\0'; -- j++; -- } -- } -- return g_strdup(buf); --} -- --G_MODULE_EXPORT void --action_font_activate_cb(GtkWidget *widget, EDITOR *e) --{ -- GtkWidget *dialog; -- gchar *selected_text = NULL; -- gchar *size = NULL; --#if GTK_CHECK_VERSION(3, 2, 0) -- dialog = gtk_font_chooser_dialog_new("Select font", NULL); -- gtk_font_chooser_set_font((GtkFontChooser *)dialog, --#else -- dialog = gtk_font_selection_dialog_new("Select font"); -- gtk_font_selection_dialog_set_font_name((GtkFontSelectionDialog *) -- dialog, --#endif -- "Droid Sans 14"); -- -- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { --#if GTK_CHECK_VERSION(3, 2, 0) -- const gchar *fontname = gtk_font_chooser_get_font((GtkFontChooser *)dialog); --#else -- const gchar *fontname = gtk_font_selection_dialog_get_font_name((GtkFontSelectionDialog *)dialog); --#endif -- GString *name = g_string_new(fontname); -- size = get_font_size_from_name(name); -- g_string_free(name, TRUE); -- -- selected_text = editor_get_selected_text(e); --#if GTK_CHECK_VERSION(3, 2, 0) -- PangoFontDescription *font_description = -- gtk_font_chooser_get_font_desc((GtkFontChooser *) -- dialog); -- fontname = pango_font_description_get_family(font_description); --#else -- PangoFontDescription *font_description = -- pango_font_description_from_string(fontname); -- fontname = pango_font_description_get_family(font_description); --#endif -- -- gchar *script = g_strdup_printf("%s", -- fontname, size, selected_text); -- -- editor_insert_html(script, e); -- g_free(script); -- } -- if (size) -- g_free(size); -- if (selected_text) -- g_free(selected_text); -- gtk_widget_destroy(dialog); - } - - G_MODULE_EXPORT void - find_replace_response_cb(GtkDialog *dialog, gint response_id, EDITOR *e) - { -- switch (response_id) { -- case GTK_RESPONSE_CANCEL: -- gtk_widget_hide(find_dialog.window); -- break; -- case 1: -- editor_find_string((gchar *) -- gtk_entry_get_text(GTK_ENTRY(find_dialog.find_entry)), -- e); -- break; -- case 2: -- editor_replace_string((gchar *) -- gtk_entry_get_text(GTK_ENTRY(find_dialog.find_entry)), -- (gchar *) -- gtk_entry_get_text(GTK_ENTRY(find_dialog.replace_entry)), -- e); -- break; -- default: -- gtk_widget_hide(find_dialog.window); -- break; -- } - } - - G_MODULE_EXPORT void - action_find_activate_cb(GtkWidget *widget, EDITOR *e) - { -- gtk_widget_show(find_dialog.window); -- gtk_widget_hide(find_dialog.box_replace); -- gtk_widget_hide(find_dialog.button_replace); - } - - G_MODULE_EXPORT void - action_replace_activate_cb(GtkWidget *widget, EDITOR *e) - { -- gtk_widget_show(find_dialog.window); -- gtk_widget_show(find_dialog.box_replace); -- gtk_widget_show(find_dialog.button_replace); --} -- --static void handle_error(GError **error) --{ -- if (*error != NULL) { -- g_warning("%s", (*error)->message); -- g_clear_error(error); -- } --} -- --static void do_exit(EDITOR *e) --{ -- if (e->filename) { -- g_free(e->filename); -- } -- if (e->module) { -- g_free(e->module); -- } -- if (e->key) { -- g_free(e->key); -- } -- if (e->window) -- gtk_widget_destroy(e->window); -- g_free(e); --} -- --static void recent_item_cb(GtkRecentChooser *chooser, EDITOR *e) --{ -- gchar *file_uri = gtk_recent_chooser_get_current_uri(chooser); -- -- XI_message(("file_uri: %s", file_uri)); -- if (e->filename) -- g_free(e->filename); -- e->filename = g_strdup(file_uri); -- -- //editor_open_recent (file_uri, e); -- _load_file(e, file_uri); -- xml_set_value("Xiphos", "studypad", "lastfile", e->filename); -- settings.studypadfilename = xml_get_value("studypad", "lastfile"); -- -- change_window_title(e->window, e->filename); --} -- --static void change_window_title(GtkWidget *window, const gchar *window_title) --{ -- gtk_window_set_title(GTK_WINDOW(window), window_title); --} -- --static GtkPrintOperationResult --print(WebKitWebView *html, GtkPrintOperationAction action) --{ -- GtkPrintOperation *operation; -- GtkPrintOperationResult result; -- GError *error = NULL; -- WebKitWebFrame *frame; -- -- frame = webkit_web_view_get_main_frame(html); -- operation = gtk_print_operation_new(); -- -- result = webkit_web_frame_print_full(frame, operation, action, &error); -- -- g_object_unref(operation); -- handle_error(&error); -- -- return result; --} -- --static gint open_dialog(EDITOR *e) --{ -- GtkWidget *dialog; -- gint response; -- -- dialog = gtk_file_chooser_dialog_new(_("Open"), GTK_WINDOW(e->window), -- GTK_FILE_CHOOSER_ACTION_OPEN, --#if GTK_CHECK_VERSION(3, 10, 0) -- "_Cancel", GTK_RESPONSE_CANCEL, -- "_Open", GTK_RESPONSE_ACCEPT, --#else -- GTK_STOCK_CANCEL, -- GTK_RESPONSE_CANCEL, -- GTK_STOCK_OPEN, -- GTK_RESPONSE_ACCEPT, --#endif -- NULL); -- -- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), settings.studypaddir); -- -- response = gtk_dialog_run(GTK_DIALOG(dialog)); -- -- if (response == GTK_RESPONSE_ACCEPT) { -- gchar *new_filename; -- -- new_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); -- _load_file(e, new_filename); -- g_free(new_filename); -- } -- -- gtk_widget_destroy(dialog); -- -- return response; - } - - G_MODULE_EXPORT void action_print_cb(GtkAction *action, EDITOR *e) - { -- print(WEBKIT_WEB_VIEW(e->html_widget), -- GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG); - } - - G_MODULE_EXPORT void action_print_preview_cb(GtkAction *action, EDITOR *e) - { -- print(WEBKIT_WEB_VIEW(e->html_widget), -- GTK_PRINT_OPERATION_ACTION_PREVIEW); - } - - G_MODULE_EXPORT void action_quit_activate_cb(GtkWidget *widget, EDITOR *e) - { -- delete_event(NULL, NULL, e); - } - - G_MODULE_EXPORT void action_open_activate_cb(GtkWidget *widget, EDITOR *e) - { -- open_dialog(e); - } - - G_MODULE_EXPORT void action_save_activate_cb(GtkWidget *widget, EDITOR *e) - { -- switch (e->type) { -- case STUDYPAD_EDITOR: -- _save_file(e); -- break; -- case NOTE_EDITOR: -- _save_note(e); -- break; -- case BOOK_EDITOR: -- _save_book(e); -- break; -- default: -- XI_message(("\naction_save_cb oops!\n")); -- break; -- } - } - - G_MODULE_EXPORT void action_new_activate_cb(GtkWidget *widget, EDITOR *e) - { /* for studypad only */ -- gchar *filename = NULL; -- -- if (e->is_changed) -- ask_about_saving(e); -- -- filename = g_strdup_printf("%s/%s", settings.gSwordDir, "studypad.spt"); -- -- _load_file(e, filename); -- -- if (e->filename) -- g_free(e->filename); -- e->filename = g_strdup(_("Untitled document")); -- -- xml_set_value("Xiphos", "studypad", "lastfile", e->filename); -- settings.studypadfilename = xml_get_value("studypad", "lastfile"); -- change_window_title(e->window, e->filename); -- e->is_changed = TRUE; - } - - G_MODULE_EXPORT void - action_insert_sword_link_activate_cb(GtkWidget *widget, gpointer data) - { -- editor_link_dialog(data); //editor_insert_sword_link(); - } - - G_MODULE_EXPORT void - action_insert_link_activate_cb(GtkWidget *widget, EDITOR *e) - { -- editor_link_dialog(e); - } - - G_MODULE_EXPORT void - action_save_as_activate_cb(GtkWidget *widget, EDITOR *e) - { -- if (e->filename) -- g_free(e->filename); -- e->filename = NULL; -- _save_file(e); - } - - G_MODULE_EXPORT void combo_box_changed_cb(GtkComboBox *widget, EDITOR *e) - { -- gchar *script = NULL; -- gint choice = gtk_combo_box_get_active(widget); -- /* we need the line of text where the cursor is */ -- //extern BUTTONS_STATE buttons_state; -- -- if (buttons_state.nochange) -- return; -- -- switch (choice) { -- case 0: /* Normal */ -- script = "document.execCommand('formatBlock', false, \"div\");"; -- break; -- -- case 1: /* H1 */ -- script = "document.execCommand('formatBlock', null, \"H1\");"; -- break; -- -- case 2: /* H2 */ -- script = "document.execCommand('formatBlock', null, \"H2\");"; -- break; -- -- case 3: /* H3 */ -- script = "document.execCommand('formatBlock', null, \"H3\");"; -- break; -- -- case 4: /* H4 */ -- script = "document.execCommand('formatBlock', null, \"H4\");"; -- break; -- -- case 5: /* H5 */ -- script = "document.execCommand('formatBlock', null, \"H5\");"; -- break; -- -- case 6: /* H6 */ -- script = "document.execCommand('formatBlock', null, \"H6\");"; -- break; -- -- case 7: /* Address */ -- script = "document.execCommand('formatBlock', null, \"ADDRESS\");"; -- break; -- -- case 8: /* Preformatted */ -- script = "document.execCommand('formatBlock', null, \"PRE\");"; -- break; -- -- case 9: /* Bulleted List insertUnorderedList */ -- script = "document.execCommand('insertUnorderedList', null, \"\");"; -- break; -- -- case 10: /* Roman Numeral List */ -- script = "document.execCommand('insertHTML', null, \"
\");"; -- break; -- -- case 11: /* Numbered List insertOrderedList */ -- script = "document.execCommand('insertOrderedList', null, \"\");"; -- break; -- -- case 12: /* Alphabetical List */ -- script = "document.execCommand('insertHTML', null, \"
\");"; -- break; -- -- default: -- break; -- } -- -- if (script) { -- XI_message(("%s", script)); -- editor_execute_script(script, e); -- } --} -- --/* need note toolbars when type is note */ --static GtkWidget *editor_new(const gchar *title, EDITOR *e) --{ -- GtkWidget *window; -- GtkWidget *scrollwindow; -- GtkWidget *statusbar; -- GtkBuilder *builder; -- gchar *gbuilder_file; -- GError *error = NULL; -- GtkMenuItem *item; -- GtkWidget *recent_item; -- -- buttons_state.nochange = 1; -- -- gbuilder_file = gui_general_user_file( --#ifdef USE_GTK_3 -- "gtk_webedit.ui" --#else -- "gtk2_webedit.ui" --#endif -- , -- FALSE); -- builder = gtk_builder_new(); -- -- if (!gtk_builder_add_from_file(builder, gbuilder_file, &error)) { -- g_warning("Couldn't load builder file: %s", -- error->message); -- g_error_free(error); -- } -- -- window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); -- e->window = window; -- gtk_window_set_title(GTK_WINDOW(window), title); -- -- statusbar = GTK_WIDGET(gtk_builder_get_object(builder, "statusbar1")); -- gtk_widget_hide(statusbar); -- -- e->toolitems.outline_level = 0; -- e->toolitems.bold = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_bold")); -- e->toolitems.italic = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_italic")); -- e->toolitems.underline = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbuttonunderline")); -- e->toolitems.strike = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_strikethrough")); -- e->toolitems.open = GTK_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_open")); -- e->toolitems.newdoc = GTK_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_new")); -- e->toolitems.deletedoc = GTK_TOOL_BUTTON(gtk_builder_get_object(builder, "toolbutton_delete")); -- e->toolitems.color = GTK_COLOR_BUTTON(gtk_builder_get_object(builder, "colorbutton1")); -- e->toolitems.cb = GTK_COMBO_BOX_TEXT(gtk_builder_get_object(builder, "comboboxtext1")); -- -- gtk_combo_box_set_active((GtkComboBox *)e->toolitems.cb, 0); -- -- item = GTK_MENU_ITEM(gtk_builder_get_object(builder, "menuitem_recent")); -- -- switch (e->type) { -- case STUDYPAD_EDITOR: -- gtk_widget_hide(GTK_WIDGET(e->toolitems.deletedoc)); -- -- recent_item = gtk_recent_chooser_menu_new(); -- g_signal_connect(G_OBJECT(recent_item), "item-activated", -- G_CALLBACK(recent_item_cb), e); -- gtk_menu_item_set_submenu(item, recent_item); -- break; -- case NOTE_EDITOR: -- gtk_widget_hide(GTK_WIDGET(e->toolitems.open)); -- gtk_widget_hide(GTK_WIDGET(e->toolitems.newdoc)); -- gtk_widget_hide(GTK_WIDGET(item)); -- break; -- case BOOK_EDITOR: -- gtk_widget_hide(GTK_WIDGET(e->toolitems.open)); -- gtk_widget_hide(GTK_WIDGET(e->toolitems.newdoc)); -- gtk_widget_hide(GTK_WIDGET(item)); -- break; -- } -- -- e->navbar_box = GTK_WIDGET(gtk_builder_get_object(builder, "box_navbar")); -- e->box = GTK_WIDGET(gtk_builder_get_object(builder, "vbox1")); -- -- scrollwindow = GTK_WIDGET(gtk_builder_get_object(builder, "scrolledwindow1")); -- create_editor_window(scrollwindow, e); -- e->is_changed = FALSE; -- -- /* This is important */ -- gtk_builder_connect_signals(builder, (EDITOR *)e); -- -- find_dialog.window = GTK_WIDGET(gtk_builder_get_object(builder, "dialog_find_replace")); -- find_dialog.find_entry = GTK_WIDGET(gtk_builder_get_object(builder, "entry1")); -- find_dialog.replace_entry = GTK_WIDGET(gtk_builder_get_object(builder, "entry2")); -- find_dialog.box_replace = GTK_WIDGET(gtk_builder_get_object(builder, "box4")); -- find_dialog.button_replace = GTK_WIDGET(gtk_builder_get_object(builder, "button_replace")); -- -- g_object_unref(builder); -- -- return window; --} -- --static void _save_note(EDITOR *e) --{ -- GString *data = g_string_new(""); -- -- editor_get_document_content(data, e); -- main_save_note(e->module, e->key, data->str); -- e->is_changed = FALSE; -- g_string_free(data, TRUE); --} -- --static void _save_book(EDITOR *e) --{ -- GString *data = g_string_new(""); -- -- editor_get_document_content(data, e); -- main_treekey_save_book_text(e->module, e->key, data->str); -- e->is_changed = FALSE; -- g_string_free(data, TRUE); --} -- --static void _save_file(EDITOR *e) --{ -- GtkRecentManager *rm = NULL; -- GString *data = g_string_new(""); -- -- editor_get_document_content(data, e); -- XI_message(("%s", data->str)); -- -- if (!e->filename || (0 == g_strcmp0("Untitled document", e->filename)) || g_strrstr(e->filename, ".spt")) { -- GtkWidget *dialog = gtk_file_chooser_dialog_new("Save as", //const gchar *title, -- NULL, //GtkWindow *parent, -- GTK_FILE_CHOOSER_ACTION_SAVE, //GtkFileChooserAction action, --#if GTK_CHECK_VERSION(3, 10, 0) -- "_OK", -- GTK_RESPONSE_OK, -- "_Cancel", -- GTK_RESPONSE_CANCEL, --#else -- GTK_STOCK_OK, -- GTK_RESPONSE_OK, -- GTK_STOCK_CANCEL, -- GTK_RESPONSE_CANCEL, --#endif -- NULL); -- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); -- -- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), -- settings.studypaddir); -- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { -- gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); -- e->filename = g_strdup(filename); -- GFile *gfile = g_file_parse_name(filename); -- g_file_replace_contents(gfile, data->str, data->len, NULL, TRUE, G_FILE_CREATE_NONE, NULL, NULL, NULL); //GError **error -- } -- change_window_title(e->window, e->filename); -- gtk_widget_destroy(dialog); -- -- } else { -- -- GFile *gfile = g_file_parse_name(e->filename); -- g_file_replace_contents(gfile, data->str, data->len, NULL, TRUE, G_FILE_CREATE_NONE, NULL, NULL, NULL); //GError **error -- } -- -- rm = gtk_recent_manager_get_default(); -- gtk_recent_manager_add_item(rm, e->filename); -- -- e->is_changed = FALSE; -- g_string_free(data, TRUE); --} -- --static void _load_file(EDITOR *e, const gchar *filename) --{ -- char *text = NULL; -- GtkRecentManager *rm = NULL; -- -- rm = gtk_recent_manager_get_default(); -- gtk_recent_manager_add_item(rm, filename); -- -- if (e->filename) -- g_free(e->filename); -- e->filename = g_strdup(filename); -- -- XI_message(("_load_file filename: %s", filename)); -- -- xml_set_value("Xiphos", "studypad", "lastfile", e->filename); -- settings.studypadfilename = xml_get_value("studypad", "lastfile"); -- -- change_window_title(e->window, e->filename); -- text = inhale_text_from_file(!strncmp(filename, "file:", 5) -- ? filename + 5 -- : filename); -- -- XI_message(("web view load string [%s]", text)); -- webkit_web_view_load_string(WEBKIT_WEB_VIEW(e->html_widget), -- text, "application/xhtml+xml", "utf_8", "file://"); -- -- g_free(text); -- e->is_changed = FALSE; - } - - gboolean editor_is_dirty(EDITOR *e) - { -- return e->is_changed; -+ return FALSE; - } - - void editor_save_book(EDITOR *e) - { -- if (editor_is_dirty(e)) -- _save_book(e); - } - - /* save if needed is done in treeky-editor.c before calling editor_load_book() */ - void editor_load_book(EDITOR *e) - { -- gchar *title = NULL, *text = NULL; -- -- if (!g_ascii_isdigit(e->key[0])) -- return; /* make sure is a number (offset) */ -- -- XI_message(("book: %s\noffset :%s", e->module, e->key)); -- -- if (atol(e->key) != 0) -- text = main_get_book_raw_text(e->module, e->key); -- else -- text = g_strdup(e->module); -- -- if ((text == NULL) || strlen(text) == 0) { -- if (text) -- g_free(text); -- -- /* new empty document from template */ -- gchar *fname = g_build_filename(settings.gSwordDir, "studypad.spt", NULL); -- XI_message(("editor load BOOK [%s]", fname)); -- text = inhale_text_from_file(fname); -- g_free(fname); -- } -- -- if (text && strlen(text)) { -- webkit_web_view_load_string((WebKitWebView *) -- e->html_widget, -- text, -- "application/xhtml+xml", "utf_8", -- "file://"); -- } -- -- if (text) -- g_free(text); -- -- title = g_strdup_printf("%s", e->module); -- change_window_title(e->window, title); -- g_free(title); -- -- e->is_changed = FALSE; - } - - /****************************************************************************** -@@ -1054,281 +328,19 @@ - - void editor_sync_with_main(void) - { -- GList *tmp = NULL; -- -- tmp = g_list_first(editors_all); -- while (tmp != NULL) { -- EDITOR *e = (EDITOR *)tmp->data; -- -- switch (e->type) { -- case STUDYPAD_EDITOR: -- case BOOK_EDITOR: -- break; -- case NOTE_EDITOR: -- if (e->sync) -- editor_load_note(e, NULL, -- settings.currentverse); -- break; -- } -- tmp = g_list_next(tmp); -- } - } - - void - editor_load_note(EDITOR *e, const gchar *module_name, const gchar *key) - { -- gchar *title = NULL, *text = NULL; -- -- if (e->is_changed) -- _save_note(e); -- -- if (module_name) { -- if (e->module) -- g_free(e->module); -- e->module = g_strdup(module_name); -- } -- if (key) { -- if (e->key) -- g_free(e->key); -- e->key = g_strdup(key); -- } -- -- text = main_get_raw_text((gchar *)e->module, (gchar *)e->key); -- -- if ((text == NULL) || strlen(text) == 0) { -- if (text) -- g_free(text); -- -- /* new empty document from template */ -- gchar *fname = g_build_filename(settings.gSwordDir, "studypad.spt", NULL); -- XI_message(("editor load NOTE [%s]", fname)); -- text = inhale_text_from_file(fname); -- g_free(fname); -- } -- -- if (text && strlen(text)) { -- webkit_web_view_load_string((WebKitWebView *) -- e->html_widget, -- text, -- "application/xhtml+xml", "utf_8", -- "file://"); -- } -- -- e->is_changed = FALSE; -- if (e->type == NOTE_EDITOR) { -- e->navbar.valid_key = TRUE; -- main_navbar_versekey_set(e->navbar, e->key); -- } -- -- if (text) -- g_free(text); -- -- title = g_strdup_printf("%s - %s", e->module, e->key); -- change_window_title(e->window, title); -- g_free(title); - } - - G_MODULE_EXPORT int - delete_event(GtkWidget *widget, GdkEvent *event, EDITOR *e) - { -- if (e->is_changed) { -- switch (ask_about_saving(e)) { -- case GS_YES: /* exit saving */ -- break; -- -- case GS_NO: /* exit without saving */ -- break; -- -- case GS_CANCEL: -- return TRUE; -- } -- } -- editors_all = g_list_remove(editors_all, e); -- do_exit(e); - return FALSE; - } - --gint ask_about_saving(EDITOR *e) --{ -- gint test; -- GS_DIALOG *info; -- gchar *buf = NULL; -- gchar *buf1 = NULL; -- gchar *buf2 = NULL; -- gchar *buf3 = NULL; -- gint retval = FALSE; -- -- switch (e->type) { -- case BOOK_EDITOR: -- case NOTE_EDITOR: -- info = gui_new_dialog(); -- info->stock_icon = --#if GTK_CHECK_VERSION(3, 10, 0) -- "dialog-warning"; --#else -- GTK_STOCK_DIALOG_WARNING; --#endif -- -- buf = g_strdup_printf("%s: %s", e->module, e->key); -- buf1 = _("Save the changes to document"); -- buf2 = _("before closing?"); -- buf3 = g_strdup_printf("%s %s %s", -- buf1, buf, buf2); -- info->label_top = buf3; -- info->label2 = _("If you don't save, changes will be permanently lost."); -- info->save = TRUE; -- info->cancel = TRUE; -- info->no_save = TRUE; -- -- test = gui_alert_dialog(info); -- retval = test; -- -- if (test == GS_YES) { -- if (e->type == NOTE_EDITOR) { -- /* save notes and prayer lists */ -- _save_note(e); -- -- } else { -- /* save notes and prayer lists */ -- _save_book(e); -- } -- } -- g_free(info); -- g_free(buf); -- g_free(buf3); -- break; -- -- case STUDYPAD_EDITOR: -- info = gui_new_dialog(); -- info->stock_icon = --#if GTK_CHECK_VERSION(3, 10, 0) -- "dialog-warning"; --#else -- GTK_STOCK_DIALOG_WARNING; --#endif -- if (settings.studypadfilename) -- buf = settings.studypadfilename; -- else -- buf = N_("File"); -- buf1 = _("Save the changes to document"); -- buf2 = _("before closing?"); -- buf3 = g_strdup_printf("%s %s %s", -- buf1, buf, buf2); -- info->label_top = buf3; -- info->label2 = _("If you don't save, changes will be permanently lost."); -- info->save = TRUE; -- info->cancel = TRUE; -- info->no_save = TRUE; -- -- test = gui_alert_dialog(info); -- retval = test; -- if (test == GS_YES) { -- _save_file(e); -- } -- g_free(info); -- g_free(buf3); -- break; -- } -- sync_windows(); -- return retval; --} -- --static gint _create_new(const gchar *filename, const gchar *key, -- gint editor_type) --{ -- EDITOR *editor; -- GtkWidget *toolbar_nav = NULL; -- -- editor = g_new(EDITOR, 1); -- editor->html_widget = NULL; -- editor->sync = FALSE; -- editor->type = editor_type; -- -- switch (editor_type) { -- case STUDYPAD_EDITOR: -- editor->studypad = TRUE; -- editor->bookeditor = FALSE; -- editor->noteeditor = FALSE; -- editor->module = NULL; -- editor->key = NULL; -- editor->filename = NULL; -- widgets.studypad_dialog = editor_new(_("StudyPad"), editor); -- -- if (filename) { -- editor->filename = g_strdup(filename); -- _load_file(editor, g_strdup(filename)); -- } -- break; -- case NOTE_EDITOR: -- editor->noteeditor = TRUE; -- editor->bookeditor = FALSE; -- editor->studypad = FALSE; -- editor->filename = NULL; -- editor->module = g_strdup(filename); -- editor->key = g_strdup(key); -- editor->navbar.key = NULL; -- editor_new(_("Note Editor"), editor); -- -- toolbar_nav = gui_navbar_versekey_editor_new(editor); -- gtk_widget_show(toolbar_nav); -- gtk_box_pack_start(GTK_BOX(editor->navbar_box), -- GTK_WIDGET(toolbar_nav), FALSE, TRUE, -- 0); -- -- editor_load_note(editor, NULL, NULL); -- break; -- case BOOK_EDITOR: -- editor->bookeditor = TRUE; -- editor->noteeditor = FALSE; -- editor->studypad = FALSE; -- editor->filename = NULL; -- editor->module = g_strdup(filename); -- editor->key = g_strdup(key); -- editor_new(_("Prayer List/Journal Editor"), editor); -- -- GtkWidget *box; -- UI_VBOX(box, FALSE, 0); -- gtk_widget_show(box); -- GtkWidget *hpaned1 = UI_HPANE(); -- gtk_widget_show(hpaned1); -- gtk_paned_pack2(GTK_PANED(hpaned1), box, TRUE, TRUE); -- -- GtkWidget *scrollbar = gtk_scrolled_window_new(NULL, NULL); -- gtk_widget_show(scrollbar); -- gtk_paned_pack1(GTK_PANED(hpaned1), GTK_WIDGET(scrollbar), -- TRUE, TRUE); -- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbar), -- GTK_POLICY_AUTOMATIC, -- GTK_POLICY_AUTOMATIC); -- gtk_scrolled_window_set_shadow_type((GtkScrolledWindow *) -- scrollbar, -- settings.shadow_type); -- -- editor->treeview = gui_create_editor_tree(editor); -- gtk_widget_show(editor->treeview); -- gtk_container_add(GTK_CONTAINER(scrollbar), -- editor->treeview); -- gtk_paned_set_position(GTK_PANED(hpaned1), 125); -- gtk_tree_view_expand_all((GtkTreeView *)editor->treeview); --// then we should expand on the item to which we've opened for edit. -- --#if GTK_CHECK_VERSION(3, 10, 0) -- gtk_container_add(GTK_CONTAINER(box), editor->box); --#else -- gtk_widget_reparent(editor->box, box); --#endif -- -- gtk_container_add(GTK_CONTAINER(editor->window), hpaned1); -- -- editor_load_book(editor); -- -- break; -- } -- editor->is_changed = FALSE; -- editors_all = g_list_append(editors_all, (EDITOR *)editor); -- return 1; --} -- - /****************************************************************************** - * Name - * editor_create_new -@@ -1348,85 +360,11 @@ - gint editor_create_new(const gchar *filename, const gchar *key, - gint editor_type) - { -- GList *tmp = NULL; -- -- tmp = g_list_first(editors_all); -- while (tmp != NULL) { -- EDITOR *e = (EDITOR *)tmp->data; -- switch (editor_type) { -- case STUDYPAD_EDITOR: -- if (e->studypad) { -- if (editor_is_dirty(e)) -- _save_file(e); -- if (e->filename) -- g_free(e->filename); -- e->filename = g_strdup(filename); -- gtk_widget_show(e->window); -- gdk_window_raise(gtk_widget_get_parent_window(GTK_WIDGET(e->window))); -- -- _load_file(e, g_strdup(filename)); -- return 1; -- } -- break; -- case NOTE_EDITOR: -- if (!e->noteeditor) -- break; -- if (editor_is_dirty(e)) -- _save_note(e); -- if (e->module) -- g_free(e->module); -- e->module = g_strdup(filename); -- if (e->key) -- g_free(e->key); -- e->key = g_strdup(key); -- gtk_widget_show(e->window); -- gdk_window_raise(gtk_widget_get_parent_window(GTK_WIDGET(e->window))); -- -- editor_load_note(e, NULL, NULL); -- -- return 1; -- break; -- case BOOK_EDITOR: -- if (!e->bookeditor) -- break; -- if (editor_is_dirty(e)) -- _save_book(e); -- if (e->module) -- g_free(e->module); -- e->module = g_strdup(filename); -- if (e->key) -- g_free(e->key); -- e->key = g_strdup(key); -- gtk_widget_show(e->window); -- gdk_window_raise(gtk_widget_get_parent_window(GTK_WIDGET(e->window))); -- main_load_book_tree_in_editor(GTK_TREE_VIEW(e->treeview), -- e->module); -- editor_load_book(e); -- -- return 1; -- break; -- } -- tmp = g_list_next(tmp); -- } -- XI_message(("filename %s, key %s", -- (filename ? filename : "-null-"), -- (key ? key : "-null-"))); -- return _create_new(filename, key, editor_type); -+ return 1; - } - - void editor_maybe_save_all(void) - { -- GList *tmp, *tmp2; -- -- tmp = g_list_first(editors_all); -- while (tmp != NULL) { -- /* 2ndary list chaser: -- elements will be removed by the saver. */ -- tmp2 = g_list_next(tmp); -- -- delete_event(NULL, NULL, (EDITOR *)tmp->data); -- tmp = tmp2; -- } - } - - #endif /* USE_WEBKIT_EDITOR */ diff --git a/sources b/sources index 19e5f9c..eabb767 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (xiphos-4.2.1.tar.xz) = 624bd2e931c15e1665724918e756706f048e824dc13c2f1d5a05c32a93697137e75012564a14b7d2d0aa90c6a109c52ead51901e657d35a457ccf5f42204a0fe +SHA512 (xiphos-4.3.1.tar.xz) = 842f63acb40ae00b47757029bd69de23652501e6f1736d9420f5a6fe3be6a9cf3c41023ccbc539d3262a310363c024dce8055d35dec0951e8f81b2c0b4cf99eb diff --git a/xiphos.spec b/xiphos.spec index 6521e78..e80a2f7 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -1,16 +1,13 @@ %undefine __cmake_in_source_build Name: xiphos -Version: 4.2.1 -Release: 28%{?dist} +Version: 4.3.1 +Release: 1%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later URL: http://xiphos.org/ Source0: https://github.com/crosswire/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz -Patch0: glib_version.patch -Patch1: minizip.patch -Patch2: no_editor.patch BuildRequires: biblesync-devel >= 2.0.1-3 BuildRequires: cmake BuildRequires: desktop-file-utils @@ -49,9 +46,6 @@ Project and elsewhere. %prep %setup -q rm -rf src/biblesync -%patch -P0 -p0 -%patch -P1 -p1 -%patch -P2 -p1 %build export CFLAGS="$CFLAGS -fPIC" @@ -88,7 +82,7 @@ rm -frv %{buildroot}%{_docdir}/%{name} %license COPYING %{_bindir}/xiphos %{_bindir}/xiphos-nav -%{_datadir}/appdata/xiphos.appdata.xml +%{_datadir}/metainfo/xiphos.appdata.xml %{_datadir}/applications/xiphos.desktop %{_datadir}/icons/hicolor/scalable/apps/xiphos.svg %{_datadir}/xiphos/ @@ -100,6 +94,11 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sun Mar 23 2025 Greg Hellings - 4.3.1-1 +- New upstream version 4.3.1 which already has editor fixed +- Updated dependencies +- Removed all patches + * Wed Jan 29 2025 Aaron Rainbolt - 4.2.1-28 - Strip out editor component to resolve FTBFS From 35a58a999b98b65cc552455f91fe0c2fc546b569 Mon Sep 17 00:00:00 2001 From: Aaron Rainbolt Date: Mon, 2 Jun 2025 14:57:27 -0500 Subject: [PATCH 16/23] New upstream version 4.3.2 --- .gitignore | 1 + sources | 2 +- xiphos.spec | 5 ++++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1aceddc..e369f12 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ xiphos-3.1.3.tar.gz /4.1.0.tar.gz /xiphos-4.2.1.tar.xz /xiphos-4.3.1.tar.xz +/xiphos-4.3.2.tar.xz diff --git a/sources b/sources index eabb767..e7bd882 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (xiphos-4.3.1.tar.xz) = 842f63acb40ae00b47757029bd69de23652501e6f1736d9420f5a6fe3be6a9cf3c41023ccbc539d3262a310363c024dce8055d35dec0951e8f81b2c0b4cf99eb +SHA512 (xiphos-4.3.2.tar.xz) = b954a5c2d34defc6d472341d612a6dd53eabc3801091c2cbb81c567d6fcc55545a63425f6e22a3649f4436aa4ab9a7cacf91a8630d41224782b62d59b41f5fe4 diff --git a/xiphos.spec b/xiphos.spec index e80a2f7..56b3457 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -1,7 +1,7 @@ %undefine __cmake_in_source_build Name: xiphos -Version: 4.3.1 +Version: 4.3.2 Release: 1%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. @@ -94,6 +94,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Mon Jun 02 2025 Aaron Rainbolt - 4.3.2-1 +- New upstream version 4.3.2 + * Sun Mar 23 2025 Greg Hellings - 4.3.1-1 - New upstream version 4.3.1 which already has editor fixed - Updated dependencies From c38986cfc0b9db4965efb6bdffe5a49ea2d87890 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 25 Jul 2025 20:53:02 +0000 Subject: [PATCH 17/23] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index 56b3457..cdea7c2 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.3.2 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later @@ -94,6 +94,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Fri Jul 25 2025 Fedora Release Engineering - 4.3.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Mon Jun 02 2025 Aaron Rainbolt - 4.3.2-1 - New upstream version 4.3.2 From 785ac3de1d40765f69891e122cf24998973e258d Mon Sep 17 00:00:00 2001 From: Aaron Rainbolt Date: Sat, 2 Aug 2025 14:53:25 -0500 Subject: [PATCH 18/23] Switch to webkitgtk4.1 --- xiphos.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/xiphos.spec b/xiphos.spec index cdea7c2..1dfc2e3 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.3.2 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later @@ -25,7 +25,7 @@ BuildRequires: minizip-ng-compat-devel BuildRequires: rarian-compat BuildRequires: sword-devel >= 1.8 BuildRequires: util-linux -BuildRequires: webkit2gtk3-devel +BuildRequires: webkit2gtk4.1-devel BuildRequires: yelp-tools BuildRequires: libzip-devel Requires: yelp @@ -94,6 +94,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sat Aug 2 2025 Aaron Rainbolt - 4.3.2-3 +- Switch to webkitgtk4.1 since webkitgtk4.0 has been retired (rhbz#2385989) + * Fri Jul 25 2025 Fedora Release Engineering - 4.3.2-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild From 1afb7b9136f605c78f619cc0ab32f5996a126852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= Date: Wed, 6 Aug 2025 09:58:50 +0200 Subject: [PATCH 19/23] Rebuilt for icu 77.1 --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index 1dfc2e3..f0d15cb 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.3.2 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later @@ -94,6 +94,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Wed Aug 06 2025 František Zatloukal - 4.3.2-4 +- Rebuilt for icu 77.1 + * Sat Aug 2 2025 Aaron Rainbolt - 4.3.2-3 - Switch to webkitgtk4.1 since webkitgtk4.0 has been retired (rhbz#2385989) From ecc03bc7fc2f06c10ec2aa162130be51e50bf180 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 17 Jan 2026 20:42:58 +0000 Subject: [PATCH 20/23] Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index f0d15cb..3355ed6 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.3.2 -Release: 4%{?dist} +Release: 5%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later @@ -94,6 +94,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sat Jan 17 2026 Fedora Release Engineering - 4.3.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + * Wed Aug 06 2025 František Zatloukal - 4.3.2-4 - Rebuilt for icu 77.1 From 502bebbec1e9841ab20d7f6c6c4437c24b7dfe6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= Date: Mon, 8 Jun 2026 15:16:03 +0200 Subject: [PATCH 21/23] Rebuilt for icu 78.3 --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index 3355ed6..0ced145 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.3.2 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later @@ -94,6 +94,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Mon Jun 08 2026 František Zatloukal - 4.3.2-6 +- Rebuilt for icu 78.3 + * Sat Jan 17 2026 Fedora Release Engineering - 4.3.2-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild From b2c156865aeeee86096d77534bf7f6cf9e2dd002 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 17 Jul 2026 09:15:57 +0000 Subject: [PATCH 22/23] Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild --- xiphos.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xiphos.spec b/xiphos.spec index 0ced145..c836e97 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -2,7 +2,7 @@ Name: xiphos Version: 4.3.2 -Release: 6%{?dist} +Release: 7%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later @@ -94,6 +94,9 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Fri Jul 17 2026 Fedora Release Engineering - 4.3.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + * Mon Jun 08 2026 František Zatloukal - 4.3.2-6 - Rebuilt for icu 78.3 From 50f7ee004a92fa9f82416646cffb9cc93a6aee8d Mon Sep 17 00:00:00 2001 From: Greg Hellings Date: Sun, 2 Aug 2026 13:29:47 -0400 Subject: [PATCH 23/23] Upstream release 4.4.0 with TTS functions and editors again --- .gitignore | 1 + sources | 2 +- xiphos.spec | 12 ++++++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index e369f12..52ed481 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ xiphos-3.1.3.tar.gz /xiphos-4.2.1.tar.xz /xiphos-4.3.1.tar.xz /xiphos-4.3.2.tar.xz +/xiphos-4.4.0.tar.xz diff --git a/sources b/sources index e7bd882..7341878 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (xiphos-4.3.2.tar.xz) = b954a5c2d34defc6d472341d612a6dd53eabc3801091c2cbb81c567d6fcc55545a63425f6e22a3649f4436aa4ab9a7cacf91a8630d41224782b62d59b41f5fe4 +SHA512 (xiphos-4.4.0.tar.xz) = d5647c90a75897a03ef06219bb2773199bd44b83a79a0be74a378d57f8169c8919a989f43475c71e84e5cb1dfc23029f68ed6d51d7cd5f1837f737ea7e59ff49 diff --git a/xiphos.spec b/xiphos.spec index c836e97..a934d17 100644 --- a/xiphos.spec +++ b/xiphos.spec @@ -1,13 +1,14 @@ %undefine __cmake_in_source_build Name: xiphos -Version: 4.3.2 -Release: 7%{?dist} +Version: 4.4.0 +Release: 1%{?dist} Summary: Bible study and research tool # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later URL: http://xiphos.org/ Source0: https://github.com/crosswire/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz +BuildRequires: appstream BuildRequires: biblesync-devel >= 2.0.1-3 BuildRequires: cmake BuildRequires: desktop-file-utils @@ -23,6 +24,7 @@ BuildRequires: libappstream-glib BuildRequires: libuuid-devel BuildRequires: minizip-ng-compat-devel BuildRequires: rarian-compat +BuildRequires: speech-dispatcher-devel BuildRequires: sword-devel >= 1.8 BuildRequires: util-linux BuildRequires: webkit2gtk4.1-devel @@ -59,6 +61,7 @@ export CFLAGS LDFLAGS='%{?__global_ldflags}' \ %cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DGTKTVEDITOR=ON \ %{nil} %cmake_build @@ -94,6 +97,11 @@ rm -frv %{buildroot}%{_docdir}/%{name} %{_mandir}/man1/%{name}-nav.1.gz %changelog +* Sun Aug 02 2026 Greg Hellings - 4.4.0-1 +- New upstream release 4.4.0 +- Introduction of speech services for TTS +- Restoration of editor through GTK-native technologies + * Fri Jul 17 2026 Fedora Release Engineering - 4.3.2-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild