From 62502abfc7ead46806a04376ddb3ef59a464b676 Mon Sep 17 00:00:00 2001 From: Luis Guzman Date: Wed, 11 Jun 2025 16:29:45 +0000 Subject: [PATCH 01/10] firefox: yet another change for profile fix path. --- ...g_directory_on_home_dir_for_abrowser.patch | 26 ++++++++++--------- helpers/make-firefox | 2 +- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/helpers/DATA/firefox/patch_changes/012-fix_wrong_directory_on_home_dir_for_abrowser.patch b/helpers/DATA/firefox/patch_changes/012-fix_wrong_directory_on_home_dir_for_abrowser.patch index 42890c6..8241634 100644 --- a/helpers/DATA/firefox/patch_changes/012-fix_wrong_directory_on_home_dir_for_abrowser.patch +++ b/helpers/DATA/firefox/patch_changes/012-fix_wrong_directory_on_home_dir_for_abrowser.patch @@ -1,12 +1,14 @@ -diff --git a/debian/config/mozconfig.in b/debian/config/mozconfig.in -index aee1b988..291b4683 100644 ---- a/debian/config/mozconfig.in -+++ b/debian/config/mozconfig.in -@@ -71,6 +71,7 @@ ac_add_options --disable-av1 - %%endif - %%if MOZ_APP_NAME != MOZ_DEFAULT_APP_NAME - ac_add_options --with-app-name=@MOZ_APP_NAME@ -+ac_add_options --with-app-basename=@MOZ_APP_NAME@ - %%endif - %%if DISTRIB == Ubuntu - #ac_add_options --with-ua-vendor=Ubuntu +diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp +index 9c94cb88..0c19fad9 100644 +--- a/toolkit/xre/nsXREDirProvider.cpp ++++ b/toolkit/xre/nsXREDirProvider.cpp +@@ -1232,7 +1232,8 @@ nsresult nsXREDirProvider::AppendProfilePath(nsIFile* aFile, bool aLocal) { + if (gAppData->profile) { + profile = gAppData->profile; + } else { +- appName = gAppData->name; ++ // For Abrowser compatibility: force use of ~/.mozilla/abrowser ++ appName.AssignLiteral("abrowser"); + vendor = gAppData->vendor; + } + diff --git a/helpers/make-firefox b/helpers/make-firefox index cd08ae0..9571bc2 100644 --- a/helpers/make-firefox +++ b/helpers/make-firefox @@ -19,7 +19,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=122 +VERSION=123 EXTERNAL='deb-src http://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu $UPSTREAM main' REPOKEY=9BDB3D89CE49EC21 From 5430649beec2417c9b89ce8aceafaa13326262f3 Mon Sep 17 00:00:00 2001 From: Ark74 Date: Thu, 12 Jun 2025 17:01:22 -0600 Subject: [PATCH 02/10] dia: apply dia's MR 114 to fix delay to open text properties --- .../000-apply_current_dia_mr_114.patch | 1324 +++++++++++++++++ helpers/make-dia | 30 + 2 files changed, 1354 insertions(+) create mode 100644 helpers/DATA/dia/patch_changes/000-apply_current_dia_mr_114.patch create mode 100644 helpers/make-dia diff --git a/helpers/DATA/dia/patch_changes/000-apply_current_dia_mr_114.patch b/helpers/DATA/dia/patch_changes/000-apply_current_dia_mr_114.patch new file mode 100644 index 0000000..80b30cf --- /dev/null +++ b/helpers/DATA/dia/patch_changes/000-apply_current_dia_mr_114.patch @@ -0,0 +1,1324 @@ +From 6d7a3b627566ff2201292a45ed35a5ab3e425c13 Mon Sep 17 00:00:00 2001 +From: Duncan McIntosh +Date: Sun, 15 Oct 2023 22:26:17 -0400 +Subject: [PATCH 1/4] objects: disable Tab in multi-line entry widgets + +This becomes a 'black hole' for focus, making it hard to navigate by +keyboard. This is both annoying, and also an accessibility problem. +--- + lib/prop_text.c | 1 + + objects/UML/class_attributes_dialog.c | 1 + + objects/UML/class_dialog.c | 1 + + objects/UML/class_operations_dialog.c | 2 ++ + 4 files changed, 5 insertions(+) + +diff --git a/lib/prop_text.c b/lib/prop_text.c +index 4ff98f60d..8e1e9fcf7 100644 +--- a/lib/prop_text.c ++++ b/lib/prop_text.c +@@ -125,6 +125,7 @@ multistringprop_get_widget(StringProperty *prop, PropDialog *dialog) + GtkWidget *ret = gtk_text_view_new(); + GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(ret)); + GtkWidget *frame = gtk_frame_new(NULL); ++ gtk_text_view_set_accepts_tab (GTK_TEXT_VIEW (ret), FALSE); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); + gtk_container_add(GTK_CONTAINER(frame), ret); + g_signal_connect(G_OBJECT(ret), "key-release-event", +diff --git a/objects/UML/class_attributes_dialog.c b/objects/UML/class_attributes_dialog.c +index 2722a2a03..085624e31 100644 +--- a/objects/UML/class_attributes_dialog.c ++++ b/objects/UML/class_attributes_dialog.c +@@ -729,6 +729,7 @@ _attributes_create_page (GtkNotebook *notebook, UMLClass *umlclass) + gtk_container_add (GTK_CONTAINER (scrolledwindow), entry); + gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (entry), GTK_WRAP_WORD); + gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (entry), TRUE); ++ gtk_text_view_set_accepts_tab (GTK_TEXT_VIEW (entry), FALSE); + gtk_widget_show (entry); + #if 0 /* while the GtkEntry has a "activate" signal, GtkTextView does not. + * Maybe we should connect to "set-focus-child" instead? +diff --git a/objects/UML/class_dialog.c b/objects/UML/class_dialog.c +index 8867ae9ac..163cc2949 100644 +--- a/objects/UML/class_dialog.c ++++ b/objects/UML/class_dialog.c +@@ -382,6 +382,7 @@ class_create_page(GtkNotebook *notebook, UMLClass *umlclass) + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), + GTK_SHADOW_IN); + entry = gtk_text_view_new (); ++ gtk_text_view_set_accepts_tab (GTK_TEXT_VIEW (entry), FALSE); + prop_dialog->comment = GTK_TEXT_VIEW(entry); + gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (entry), GTK_WRAP_WORD); + +diff --git a/objects/UML/class_operations_dialog.c b/objects/UML/class_operations_dialog.c +index a530337a9..936a8b575 100644 +--- a/objects/UML/class_operations_dialog.c ++++ b/objects/UML/class_operations_dialog.c +@@ -982,6 +982,7 @@ operations_data_create_hbox (UMLClass *umlclass) + gtk_container_add (GTK_CONTAINER (scrolledwindow), entry); + gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (entry), GTK_WRAP_WORD); + gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (entry),TRUE); ++ gtk_text_view_set_accepts_tab (GTK_TEXT_VIEW (entry), FALSE); + + + gtk_grid_attach (GTK_GRID (grid), label, 4, 0, 1, 1); +@@ -1340,6 +1341,7 @@ operations_parameters_data_create_vbox (UMLClass *umlclass) + gtk_container_add (GTK_CONTAINER (scrolledwindow), entry); + gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (entry), GTK_WRAP_WORD); + gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (entry),TRUE); ++ gtk_text_view_set_accepts_tab (GTK_TEXT_VIEW (entry), FALSE); + + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_grid_attach (GTK_GRID (grid), label, 2, 1, 1, 1); +-- +GitLab + + +From b5dc904ed58ea026898fbc7bf6940de97a6e4e15 Mon Sep 17 00:00:00 2001 +From: Duncan McIntosh +Date: Mon, 16 Oct 2023 15:34:23 -0400 +Subject: [PATCH 2/4] font: don't store the height internally + +We now solely rely on the PangoFontDescription, which is more flexible and +less prone to mistakes. +--- + lib/font.c | 85 ++++++++++++++++++++++---------------------------- + lib/font.h | 2 ++ + lib/libdia.def | 1 + + 3 files changed, 41 insertions(+), 47 deletions(-) + +diff --git a/lib/font.c b/lib/font.c +index 1a321c462..6dec80bb1 100644 +--- a/lib/font.c ++++ b/lib/font.c +@@ -39,6 +39,7 @@ + #include "font.h" + #include "message.h" + #include "textline.h" ++#include "units.h" + + static PangoContext *pango_context = NULL; + +@@ -53,13 +54,6 @@ struct _DiaFont { + PangoFontDescription *pfd; + /* mutable */ char *legacy_name; + +- /* there is a difference between Pango's font size and Dia's font height */ +- /* Calculated font_size is to make 'font_height = ascent + descent */ +- /* The font_height is used as default line height, there used to be a hard-coded size = 0.7 * height */ +- /* before using pango_set_absolute_size() to overcome font size differences between renderers */ +- double height; +- /* Need to load a font to query it's metrics */ +- PangoFont *loaded; + PangoFontMetrics *metrics; + }; + +@@ -136,8 +130,6 @@ dia_font_finalize (GObject *object) + g_clear_pointer (&font->pfd, pango_font_description_free); + g_clear_pointer (&font->metrics, pango_font_metrics_unref); + +- g_clear_object (&font->loaded); +- + G_OBJECT_CLASS (dia_font_parent_class)->finalize (object); + } + +@@ -166,33 +158,17 @@ dia_pfd_set_height(PangoFontDescription *pfd, double height) + } + + +-/*! +- * In Dia a font is usually referred to by it's (line-) height, not it's size. +- * +- * This methods "calculates" the latter from the former. This used to be some magic factor of 0.7 which did not +- * solve the resolution dependencance of the former calculation. In fact there is new magic factor now because +- * really calculating the font size from the height would involve two font loads which seem to be two expensive. +- */ + static void +-_dia_font_adjust_size (DiaFont *font, double height, gboolean recalc_alwways) ++dia_font_update_metrics (DiaFont *font) + { ++ PangoFont *loaded; + +- if (font->height != height || !font->metrics || recalc_alwways) { +- PangoFont *loaded; +- +- dia_pfd_set_height (font->pfd, height); +- /* need to load a font to get it's metrics */ +- loaded = font->loaded; +- font->loaded = pango_context_load_font (dia_font_get_context (), font->pfd); +- +- g_clear_object (&loaded); +- +- g_clear_pointer (&font->metrics, pango_font_metrics_unref); ++ g_clear_pointer (&font->metrics, pango_font_metrics_unref); + +- /* caching metrics */ +- font->metrics = pango_font_get_metrics (font->loaded, NULL); +- font->height = height; +- } ++ /* need to load a font to get its metrics */ ++ loaded = pango_context_load_font (dia_font_get_context (), font->pfd); ++ font->metrics = pango_font_get_metrics (loaded, NULL); ++ g_clear_object (&loaded); + } + + +@@ -205,15 +181,8 @@ DiaFont * + dia_font_new (const char *family, DiaFontStyle style, double height) + { + DiaFont* font = dia_font_new_from_style(style, height); +- gboolean changed; +- +- changed = family != NULL && g_strcmp0 (pango_font_description_get_family (font->pfd), family) != 0; + pango_font_description_set_family(font->pfd, family); + +- if (changed) { +- _dia_font_adjust_size (font, font->height, TRUE); +- } +- + return font; + } + +@@ -316,9 +285,10 @@ dia_font_new_from_style (DiaFontStyle style, double height) + + retval = g_object_new (DIA_TYPE_FONT, NULL); + retval->pfd = pfd; +- _dia_font_adjust_size (retval, height, FALSE); + retval->legacy_name = NULL; + ++ dia_font_update_metrics (retval); ++ + return retval; + } + +@@ -407,8 +377,9 @@ double + dia_font_get_height (DiaFont *font) + { + g_return_val_if_fail (font != NULL, 0.0); ++ g_return_val_if_fail (pango_font_description_get_size_is_absolute (font->pfd), 0.0); + +- return font->height; ++ return pdu_to_dcm(pango_font_description_get_size(font->pfd)) / 0.8; + } + + +@@ -430,6 +401,23 @@ dia_font_get_size (DiaFont *font) + } + + ++/** ++ * dia_font_set_size: ++ * @font: The font to modify. ++ * @size: The new size in centimetres. ++ * ++ * Sets the size of font to the provided (positive) size. ++ */ ++void ++dia_font_set_size (DiaFont *font, double size) ++{ ++ g_return_if_fail (size >= 0); ++ ++ pango_font_description_set_absolute_size (font->pfd, dcm_to_pdu (size)); ++ dia_font_update_metrics (font); ++} ++ ++ + /** + * dia_font_set_height: + * +@@ -438,7 +426,8 @@ dia_font_get_size (DiaFont *font) + void + dia_font_set_height (DiaFont* font, double height) + { +- _dia_font_adjust_size (font, height, FALSE); ++ /* FIXME For now, assume height is 80% of size. */ ++ dia_font_set_size (font, height / 0.8); + } + + +@@ -493,7 +482,7 @@ dia_font_set_any_family (DiaFont *font, const char *family) + pango_font_description_set_family (font->pfd, family); + if (changed) { + /* force recalculation on name change */ +- _dia_font_adjust_size (font, font->height, TRUE); ++ dia_font_update_metrics (font); + } + + g_clear_pointer (&font->legacy_name, g_free); +@@ -531,7 +520,7 @@ dia_font_set_weight (DiaFont *font, DiaFontWeight weight) + dia_pfd_set_weight(font->pfd,weight); + + if (old_weight != weight) { +- _dia_font_adjust_size (font, font->height, TRUE); ++ dia_font_update_metrics (font); + } + } + +@@ -548,7 +537,7 @@ dia_font_set_slant (DiaFont *font, DiaFontSlant slant) + g_return_if_fail(font != NULL); + dia_pfd_set_slant(font->pfd,slant); + if (slant != old_slant) +- _dia_font_adjust_size (font, font->height, TRUE); ++ dia_font_update_metrics (font); + } + + +@@ -702,7 +691,8 @@ dia_font_ascent (const char *string, DiaFont *font, double height) + { + if (font->metrics) { + double ascent = pdu_to_dcm (pango_font_metrics_get_ascent (font->metrics)); +- return ascent * (height / font->height); ++ double factor = height / dia_font_get_height (font); ++ return ascent * factor; + } else { + /* previous, _expensive_ but string specific way */ + TextLine *text_line = text_line_new (string, font, height); +@@ -723,7 +713,8 @@ dia_font_descent (const char *string, DiaFont *font, double height) + { + if (font->metrics) { + double descent = pdu_to_dcm (pango_font_metrics_get_descent (font->metrics)); +- return descent * (height / font->height); ++ double factor = height / dia_font_get_height (font); ++ return descent * factor; + } else { + /* previous, _expensive_ but string specific way */ + TextLine *text_line = text_line_new (string, font, height); +diff --git a/lib/font.h b/lib/font.h +index aaf19ef6d..bd6868cb3 100644 +--- a/lib/font.h ++++ b/lib/font.h +@@ -103,6 +103,8 @@ const PangoFontDescription *dia_font_get_description (DiaFont *f + double dia_font_get_height (DiaFont *font); + void dia_font_set_height (DiaFont *font, + double height); ++void dia_font_set_size (DiaFont *font, ++ double size); + double dia_font_get_size (DiaFont *font); + void dia_font_set_slant (DiaFont *font, + DiaFontSlant slant); +diff --git a/lib/libdia.def b/lib/libdia.def +index d7f579479..1218a20c9 100644 +--- a/lib/libdia.def ++++ b/lib/libdia.def +@@ -243,6 +243,7 @@ EXPORTS + dia_font_new_from_style + dia_font_set_any_family + dia_font_set_height ++ dia_font_set_size + dia_font_set_slant + dia_font_set_slant_from_string + dia_font_set_weight +-- +GitLab + + +From da5b8963d3bd8f80a50b3bf81ec5d7a59bdbe8a7 Mon Sep 17 00:00:00 2001 +From: Duncan McIntosh +Date: Fri, 20 Oct 2023 17:29:48 -0400 +Subject: [PATCH 3/4] font: add dia_font_new_from_description + +Since we no longer need to keep track of font heights in DiaFont, it +basically wraps descriptions. As such, allow creating fonts from a +string Pango description. + +This uses a string to try and avoid a public dependency on Pango. We +still have public dependencies elsewhere, but it means shifting to +alternative libraries, or incompatible versions (like Pango2, which +appears at least on hold) should be easier. It also doesn't really +add much friction with GTK. +--- + lib/font.c | 21 +++++++++++++++++++++ + lib/font.h | 1 + + lib/libdia.def | 1 + + 3 files changed, 23 insertions(+) + +diff --git a/lib/font.c b/lib/font.c +index 6dec80bb1..ca3953f28 100644 +--- a/lib/font.c ++++ b/lib/font.c +@@ -293,6 +293,27 @@ dia_font_new_from_style (DiaFontStyle style, double height) + } + + ++DiaFont * ++dia_font_new_from_description (const char *desc) ++{ ++ DiaFont *retval; ++ PangoFontDescription *pfd = pango_font_description_from_string (desc); ++ ++ if (!pango_font_description_get_size_is_absolute (pfd)) { ++ double size = pango_font_description_get_size (pfd); ++ pango_font_description_set_absolute_size(pfd, size * global_zoom_factor * 72.0); ++ } ++ ++ retval = g_object_new (DIA_TYPE_FONT, NULL); ++ retval->pfd = pfd; ++ retval->legacy_name = NULL; ++ ++ dia_font_update_metrics (retval); ++ ++ return retval; ++} ++ ++ + DiaFont * + dia_font_copy (DiaFont *font) + { +diff --git a/lib/font.h b/lib/font.h +index bd6868cb3..cc1260815 100644 +--- a/lib/font.h ++++ b/lib/font.h +@@ -95,6 +95,7 @@ DiaFont *dia_font_new (const char *f + DiaFont *dia_font_new_from_style (DiaFontStyle style, + double height); + DiaFont *dia_font_new_from_legacy_name (const char *name); ++DiaFont *dia_font_new_from_description (const char *description); + const char *dia_font_get_legacy_name (DiaFont *font); + DiaFont *dia_font_copy (DiaFont *font); + DiaFontStyle dia_font_get_style (DiaFont *font); +diff --git a/lib/libdia.def b/lib/libdia.def +index 1218a20c9..db1c4ad7a 100644 +--- a/lib/libdia.def ++++ b/lib/libdia.def +@@ -241,6 +241,7 @@ EXPORTS + dia_font_new + dia_font_new_from_legacy_name + dia_font_new_from_style ++ dia_font_new_from_description + dia_font_set_any_family + dia_font_set_height + dia_font_set_size +-- +GitLab + + +From 48c9b9b81d347d3f3c6df4df9c7456f2b74919c8 Mon Sep 17 00:00:00 2001 +From: Duncan McIntosh +Date: Fri, 20 Oct 2023 17:31:58 -0400 +Subject: [PATCH 4/4] lib: remove DiaFontSelector + +We can now use GtkFontButton, which (a) allows removing ~700 lines of code, +and (b) doesn't lock up whenever a property dialog is opened. + +Currently, we don't allow configuring size in the dialog, since the size +of a DiaFont isn't really used. Further refactoring should let us use it +instead of separate spin buttons. +--- + lib/dia-font-selector.c | 646 ------------------------------------- + lib/dia-font-selector.h | 37 --- + lib/libdia.def | 5 - + lib/meson.build | 2 - + lib/prop_attr.c | 17 +- + objects/UML/class_dialog.c | 54 +++- + objects/UML/class_dialog.h | 13 +- + 7 files changed, 56 insertions(+), 718 deletions(-) + delete mode 100644 lib/dia-font-selector.c + delete mode 100644 lib/dia-font-selector.h + +diff --git a/lib/dia-font-selector.c b/lib/dia-font-selector.c +deleted file mode 100644 +index fb59d6c98..000000000 +--- a/lib/dia-font-selector.c ++++ /dev/null +@@ -1,646 +0,0 @@ +-/* Dia -- an diagram creation/manipulation program +- * Copyright (C) 1998 Alexander Larsson +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +- */ +- +-#include "config.h" +- +-#include +-#include +- +-#include +-#include +- +-#include "dia-font-selector.h" +-#include "font.h" +-#include "persistence.h" +- +-#define PERSIST_NAME "font-menu" +- +-struct _DiaFontSelector { +- GtkBox hbox; +-}; +- +- +-typedef struct _DiaFontSelectorPrivate DiaFontSelectorPrivate; +-struct _DiaFontSelectorPrivate { +- GtkWidget *fonts; +- GtkTreeStore *fonts_store; +- GtkTreeIter fonts_default_end; +- GtkTreeIter fonts_custom_end; +- GtkTreeIter fonts_other; +- GtkTreeIter fonts_reset; +- +- const char *looking_for; +- +- GtkWidget *styles; +- GtkListStore *styles_store; +- +- char *current; +- int current_style; +-}; +- +-G_DEFINE_TYPE_WITH_PRIVATE (DiaFontSelector, dia_font_selector, GTK_TYPE_BOX) +- +-enum { +- VALUE_CHANGED, +- LAST_SIGNAL +-}; +- +-static guint signals[LAST_SIGNAL] = { 0 }; +- +- +-/* New and improved font selector: Contains the three standard fonts +- * and an 'Other fonts...' entry that opens the font dialog. The fonts +- * selected in the font dialog are persistently added to the menu. +- * +- * +----------------+ +- * | Sans | +- * | Serif | +- * | Monospace | +- * | -------------- | +- * | Bodini | +- * | CurlyGothic | +- * | OldWestern | +- * | -------------- | +- * | Other fonts... | +- * +----------------+ +- */ +- +-enum { +- STYLE_COL_LABEL, +- STYLE_COL_ID, +- STYLE_N_COL, +-}; +- +- +-enum { +- FONT_COL_FAMILY, +- FONT_N_COL, +-}; +- +- +-static void +-dia_font_selector_finalize (GObject *object) +-{ +- DiaFontSelector *self = DIA_FONT_SELECTOR (object); +- DiaFontSelectorPrivate *priv = dia_font_selector_get_instance_private (self); +- +- g_clear_object (&priv->fonts_store); +- g_clear_object (&priv->styles_store); +- +- g_clear_pointer (&priv->current, g_free); +- +- G_OBJECT_CLASS (dia_font_selector_parent_class)->finalize (object); +-} +- +- +-static void +-dia_font_selector_class_init (DiaFontSelectorClass *klass) +-{ +- GObjectClass *object_class = G_OBJECT_CLASS (klass); +- +- object_class->finalize = dia_font_selector_finalize; +- +- signals[VALUE_CHANGED] = g_signal_new ("value-changed", +- G_TYPE_FROM_CLASS (klass), +- G_SIGNAL_RUN_FIRST, +- 0, NULL, NULL, +- g_cclosure_marshal_VOID__VOID, +- G_TYPE_NONE, 0); +-} +- +- +-static int +-sort_fonts (const void *p1, const void *p2) +-{ +- const gchar *n1 = pango_font_family_get_name (PANGO_FONT_FAMILY (*(void**)p1)); +- const gchar *n2 = pango_font_family_get_name (PANGO_FONT_FAMILY (*(void**)p2)); +- return g_ascii_strcasecmp (n1, n2); +-} +- +- +-static char *style_labels[] = { +- "Normal", +- "Oblique", +- "Italic", +- "Ultralight", +- "Ultralight-Oblique", +- "Ultralight-Italic", +- "Light", +- "Light-Oblique", +- "Light-Italic", +- "Medium", +- "Medium-Oblique", +- "Medium-Italic", +- "Demibold", +- "Demibold-Oblique", +- "Demibold-Italic", +- "Bold", +- "Bold-Oblique", +- "Bold-Italic", +- "Ultrabold", +- "Ultrabold-Oblique", +- "Ultrabold-Italic", +- "Heavy", +- "Heavy-Oblique", +- "Heavy-Italic" +-}; +- +- +-static PangoFontFamily * +-get_family_from_name (GtkWidget *widget, const gchar *fontname) +-{ +- PangoFontFamily **families; +- int n_families, i; +- +- pango_context_list_families (dia_font_get_context(), +- &families, &n_families); +- /* Doing it the slow way until I find a better way */ +- for (i = 0; i < n_families; i++) { +- if (!(g_ascii_strcasecmp (pango_font_family_get_name (families[i]), fontname))) { +- PangoFontFamily *fam = families[i]; +- g_clear_pointer (&families, g_free); +- return fam; +- } +- } +- g_warning (_("Couldn't find font family for %s\n"), fontname); +- g_clear_pointer (&families, g_free); +- return NULL; +-} +- +- +-static void +-set_styles (DiaFontSelector *fs, +- const gchar *name, +- DiaFontStyle dia_style) +-{ +- PangoFontFamily *pff; +- DiaFontSelectorPrivate *priv; +- PangoFontFace **faces = NULL; +- int nfaces = 0; +- int i = 0; +- long stylebits = 0; +- +- g_return_if_fail (DIA_IS_FONT_SELECTOR (fs)); +- +- priv = dia_font_selector_get_instance_private (fs); +- +- pff = get_family_from_name (GTK_WIDGET (fs), name); +- +- pango_font_family_list_faces (pff, &faces, &nfaces); +- +- for (i = 0; i < nfaces; i++) { +- PangoFontDescription *pfd = pango_font_face_describe (faces[i]); +- PangoStyle style = pango_font_description_get_style (pfd); +- PangoWeight weight = pango_font_description_get_weight (pfd); +- /* +- * This is a quick and dirty way to pick the styles present, +- * sort them and avoid duplicates. +- * We set a bit for each style present, bit (weight*3+style) +- * From style_labels, we pick #(weight*3+style) +- * where weight and style are the Dia types. +- */ +- /* Account for DIA_WEIGHT_NORMAL hack */ +- int weightnr = (weight-200)/100; +- if (weightnr < 2) weightnr ++; +- else if (weightnr == 2) weightnr = 0; +- stylebits |= 1 << (3*weightnr + style); +- pango_font_description_free (pfd); +- } +- +- g_clear_pointer (&faces, g_free); +- +- if (stylebits == 0) { +- g_warning ("'%s' has no style!", +- pango_font_family_get_name (pff) ? pango_font_family_get_name (pff) : "(null font)"); +- } +- +- gtk_list_store_clear (priv->styles_store); +- +- for (i = DIA_FONT_NORMAL; i <= (DIA_FONT_HEAVY | DIA_FONT_ITALIC); i+=4) { +- GtkTreeIter iter; +- +- /* +- * bad hack continued ... +- */ +- int weight = DIA_FONT_STYLE_GET_WEIGHT (i) >> 4; +- int slant = DIA_FONT_STYLE_GET_SLANT (i) >> 2; +- +- if (DIA_FONT_STYLE_GET_SLANT (i) > DIA_FONT_ITALIC) { +- continue; +- } +- +- if (!(stylebits & (1 << (3 * weight + slant)))) { +- continue; +- } +- +- gtk_list_store_append (priv->styles_store, &iter); +- gtk_list_store_set (priv->styles_store, +- &iter, +- STYLE_COL_LABEL, style_labels[3 * weight + slant], +- STYLE_COL_ID, i, +- -1); +- +- if (dia_style == i || (i == DIA_FONT_NORMAL && dia_style == -1)) { +- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->styles), &iter); +- } +- } +- +- gtk_widget_set_sensitive (GTK_WIDGET (priv->styles), +- gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->styles_store), NULL) > 1); +-} +- +- +-static void +-font_changed (GtkComboBox *widget, +- DiaFontSelector *self) +-{ +- DiaFontSelectorPrivate *priv; +- GtkTreeIter active; +- GtkTreePath *active_path; +- GtkTreePath *path; +- char *family = NULL; +- +- g_return_if_fail (DIA_IS_FONT_SELECTOR (self)); +- +- priv = dia_font_selector_get_instance_private (self); +- +- gtk_combo_box_get_active_iter (widget, &active); +- +- active_path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->fonts_store), &active); +- path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->fonts_store), &priv->fonts_reset); +- +- if (gtk_tree_path_compare (path, active_path) == 0) { +- GtkTreeIter iter; +- GtkTreePath *end_path; +- DiaFont *font; +- +- persistent_list_clear (PERSIST_NAME); +- +- path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->fonts_store), &priv->fonts_default_end); +- +- // Move over the separator +- gtk_tree_path_next (path); +- gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->fonts_store), &iter, path); +- +- end_path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->fonts_store), &priv->fonts_custom_end); +- +- while (gtk_tree_path_compare (path, end_path) != 0) { +- gtk_tree_store_remove (priv->fonts_store, &iter); +- +- gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->fonts_store), &iter, path); +- +- gtk_tree_path_free (end_path); +- end_path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->fonts_store), &priv->fonts_custom_end); +- } +- +- gtk_tree_path_free (path); +- gtk_tree_path_free (end_path); +- gtk_tree_path_free (active_path); +- +- if (priv->current) { +- font = dia_font_new (priv->current, priv->current_style, 1.0); +- dia_font_selector_set_font (self, font); +- g_clear_object (&font); +- } else { +- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->fonts_store), &iter); +- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->fonts), &iter); +- } +- +- return; +- } +- +- gtk_tree_model_get (GTK_TREE_MODEL (priv->fonts_store), +- &active, +- FONT_COL_FAMILY, &family, +- -1); +- +- g_clear_pointer (&priv->current, g_free); +- priv->current = g_strdup (family); +- +- set_styles (self, family, -1); +- g_signal_emit (G_OBJECT (self), signals[VALUE_CHANGED], 0); +- +- if (g_strcmp0 (family, "sans") != 0 && +- g_strcmp0 (family, "serif") != 0 && +- g_strcmp0 (family, "monospace") != 0 && +- !persistent_list_add (PERSIST_NAME, family)) { +- GtkTreeIter iter; +- +- gtk_tree_store_insert_before (priv->fonts_store, +- &iter, +- NULL, +- &priv->fonts_custom_end); +- gtk_tree_store_set (priv->fonts_store, +- &iter, +- FONT_COL_FAMILY, family, +- -1); +- +- gtk_combo_box_set_active_iter (widget, &iter); +- } +- +- gtk_tree_path_free (path); +- gtk_tree_path_free (active_path); +- g_clear_pointer (&family, g_free); +-} +- +- +-static gboolean +-is_separator (GtkTreeModel *model, +- GtkTreeIter *iter, +- gpointer data) +-{ +- gboolean result; +- char *family; +- +- gtk_tree_model_get (model, iter, FONT_COL_FAMILY, &family, -1); +- +- result = g_strcmp0 (family, "separator") == 0; +- +- g_clear_pointer (&family, g_free); +- +- return result; +-} +- +- +-static void +-is_sensitive (GtkCellLayout *cell_layout, +- GtkCellRenderer *cell, +- GtkTreeModel *tree_model, +- GtkTreeIter *iter, +- gpointer data) +-{ +- gboolean sensitive; +- +- sensitive = !gtk_tree_model_iter_has_child (tree_model, iter); +- +- g_object_set (cell, "sensitive", sensitive, NULL); +-} +- +- +-static void +-style_changed (GtkComboBox *widget, +- DiaFontSelector *self) +-{ +- DiaFontSelectorPrivate *priv; +- GtkTreeIter active; +- +- g_return_if_fail (DIA_IS_FONT_SELECTOR (self)); +- +- priv = dia_font_selector_get_instance_private (self); +- +- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->styles), &active)) { +- gtk_tree_model_get (GTK_TREE_MODEL (priv->styles_store), +- &active, +- STYLE_COL_ID, &priv->current_style, +- -1); +- } else { +- priv->current_style = 0; +- } +- +- g_signal_emit (G_OBJECT (self), signals[VALUE_CHANGED], 0); +-} +- +- +-static void +-dia_font_selector_init (DiaFontSelector *fs) +-{ +- DiaFontSelectorPrivate *priv; +- PangoFontFamily **families; +- int n_families,i; +- GtkCellRenderer *renderer; +- GtkTreeIter iter; +- GList *tmplist; +- +- g_return_if_fail (DIA_IS_FONT_SELECTOR (fs)); +- +- priv = dia_font_selector_get_instance_private (fs); +- +- priv->fonts_store = gtk_tree_store_new (FONT_N_COL, G_TYPE_STRING); +- +- gtk_tree_store_append (priv->fonts_store, &iter, NULL); +- gtk_tree_store_set (priv->fonts_store, +- &iter, +- FONT_COL_FAMILY, "sans", +- -1); +- gtk_tree_store_append (priv->fonts_store, &iter, NULL); +- gtk_tree_store_set (priv->fonts_store, +- &iter, +- FONT_COL_FAMILY, "serif", +- -1); +- gtk_tree_store_append (priv->fonts_store, &iter, NULL); +- gtk_tree_store_set (priv->fonts_store, +- &iter, +- FONT_COL_FAMILY, "monospace", +- -1); +- +- gtk_tree_store_append (priv->fonts_store, &priv->fonts_default_end, NULL); +- gtk_tree_store_set (priv->fonts_store, +- &priv->fonts_default_end, +- FONT_COL_FAMILY, "separator", +- -1); +- +- persistence_register_list (PERSIST_NAME); +- +- for (tmplist = persistent_list_get_glist (PERSIST_NAME); +- tmplist != NULL; tmplist = g_list_next (tmplist)) { +- gtk_tree_store_append (priv->fonts_store, &iter, NULL); +- gtk_tree_store_set (priv->fonts_store, +- &iter, +- FONT_COL_FAMILY, tmplist->data, +- -1); +- } +- +- gtk_tree_store_append (priv->fonts_store, &priv->fonts_custom_end, NULL); +- gtk_tree_store_set (priv->fonts_store, +- &priv->fonts_custom_end, +- FONT_COL_FAMILY, "separator", +- -1); +- +- gtk_tree_store_append (priv->fonts_store, &priv->fonts_other, NULL); +- gtk_tree_store_set (priv->fonts_store, +- &priv->fonts_other, +- FONT_COL_FAMILY, _("Other Fonts"), +- -1); +- +- gtk_tree_store_append (priv->fonts_store, &priv->fonts_reset, NULL); +- gtk_tree_store_set (priv->fonts_store, +- &priv->fonts_reset, +- FONT_COL_FAMILY, _("Reset Menu"), +- -1); +- +- priv->fonts = gtk_combo_box_new_with_model (GTK_TREE_MODEL (priv->fonts_store)); +- gtk_widget_set_hexpand (priv->fonts, TRUE); +- gtk_widget_show (priv->fonts); +- +- g_signal_connect (priv->fonts, +- "changed", +- G_CALLBACK (font_changed), +- fs); +- +- renderer = gtk_cell_renderer_text_new (); +- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (priv->fonts), renderer, TRUE); +- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (priv->fonts), renderer, +- "text", FONT_COL_FAMILY, +- "family", FONT_COL_FAMILY, +- NULL); +- +- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (priv->fonts), +- is_separator, NULL, NULL); +- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (priv->fonts), +- renderer, +- is_sensitive, +- NULL, NULL); +- +- priv->styles_store = gtk_list_store_new (STYLE_N_COL, +- G_TYPE_STRING, +- G_TYPE_INT); +- priv->styles = gtk_combo_box_new_with_model (GTK_TREE_MODEL (priv->styles_store)); +- gtk_widget_show (priv->styles); +- +- g_signal_connect (priv->styles, +- "changed", +- G_CALLBACK (style_changed), +- fs); +- +- renderer = gtk_cell_renderer_text_new (); +- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (priv->styles), renderer, TRUE); +- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (priv->styles), renderer, +- "text", STYLE_COL_LABEL, +- NULL); +- +- pango_context_list_families (dia_font_get_context (), +- &families, +- &n_families); +- +- qsort (families, +- n_families, +- sizeof (PangoFontFamily *), +- sort_fonts); +- +- /* Doing it the slow way until I find a better way */ +- for (i = 0; i < n_families; i++) { +- gtk_tree_store_append (priv->fonts_store, +- &iter, +- &priv->fonts_other); +- gtk_tree_store_set (priv->fonts_store, +- &iter, +- FONT_COL_FAMILY, pango_font_family_get_name (families[i]), +- -1); +- } +- g_clear_pointer (&families, g_free); +- +- gtk_box_pack_start (GTK_BOX (fs), GTK_WIDGET (priv->fonts), FALSE, TRUE, 0); +- gtk_box_pack_start (GTK_BOX (fs), GTK_WIDGET (priv->styles), FALSE, TRUE, 0); +-} +- +- +-GtkWidget * +-dia_font_selector_new (void) +-{ +- return g_object_new (DIA_TYPE_FONT_SELECTOR, NULL); +-} +- +- +-static gboolean +-set_font (GtkTreeModel *model, +- GtkTreePath *path, +- GtkTreeIter *iter, +- gpointer data) +-{ +- DiaFontSelector *self = DIA_FONT_SELECTOR (data); +- DiaFontSelectorPrivate *priv = dia_font_selector_get_instance_private (self); +- char *font; +- gboolean res = FALSE; +- +- gtk_tree_model_get (model, +- iter, +- FONT_COL_FAMILY, &font, +- -1); +- +- res = g_strcmp0 (priv->looking_for, font) == 0; +- if (res) { +- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->fonts), iter); +- } +- +- g_clear_pointer (&font, g_free); +- +- return res; +-} +- +- +-/** +- * dia_font_selector_set_font: +- * +- * Set the current font to be shown in the font selector. +- */ +-void +-dia_font_selector_set_font (DiaFontSelector *self, DiaFont *font) +-{ +- DiaFontSelectorPrivate *priv; +- const gchar *fontname = dia_font_get_family (font); +- +- g_return_if_fail (DIA_IS_FONT_SELECTOR (self)); +- +- priv = dia_font_selector_get_instance_private (self); +- +- priv->looking_for = fontname; +- gtk_tree_model_foreach (GTK_TREE_MODEL (priv->fonts_store), set_font, self); +- priv->looking_for = NULL; +- +- set_styles (self, fontname, dia_font_get_style (font)); +-} +- +- +-DiaFont * +-dia_font_selector_get_font (DiaFontSelector *self) +-{ +- DiaFontSelectorPrivate *priv; +- DiaFontStyle style; +- DiaFont *font; +- GtkTreeIter iter; +- char *fontname = NULL; +- +- g_return_val_if_fail (DIA_IS_FONT_SELECTOR (self), NULL); +- +- priv = dia_font_selector_get_instance_private (self); +- +- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->fonts), &iter)) { +- gtk_tree_model_get (GTK_TREE_MODEL (priv->fonts_store), +- &iter, +- FONT_COL_FAMILY, &fontname, +- -1); +- } else { +- g_warning ("No font selected"); +- } +- +- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->styles), &iter)) { +- gtk_tree_model_get (GTK_TREE_MODEL (priv->styles_store), +- &iter, +- STYLE_COL_ID, &style, +- -1); +- } else { +- style = 0; +- } +- +- font = dia_font_new (fontname, style, 1.0); +- +- g_clear_pointer (&fontname, g_free); +- +- return font; +-} +- +diff --git a/lib/dia-font-selector.h b/lib/dia-font-selector.h +deleted file mode 100644 +index 8ffba0ccb..000000000 +--- a/lib/dia-font-selector.h ++++ /dev/null +@@ -1,37 +0,0 @@ +-/* Dia -- an diagram creation/manipulation program +- * Copyright (C) 1998 Alexander Larsson +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +- * +- * SPDX-License-Identifier: GPL-2.0-or-later +- */ +- +-#pragma once +- +-#include +- +-#include "font.h" +- +-G_BEGIN_DECLS +- +-#define DIA_TYPE_FONT_SELECTOR dia_font_selector_get_type () +-G_DECLARE_FINAL_TYPE (DiaFontSelector, dia_font_selector, DIA, FONT_SELECTOR, GtkBox) +- +-GtkWidget *dia_font_selector_new (void); +-void dia_font_selector_set_font (DiaFontSelector *self, +- DiaFont *font); +-DiaFont *dia_font_selector_get_font (DiaFontSelector *self); +- +-G_END_DECLS +diff --git a/lib/libdia.def b/lib/libdia.def +index db1c4ad7a..7f2364ddd 100644 +--- a/lib/libdia.def ++++ b/lib/libdia.def +@@ -252,11 +252,6 @@ EXPORTS + dia_font_copy + dia_font_string_width + +- dia_font_selector_get_font +- dia_font_selector_get_type +- dia_font_selector_new +- dia_font_selector_set_font +- + dia_guide_new + dia_guide_copy + dia_guide_free +diff --git a/lib/meson.build b/lib/meson.build +index f1ffb9659..7d2058c41 100644 +--- a/lib/meson.build ++++ b/lib/meson.build +@@ -167,8 +167,6 @@ libdia_sources = stdprop_sources + [ + 'dia-colour-cell-renderer.h', + 'dia-colour-selector.c', + 'dia-colour-selector.h', +- 'dia-font-selector.c', +- 'dia-font-selector.h', + 'dia-graphene.h', + 'dia-guide.c', + 'dia-guide.h', +diff --git a/lib/prop_attr.c b/lib/prop_attr.c +index 18a850a41..2362813a0 100644 +--- a/lib/prop_attr.c ++++ b/lib/prop_attr.c +@@ -29,11 +29,11 @@ + + #include + #include "dia_xml.h" ++#include "font.h" + #include "properties.h" + #include "propinternals.h" + #include "dia-arrow-selector.h" + #include "dia-colour-selector.h" +-#include "dia-font-selector.h" + #include "dia-line-style-selector.h" + + /***************************/ +@@ -421,22 +421,27 @@ fontprop_copy(FontProperty *src) + static WIDGET * + fontprop_get_widget(FontProperty *prop, PropDialog *dialog) + { +- GtkWidget *ret = dia_font_selector_new(); +- prophandler_connect(&prop->common, G_OBJECT(ret), "value-changed"); ++ GtkWidget *ret = gtk_font_button_new(); ++ gtk_font_chooser_set_level (GTK_FONT_CHOOSER (ret), GTK_FONT_CHOOSER_LEVEL_FAMILY | GTK_FONT_CHOOSER_LEVEL_STYLE); ++ prophandler_connect(&prop->common, G_OBJECT(ret), "font-set"); + return ret; + } + + static void + fontprop_reset_widget(FontProperty *prop, WIDGET *widget) + { +- dia_font_selector_set_font (DIA_FONT_SELECTOR (widget), +- prop->font_data); ++ const PangoFontDescription *desc = dia_font_get_description (prop->font_data); ++ gtk_font_chooser_set_font_desc (GTK_FONT_CHOOSER (widget), desc); + } + + static void + fontprop_set_from_widget(FontProperty *prop, WIDGET *widget) + { +- prop->font_data = dia_font_selector_get_font (DIA_FONT_SELECTOR (widget)); ++ char *desc = gtk_font_chooser_get_font (GTK_FONT_CHOOSER (widget)); ++ DiaFont *new_font = dia_font_new_from_description (desc); ++ ++ g_clear_pointer (&desc, g_free); ++ g_set_object (&prop->font_data, new_font); + } + + static void +diff --git a/objects/UML/class_dialog.c b/objects/UML/class_dialog.c +index 163cc2949..56af1d84b 100644 +--- a/objects/UML/class_dialog.c ++++ b/objects/UML/class_dialog.c +@@ -40,6 +40,7 @@ + #include + #include + ++#include "font.h" + #include "object.h" + #include "class.h" + #include "diaoptionmenu.h" +@@ -196,6 +197,28 @@ _class_set_comment (GtkTextView *view, gchar *text) + } + + ++static DiaFont * ++_font_from_button (GtkFontButton *btn) ++{ ++ char *font_desc; ++ DiaFont *ret; ++ ++ font_desc = gtk_font_chooser_get_font (GTK_FONT_CHOOSER (btn)); ++ ret = dia_font_new_from_description (font_desc); ++ g_clear_pointer (&font_desc, g_free); ++ ++ return ret; ++} ++ ++ ++static void ++_set_selector_font (GtkFontButton *btn, DiaFont *font) ++{ ++ gtk_font_chooser_set_font_desc (GTK_FONT_CHOOSER (btn), ++ dia_font_get_description (font)); ++} ++ ++ + static void + class_read_from_dialog(UMLClass *umlclass, UMLClassDialog *prop_dialog) + { +@@ -243,12 +266,12 @@ class_read_from_dialog(UMLClass *umlclass, UMLClassDialog *prop_dialog) + dia_colour_selector_get_colour (DIA_COLOUR_SELECTOR (prop_dialog->fill_color), + ¨class->fill_color); + +- umlclass->normal_font = dia_font_selector_get_font (prop_dialog->normal_font); +- umlclass->polymorphic_font = dia_font_selector_get_font (prop_dialog->polymorphic_font); +- umlclass->abstract_font = dia_font_selector_get_font (prop_dialog->abstract_font); +- umlclass->classname_font = dia_font_selector_get_font (prop_dialog->classname_font); +- umlclass->abstract_classname_font = dia_font_selector_get_font (prop_dialog->abstract_classname_font); +- umlclass->comment_font = dia_font_selector_get_font (prop_dialog->comment_font); ++ umlclass->normal_font = _font_from_button(prop_dialog->normal_font); ++ umlclass->polymorphic_font = _font_from_button(prop_dialog->polymorphic_font); ++ umlclass->abstract_font = _font_from_button(prop_dialog->abstract_font); ++ umlclass->classname_font = _font_from_button (prop_dialog->classname_font); ++ umlclass->abstract_classname_font = _font_from_button (prop_dialog->abstract_classname_font); ++ umlclass->comment_font = _font_from_button (prop_dialog->comment_font); + + umlclass->font_height = gtk_spin_button_get_value (prop_dialog->normal_font_height); + umlclass->abstract_font_height = gtk_spin_button_get_value (prop_dialog->abstract_font_height); +@@ -291,12 +314,12 @@ class_fill_in_dialog(UMLClass *umlclass) + dia_colour_selector_set_colour (prop_dialog->text_color, ¨class->text_color); + dia_colour_selector_set_colour (prop_dialog->line_color, ¨class->line_color); + dia_colour_selector_set_colour (prop_dialog->fill_color, ¨class->fill_color); +- dia_font_selector_set_font (prop_dialog->normal_font, umlclass->normal_font); +- dia_font_selector_set_font (prop_dialog->polymorphic_font, umlclass->polymorphic_font); +- dia_font_selector_set_font (prop_dialog->abstract_font, umlclass->abstract_font); +- dia_font_selector_set_font (prop_dialog->classname_font, umlclass->classname_font); +- dia_font_selector_set_font (prop_dialog->abstract_classname_font, umlclass->abstract_classname_font); +- dia_font_selector_set_font (prop_dialog->comment_font, umlclass->comment_font); ++ _set_selector_font (prop_dialog->normal_font, umlclass->normal_font); ++ _set_selector_font (prop_dialog->polymorphic_font, umlclass->polymorphic_font); ++ _set_selector_font (prop_dialog->abstract_font, umlclass->abstract_font); ++ _set_selector_font (prop_dialog->classname_font, umlclass->classname_font); ++ _set_selector_font (prop_dialog->abstract_classname_font, umlclass->abstract_classname_font); ++ _set_selector_font (prop_dialog->comment_font, umlclass->comment_font); + gtk_spin_button_set_value (prop_dialog->normal_font_height, umlclass->font_height); + gtk_spin_button_set_value (prop_dialog->polymorphic_font_height, umlclass->polymorphic_font_height); + gtk_spin_button_set_value (prop_dialog->abstract_font_height, umlclass->abstract_font_height); +@@ -311,7 +334,7 @@ create_font_props_row (GtkGrid *grid, + gint row, + DiaFont *font, + real height, +- DiaFontSelector **fontsel, ++ GtkFontButton **fontsel, + GtkSpinButton **heightsel) + { + GtkWidget *label; +@@ -320,9 +343,10 @@ create_font_props_row (GtkGrid *grid, + label = gtk_label_new (kind); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_grid_attach (grid, label, 0, row, 1, 1); +- *fontsel = DIA_FONT_SELECTOR (dia_font_selector_new ()); ++ *fontsel = GTK_FONT_BUTTON (gtk_font_button_new ()); + gtk_widget_set_hexpand (GTK_WIDGET (*fontsel), TRUE); +- dia_font_selector_set_font (DIA_FONT_SELECTOR (*fontsel), font); ++ gtk_font_chooser_set_font_desc (GTK_FONT_CHOOSER (*fontsel), dia_font_get_description (font)); ++ gtk_font_chooser_set_level (GTK_FONT_CHOOSER (*fontsel), GTK_FONT_CHOOSER_LEVEL_FAMILY | GTK_FONT_CHOOSER_LEVEL_STYLE); + gtk_grid_attach (GTK_GRID (grid), GTK_WIDGET(*fontsel), 1, row, 1, 1); + + adj = GTK_ADJUSTMENT (gtk_adjustment_new (height, 0.1, 10.0, 0.1, 1.0, 0)); +diff --git a/objects/UML/class_dialog.h b/objects/UML/class_dialog.h +index 6bbb4b404..bf38b5613 100644 +--- a/objects/UML/class_dialog.h ++++ b/objects/UML/class_dialog.h +@@ -1,7 +1,6 @@ + #pragma once + + #include "dia-colour-selector.h" +-#include "dia-font-selector.h" + + G_BEGIN_DECLS + +@@ -32,12 +31,12 @@ struct _UMLClassDialog { + GtkToggleButton *op_supp; + GtkToggleButton *comments_vis; + GtkToggleButton *op_wrap; +- DiaFontSelector *normal_font; +- DiaFontSelector *abstract_font; +- DiaFontSelector *polymorphic_font; +- DiaFontSelector *classname_font; +- DiaFontSelector *abstract_classname_font; +- DiaFontSelector *comment_font; ++ GtkFontButton *normal_font; ++ GtkFontButton *abstract_font; ++ GtkFontButton *polymorphic_font; ++ GtkFontButton *classname_font; ++ GtkFontButton *abstract_classname_font; ++ GtkFontButton *comment_font; + GtkSpinButton *normal_font_height; + GtkSpinButton *abstract_font_height; + GtkSpinButton *polymorphic_font_height; +-- +GitLab + diff --git a/helpers/make-dia b/helpers/make-dia new file mode 100644 index 0000000..fcaee2b --- /dev/null +++ b/helpers/make-dia @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guznán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 + +. ./config + +apply_patch_changes +# See more at: https://gitlab.gnome.org/GNOME/dia/-/merge_requests/114 + +changelog "Apply MR 114 on GNOME to fix delay to open text properties" + +package + From 4634fc0d3371d2772ff94fe2908ae71a4144b9a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Guzm=C3=A1n?= Date: Thu, 12 Jun 2025 18:54:36 -0600 Subject: [PATCH 03/10] config: add start info for package helpers --- helpers/config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/helpers/config b/helpers/config index c42bcc2..96b479f 100755 --- a/helpers/config +++ b/helpers/config @@ -64,6 +64,7 @@ LP_DIFF_FILE="${PACKAGE}_${LP_VERSION}.diff.gz" LP_DSC_FILE="${PACKAGE}_${LP_VERSION}.dsc" fi +echo -e "> $PACKAGE helper build started - $(date -R)\n" if [ -n "$BUILD_UNTIL" ] && (( $(echo "$BUILD_UNTIL $REVISION" | awk '{print ($1 > $2)}') )); then echo "Skipping build of helper with BUILD_UNTIL=$BUILD_UNTIL > REVISION=$REVISION" exit 0 @@ -220,7 +221,7 @@ cd .. mv source $PACKAGE-$FULLVERSION dpkg-source -b -I.falsefileextension99 $PACKAGE-$FULLVERSION rm -rf ${LOCAL_APT} -echo -e "Trisquel source package built! - $(date -R)\n" +echo -e "> Trisquel source package built! - $(date -R)\n" notify_found_distro_match_on_debian_rules } From 1c4c985b76171714668c539757bcb33995d52b93 Mon Sep 17 00:00:00 2001 From: Ark74 Date: Sat, 14 Jun 2025 05:01:32 -0600 Subject: [PATCH 04/10] llvm-toolchain-19: fix helper format to prevent issues with watchdog. --- helpers/make-llvm-toolchain-19 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/make-llvm-toolchain-19 b/helpers/make-llvm-toolchain-19 index e5890be..81c50f7 100644 --- a/helpers/make-llvm-toolchain-19 +++ b/helpers/make-llvm-toolchain-19 @@ -18,7 +18,7 @@ # VERSION=1 -EXTERNAL='deb-src http://archive.ubuntu.com/ubuntu $UPSTREAM main universe' +EXTERNAL='deb-src http://archive.ubuntu.com/ubuntu $UPSTREAM universe' BACKPORTS=true . ./config From b0a4c0fb486c766fc9433f55033d8b4401114c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Guzm=C3=A1n?= Date: Sat, 14 Jun 2025 22:47:34 -0600 Subject: [PATCH 05/10] ubuntu-release-upgrader: start work for ecne do-release-upgrade. --- .../ubuntu-release-upgrader/DistUpgrade.cfg | 4 +- .../DistUpgrade.cfg.aramo | 93 +++++++++++++++++++ ...automatic_install_usrmerge_for_t-r-u.patch | 42 +++++++++ helpers/make-ubuntu-release-upgrader | 73 +++++++++------ 4 files changed, 182 insertions(+), 30 deletions(-) create mode 100644 helpers/DATA/ubuntu-release-upgrader/DistUpgrade.cfg.aramo create mode 100644 helpers/DATA/ubuntu-release-upgrader/patch_changes/000-automatic_install_usrmerge_for_t-r-u.patch diff --git a/helpers/DATA/ubuntu-release-upgrader/DistUpgrade.cfg b/helpers/DATA/ubuntu-release-upgrader/DistUpgrade.cfg index 8b65961..0a5bed4 100644 --- a/helpers/DATA/ubuntu-release-upgrader/DistUpgrade.cfg +++ b/helpers/DATA/ubuntu-release-upgrader/DistUpgrade.cfg @@ -68,8 +68,8 @@ BackupExt=distUpgrade LogDir=/var/log/dist-upgrade/ [Sources] -From=nabia -To=aramo +From=aramo +To=ecne ValidOrigin=Trisquel ValidMirrors = mirrors.cfg Components=main diff --git a/helpers/DATA/ubuntu-release-upgrader/DistUpgrade.cfg.aramo b/helpers/DATA/ubuntu-release-upgrader/DistUpgrade.cfg.aramo new file mode 100644 index 0000000..0a5bed4 --- /dev/null +++ b/helpers/DATA/ubuntu-release-upgrader/DistUpgrade.cfg.aramo @@ -0,0 +1,93 @@ +[View] +# the views will be tried in this order, if one fails to import, the next +# is tried +View=DistUpgradeViewGtk3,DistUpgradeViewKDE,DistUpgradeViewText +#View=DistUpgradeViewNonInteractive +#Depends= apt (>= 1.0.10.2ubuntu2) +# the views below support upgrades over ssh connection +SupportSSH=DistUpgradeViewText,DistUpgradeViewNonInteractive + +# Distro contains global information about the upgrade +[Distro] +# the meta-pkgs we support +MetaPkgs=trisquel, trisquel-mini, triskel, trisquel-sugar, trisquel-gnome +BaseMetaPkgs=trisquel-minimal, trisquel-base +IgnoredTasks=minimal, standard +Demotions=demoted.cfg +RemovalDenylistFile=removal_denylist.cfg +# if those packages were installed, make sure to keep them installed +KeepInstalledPkgs=xserver-xorg-video-all +KeepInstalledSection=translations +RemoveObsoletes=yes +PurgeObsoletes=yes +#ForcedObsoletes=ksplash-engine-moodin, powernowd, laptop-mode-tools +# hints for for stuff that should be done right after the cache calculated +# the dist-upgrade (not to be confused with the PostUpgrade hooks in the +# quirks handling) +#PostUpgradePurge=linux-restricted-modules-common +#PostUpgradeRemove=xsettings-kde +PostUpgradeRemove=resolvconf,notification-daemon +#PostUpgradeUpgrade=brasero,edubuntu-desktop +#PostUpgradeInstall=apt +#PostInstallScripts=./trisquel-postinstall.sh +EnableApport=no +# this supported deny listing certain versions to ensure we do not upgrade +# - blcr-dkms fails to build on kernel 2.6.35 +#BadVersions=blcr-dkms_0.8.2-13 +# ubiquity slideshow +#SlideshowUrl=http://people.canonical.com/~mvo/ubiquity-slideshow-upgrade/slides/ + +[trisquel] +KeyDependencies=lightdm, mate-desktop-environment, marco, ubuntu-mate-default-settings, lightdm-gtk-greeter +# those pkgs will be marked remove right after the distUpgrade in the cache +PostUpgradeRemove=casper, xscreensaver, powermanagement-interface, compiz-core, gdm, gnome-ppp, resolvconf +ForcedObsoletes= cups-pdf, notification-daemon, libcogl15, resolvconf + +[trisquel-mini] +KeyDependencies=lxde +#Remove previous gnome component from ltrisquel to avoid pulling gnome depends on upgrade (LP: #945215) +PostUpgradeRemove=casper, gnome-bluetooth, resolvconf +ForcedObsoletes= cups-pdf, notification-daemon, libcogl15, resolvconf + +[triskel] +KeyDependencies=triskel-settings-desktop, plasma-desktop, sddm +PostUpgradeRemove=powermanagement-interface, guidance-power-manager, kde-guidance-powermanager, kmix +# those packages are marked as obsolete right after the upgrade +ForcedObsoletes=ivman, gtk-qt-engine +# help the resolver a bit: LP: #1426132 +PostUpgradeInstall=baloo-kf5 + +[trisquel-sugar] +KeyDependencies=sugar, lightdm-gtk-greeter + +[trisquel-gnome] +KeyDependencies=gnome-core, gdm3 + +[Files] +BackupExt=distUpgrade +LogDir=/var/log/dist-upgrade/ + +[Sources] +From=aramo +To=ecne +ValidOrigin=Trisquel +ValidMirrors = mirrors.cfg +Components=main +Pockets=security,updates,backports +;AllowThirdParty=False + +;[PreRequists] +;Packages=release-upgrader-apt,release-upgrader-dpkg +;SourcesList=prerequists-sources.list +;SourcesList-ia64=prerequists-sources.ports.list +;SourcesList-hppa=prerequists-sources.ports.list + +[Network] +MaxRetries=3 + +[NonInteractive] +ForceOverwrite=yes +RealReboot=no +DebugBrokenScripts=no +DpkgProgressLog=no +;TerminalTimeout=2400 diff --git a/helpers/DATA/ubuntu-release-upgrader/patch_changes/000-automatic_install_usrmerge_for_t-r-u.patch b/helpers/DATA/ubuntu-release-upgrader/patch_changes/000-automatic_install_usrmerge_for_t-r-u.patch new file mode 100644 index 0000000..9d2e828 --- /dev/null +++ b/helpers/DATA/ubuntu-release-upgrader/patch_changes/000-automatic_install_usrmerge_for_t-r-u.patch @@ -0,0 +1,42 @@ +diff --git a/DistUpgrade/DistUpgradeQuirks.py b/DistUpgrade/DistUpgradeQuirks.py +index 9423f091..00d9b84c 100644 +--- a/DistUpgrade/DistUpgradeQuirks.py ++++ b/DistUpgrade/DistUpgradeQuirks.py +@@ -2000,17 +2000,27 @@ class DistUpgradeQuirks(object): + break + + if fail: +- logging.debug('System is not /usr-merged!') +- self._view.error( +- _( +- f'Cannot upgrade system with unmerged /usr' +- ), +- _( +- 'Please install the usrmerge package to fix this, ' +- 'and then try the upgrade again.' +- ), ++ logging.warning( ++ "System is not /usr-merged. Installing usrmerge before continuing..." ++ ) ++ res = subprocess.run(["apt-get", "update"]) ++ res2 = subprocess.run(["apt-get", "-y", "install", "usrmerge"]) ++ ++ if res2.returncode != 0: ++ # Installation failed, abort the upgrade with a clear message ++ self.controller.error(_( ++ "The system is not /usr-merged and 'usrmerge' could not be " ++ "installed automatically. Please install it manually and " ++ "try again." ++ )) ++ return ++ ++ # Re-check that /usr merge is now in place ++ # (ensure /bin -> /usr/bin, /lib -> /usr/lib, etc.) ++ logging.info( ++ "usrmerge installed successfully; system is now /usr-merged. " ++ "Proceeding with the upgrade." + ) +- self.controller.abort() + + def _disable_cloud_init(self): + """ diff --git a/helpers/make-ubuntu-release-upgrader b/helpers/make-ubuntu-release-upgrader index c0980e5..191cfce 100644 --- a/helpers/make-ubuntu-release-upgrader +++ b/helpers/make-ubuntu-release-upgrader @@ -1,5 +1,6 @@ #!/bin/sh # +# Copyright (C) 2025 Luis Guzmán # Copyright (C) 2008-2024 Ruben Rodriguez # Copyright (C) 2014 Santiago Rodriguez # Copyright (C) 2019 Mason Hock @@ -24,13 +25,20 @@ # Also, don't forget to update the meta-release files at archive and packages.t.i # The "obsoletes" list from ubuntu has been removed -VERSION=16 +VERSION=16.1 . ./config +# Previous upstream release name, update for each release. +PREV_UPS_REL=jammy +PREV_TRIS_REL=aramo +# Use git Mirrors.masterlist as source. +Mirrors_masterlist=$(mktemp) +Mirrors_masterlist_git="trisquel-packages/-/raw/master/extra/mirrors/Mirrors.masterlist" +TPH_GIT_URL="https://gitlab.trisquel.org/trisquel/package-helpers/" # Fix PEP440 version compatibility # https://salsa.debian.org/debian/distro-info/-/commit/e2877dc44659d034155495e91976874c209a3c02 -patch --no-backup-if-mismatch -Np1 < $DATA/pep440.patch +patch_p1 $DATA/pep440.patch #%FSDG: Remove functions to deal with proprietary drivers rm ./DistUpgrade/xorg_fix_proprietary.py @@ -226,25 +234,11 @@ trisquel-release-upgrader-core EOF rm data/mirrors.cfg -#https://mirmon.trisquel.org/conf.txt -cat << EOF > data/mirrors.cfg -https://archive.trisquel.info/trisquel/ -https://archive.trisquel.org/trisquel/ -https://mirror.fsf.org/trisquel/ -https://mirror.cedia.org.ec/trisquel.packages/ -https://mirrors.ustc.edu.cn/trisquel/ -https://ftp.caliu.cat/pub/distribucions/trisquel/packages/ -https://ftp.acc.umu.se/mirror/trisquel/packages/ -https://mirrors.ocf.berkeley.edu/trisquel/ -https://mirror.librelabucm.org/trisquel/ -https://mirror.linux.pizza/trisquel/packages/ -https://quantum-mirror.hu/mirrors/pub/trisquel/packages/ -https://mirror.csclub.uwaterloo.ca/trisquel/packages/ -https://ftpmirror1.infania.net/mirror/trisquel/packages/ -https://mirrors.nju.edu.cn/trisquel/ -https://mirror.math.princeton.edu/pub/trisquel-packages/ -https://mirrors.dotsrc.org/trisquel/ -EOF +# https://gitlab.trisquel.org/trisquel/trisquel-packages/-/tree/master/extra/mirrors +# FIXME: Propose a way to integrate from git and avoid fetching via wget/curl. +wget https://gitlab.trisquel.org/trisquel/$Mirrors_masterlist_git -o /dev/null -O $Mirrors_masterlist +python3 $DATA/../python-apt/parse-mirror-masterlist.py $Mirrors_masterlist|grep https|sort > data/mirrors.cfg +rm $Mirrors_masterlist replace changelogs.ubuntu.com packages.trisquel.org . @@ -288,16 +282,23 @@ rpl noble ecne . -R rm data/DistUpgrade.cfg* cp $DATA/DistUpgrade.cfg* data/ -cat << EOF >> data/demoted.cfg +cat << EOF | tee -a utils/demoted.cfg utils/demoted.cfg.$PREV_UPS_REL notification-daemon resolvconf eom +desktop-common EOF -sed 's|.ubuntu-bug ubuntu-release-upgrader-core. in a terminal|https://gitlab.trisquel.org/trisquel/package-helpers in a browser.|' DistUpgrade/DistUpgradeCache.py -i -replace "https*://launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+filebug" "https://gitlab.trisquel.org/trisquel/package-helpers/-/issues" . -replace "https*://launchpad.net/ubuntu/+source/ubuntu-release-upgrader" "https://gitlab.trisquel.org/trisquel/package-helpers/" . -replace "https*://bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+filebug" "https://gitlab.trisquel.org/trisquel/package-helpers/-/issues" . +for i in utils/demoted.cfg utils/demoted.cfg.$PREV_UPS_REL +do + sort -o $i $i +done +mv data/demoted.cfg.$PREV_UPS_REL data/demoted.cfg.$PREV_TRIS_REL + +sed -i "s|the command .ubuntu-bug ubuntu-release-upgrader-core. in a terminal|$TPH_GIT_URL|" DistUpgrade/DistUpgradeCache.py +replace "https*://launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+filebug" "${TPH_GIT_URL}-/issues" . +replace "https*://launchpad.net/ubuntu/+source/ubuntu-release-upgrader" "$TPH_GIT_URL" . +replace "https*://bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+filebug" "${TPH_GIT_URL}-/issues" . find -type f |xargs rename 's/ubuntu-release-upgrader/trisquel-release-upgrader/g' replace "ubuntu-release-upgrader" "trisquel-release-upgrader" . mv kubuntu-devel-release-upgrade triskel-devel-release-upgrade @@ -325,12 +326,28 @@ rpl "main restricted" "main" DistUpgrade -R replace Ubuntu Trisquel replace Canonical Trisquel replace "https*://www.ubuntu.com/" "https://trisquel.info" . -replace "https*://wiki.ubuntu.com/X/Bugs/" "https://gitlab.trisquel.org/trisquel/package-helpers/-/issues" . +replace "https*://wiki.ubuntu.com/X/Bugs/" "${TPH_GIT_URL}-/issues" . replace "https*://wiki.ubuntu.com/" "https://trisquel.info/wiki" . replace "https*://help.ubuntu.com/community" "https://trisquel.info/wiki" . +/bin/sed -i \ + -e 's/kubuntu/triskel/g' \ + -e 's/xubuntu/trisquel-mini/g' \ + -e 's/�~Lubuntu/�~Ltrisquel/g' \ + -e 's/被ubuntu/被trisquel/g' \ + -e "s#http://launchpad.net/ubuntu/+source/%s/%s/+changelog#$TPH_GIT_URL#g" \ + -e 's/<.*@ubuntu.com/ Date: Mon, 16 Jun 2025 13:14:57 -0600 Subject: [PATCH 06/10] misc: xz-utils set correct label stage --- helpers/make-xz-utils | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/make-xz-utils b/helpers/make-xz-utils index ec5c1df..4114991 100644 --- a/helpers/make-xz-utils +++ b/helpers/make-xz-utils @@ -23,7 +23,7 @@ # such packages from Debian in order to build the required udeb packages. ## -#STAGE-4-UDEBS || #STAGE-1-DEBOOTSTRAP +#STAGE-4-UDEBS VERSION=0 NETINST=true From ef970bfec6613018593b8941bec88922f572b893 Mon Sep 17 00:00:00 2001 From: Luis Guzman Date: Mon, 16 Jun 2025 13:38:24 -0600 Subject: [PATCH 07/10] kolourpaint: add icon theme recommendation for non-kde environments --- ...ecommends_icon_theme_for_kolourpaint.patch | 12 +++++++++ helpers/make-kolourpaint | 27 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 helpers/DATA/kolourpaint/patch_changes/000-add_recommends_icon_theme_for_kolourpaint.patch create mode 100644 helpers/make-kolourpaint diff --git a/helpers/DATA/kolourpaint/patch_changes/000-add_recommends_icon_theme_for_kolourpaint.patch b/helpers/DATA/kolourpaint/patch_changes/000-add_recommends_icon_theme_for_kolourpaint.patch new file mode 100644 index 0000000..89736f9 --- /dev/null +++ b/helpers/DATA/kolourpaint/patch_changes/000-add_recommends_icon_theme_for_kolourpaint.patch @@ -0,0 +1,12 @@ +diff --git a/debian/control b/debian/control +index 43e3abe5..1677a89d 100644 +--- a/debian/control ++++ b/debian/control +@@ -32,6 +32,7 @@ Package: kolourpaint + Section: graphics + Architecture: any + Depends: ${misc:Depends}, ${shlibs:Depends} ++Recommends: breeze-icon-theme + Breaks: kolourpaint4 (<< 4:17.04) + Replaces: kolourpaint4 (<< 4:17.04) + Description: simple image editor and drawing application diff --git a/helpers/make-kolourpaint b/helpers/make-kolourpaint new file mode 100644 index 0000000..279e8f5 --- /dev/null +++ b/helpers/make-kolourpaint @@ -0,0 +1,27 @@ +#!/bin/sh +# +# Copyright (C) 2025 Luis Guzmán +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +VERSION=1 +. ./config + +apply_patch_changes + +changelog "Set icon theme recommendation for non-KDE environments" + +package From 157554638da019a0210004d5b66ec18e70da917b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Guzm=C3=A1n?= Date: Tue, 17 Jun 2025 00:15:21 -0600 Subject: [PATCH 08/10] cron: correct copyright on crontab2english.pl (fixes TPH # 199) --- helpers/DATA/cron/license-info-fix.patch | 37 ++++++++++++++++++++++++ helpers/make-cron | 9 +++--- 2 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 helpers/DATA/cron/license-info-fix.patch diff --git a/helpers/DATA/cron/license-info-fix.patch b/helpers/DATA/cron/license-info-fix.patch new file mode 100644 index 0000000..b6221bd --- /dev/null +++ b/helpers/DATA/cron/license-info-fix.patch @@ -0,0 +1,37 @@ +diff --git a/debian/copyright b/debian/copyright +index 3c8824f..c6ec81a 100644 +--- a/debian/copyright ++++ b/debian/copyright +@@ -38,7 +38,7 @@ License: GPL-2+ + + Files: debian/examples/crontab2english.pl + Copyright: 2001, Sean M. Burke +-License: Artistic ++License: GPL-1+ or Artistic + + License: Paul-Vixie's-license + Distribute freely, except: don't remove my name from the source or +@@ -67,6 +67,23 @@ License: GPL-2+ + On Debian systems, the complete text of the GNU General + Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". + ++License: GPL-1+ ++ This package is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 1 of the License, or ++ (at your option) any later version. ++ . ++ This package is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ . ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see ++ . ++ On Debian systems, the complete text of the GNU General ++ Public License version 1 can be found in "/usr/share/common-licenses/GPL-1". ++ + License: Artistic + This program is free software; you can redistribute it and/or modify it + under the terms of the "Artistic License" which comes with Debian. diff --git a/helpers/make-cron b/helpers/make-cron index 3f6c3de..1b70b03 100644 --- a/helpers/make-cron +++ b/helpers/make-cron @@ -17,15 +17,14 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=1 +VERSION=2 +BUILD_UNTIL=12 . ./config -rm debian/examples/crontab2english.pl +patch_p1 $DATA/license-info-fix.patch -sed '/crontab2english.pl/,/License: Artistic/d;/License: Artistic/,/common-licenses/d' -i debian/copyright - -changelog "Removed non-free example #10868" +changelog "Corrected license info (package-helpers issue #199)" package From 470773fdbaac4e6b316fe201d702740384b108d0 Mon Sep 17 00:00:00 2001 From: Ark74 Date: Sat, 21 Jun 2025 00:38:30 -0600 Subject: [PATCH 09/10] yt-dlp: enable abrowser to use 'cookies-from-browser' feature --- ...t_for_firefox_based_browser_abrowser.patch | 102 ++++++++++++++++++ helpers/make-yt-dlp | 4 +- 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 helpers/DATA/yt-dlp/patch_changes/000-add_cookies_support_for_firefox_based_browser_abrowser.patch diff --git a/helpers/DATA/yt-dlp/patch_changes/000-add_cookies_support_for_firefox_based_browser_abrowser.patch b/helpers/DATA/yt-dlp/patch_changes/000-add_cookies_support_for_firefox_based_browser_abrowser.patch new file mode 100644 index 0000000..ddcb270 --- /dev/null +++ b/helpers/DATA/yt-dlp/patch_changes/000-add_cookies_support_for_firefox_based_browser_abrowser.patch @@ -0,0 +1,102 @@ +Enables Firefox based browser 'Abrowser' with custom folder (.mozilla/abrowser) +to use the --cookies-from-browser feature, might also work for other customized +browser in similar cases. + + +diff --git a/yt_dlp/cookies.py b/yt_dlp/cookies.py +index 5675445a..7afd324b 100644 +--- a/yt_dlp/cookies.py ++++ b/yt_dlp/cookies.py +@@ -47,7 +47,7 @@ + from .utils.networking import normalize_url + + CHROMIUM_BASED_BROWSERS = {'brave', 'chrome', 'chromium', 'edge', 'opera', 'vivaldi', 'whale'} +-SUPPORTED_BROWSERS = CHROMIUM_BASED_BROWSERS | {'firefox', 'safari'} ++SUPPORTED_BROWSERS = CHROMIUM_BASED_BROWSERS | {'abrowser', 'firefox', 'safari'} + + + class YDLLogger(_YDLLogger): +@@ -114,8 +114,8 @@ def load_cookies(cookie_file, browser_specification, ydl): + + + def extract_cookies_from_browser(browser_name, profile=None, logger=YDLLogger(), *, keyring=None, container=None): +- if browser_name == 'firefox': +- return _extract_firefox_cookies(profile, container, logger) ++ if browser_name in ('firefox', 'abrowser'): ++ return _extract_firefox_cookies(profile, container, logger, browser_name) + elif browser_name == 'safari': + return _extract_safari_cookies(profile, logger) + elif browser_name in CHROMIUM_BASED_BROWSERS: +@@ -124,15 +124,15 @@ def extract_cookies_from_browser(browser_name, profile=None, logger=YDLLogger(), + raise ValueError(f'unknown browser: {browser_name}') + + +-def _extract_firefox_cookies(profile, container, logger): +- logger.info('Extracting cookies from firefox') ++def _extract_firefox_cookies(profile, container, logger, browser_name): ++ logger.info(f'Extracting cookies from {browser_name}') + if not sqlite3: +- logger.warning('Cannot extract cookies from firefox without sqlite3 support. ' ++ logger.warning(f'Cannot extract cookies from {browser_name} without sqlite3 support. ' + 'Please use a Python interpreter compiled with sqlite3 support') + return YoutubeDLCookieJar() + + if profile is None: +- search_roots = list(_firefox_browser_dirs()) ++ search_roots = list(_firefox_browser_dirs(browser_name)) + elif _is_path(profile): + search_roots = [profile] + else: +@@ -141,7 +141,7 @@ def _extract_firefox_cookies(profile, container, logger, browser_name): + + cookie_database_path = _newest(_firefox_cookie_dbs(search_roots)) + if cookie_database_path is None: +- raise FileNotFoundError(f'could not find firefox cookies database in {search_root}') ++ raise FileNotFoundError(f'could not find {browser_name} cookies database in {search_root}') + logger.debug(f'Extracting cookies from: "{cookie_database_path}"') + + container_id = None +@@ -156,7 +156,7 @@ def _extract_firefox_cookies(profile, container, logger, browser_name): + try_call(lambda: re.fullmatch(r'userContext([^\.]+)\.label', context['l10nID']).group()), + )), None) + if not isinstance(container_id, int): +- raise ValueError(f'could not find firefox container "{container}" in containers.json') ++ raise ValueError(f'could not find {browser_name} container "{container}" in containers.json') + + with tempfile.TemporaryDirectory(prefix='yt_dlp') as tmpdir: + cursor = None +@@ -164,7 +164,7 @@ def _extract_firefox_cookies(profile, container, logger, browser_name): + cursor = _open_database_copy(cookie_database_path, tmpdir) + if isinstance(container_id, int): + logger.debug( +- f'Only loading cookies from firefox container "{container}", ID {container_id}') ++ f'Only loading cookies from {browser_name} container "{container}", ID {container_id}') + cursor.execute( + 'SELECT host, name, value, path, expiry, isSecure FROM moz_cookies WHERE originAttributes LIKE ? OR originAttributes LIKE ?', + (f'%userContextId={container_id}', f'%userContextId={container_id}&%')) +@@ -186,14 +186,14 @@ def _extract_firefox_cookies(profile, container, logger): + path=path, path_specified=bool(path), secure=is_secure, expires=expiry, discard=False, + comment=None, comment_url=None, rest={}) + jar.set_cookie(cookie) +- logger.info(f'Extracted {len(jar)} cookies from firefox') ++ logger.info(f'Extracted {len(jar)} cookies from {browser_name}') + return jar + finally: + if cursor is not None: + cursor.connection.close() + + +-def _firefox_browser_dirs(): ++def _firefox_browser_dirs(browser_name='firefox'): + if sys.platform in ('cygwin', 'win32'): + yield from map(os.path.expandvars, ( + R'%APPDATA%\Mozilla\Firefox\Profiles', +@@ -205,7 +205,7 @@ def _firefox_browser_dirs(): + + else: + yield from map(os.path.expanduser, ( +- '~/.mozilla/firefox', ++ f'~/.mozilla/{browser_name}', + '~/snap/firefox/common/.mozilla/firefox', + '~/.var/app/org.mozilla.firefox/.mozilla/firefox', + )) diff --git a/helpers/make-yt-dlp b/helpers/make-yt-dlp index 5081c6f..cd529bc 100644 --- a/helpers/make-yt-dlp +++ b/helpers/make-yt-dlp @@ -17,7 +17,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=1 +VERSION=2 EXTERNAL='deb-src http://deb.debian.org/debian sid main' REPOKEY=0E98404D386FA1D9 BACKPORTS=true @@ -32,6 +32,8 @@ sed -i "/Currently supported/s|are:|are at:|" debian/control [ "$SUPPORTED_SITES" != "$(tail -n2 debian/control|awk NF|sed 's|^ ||')" ] && \ echo -e ">>>Site replacement needs fixing, exiting...<<<\n" && exit +apply_patch_changes + changelog "Remove explicit site listing, redirecting to website author." package From 8b0848ffba2c29b478869613f36f296c44b55244 Mon Sep 17 00:00:00 2001 From: Ark74 Date: Sat, 21 Jun 2025 20:51:40 -0600 Subject: [PATCH 10/10] =?UTF-8?q?config:=20agregar=20personalizaci=C3=B3n?= =?UTF-8?q?=20del=20CMXSL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- helpers/config | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/helpers/config b/helpers/config index 96b479f..b39e4e7 100755 --- a/helpers/config +++ b/helpers/config @@ -38,18 +38,18 @@ fi [ -d PACKAGES ] || mkdir PACKAGES export DEBIAN_FRONTEND=noninteractive -export DEBEMAIL=trisquel-devel@listas.trisquel.info -export DEBFULLNAME="Trisquel GNU/Linux developers" +export DEBEMAIL=devel@cmxsl.org +export DEBFULLNAME="Desarrollo CMXSL" export CODENAME=ecne export REVISION=12.0 -export RELEASE=trisquel -export DOMAIN=trisquel.info +export RELEASE=cmxsl +export DOMAIN=cmxsl.org export UPSTREAM=noble export UPSTREAMRELEASE=24.04 -MIRROR=http://mirrors.ocf.berkeley.edu/ubuntu/ +MIRROR=http://archive.ubuntu.com/ubuntu/ LOCALMIRROR=http://archive.trisquel.org/trisquel -GIT_TPH_REPO=https://gitlab.trisquel.org/trisquel/package-helpers -LOCAL_APT=`mktemp -d` +GIT_TPH_REPO=https://git.cmxsl.org/CMXSL.org/package-helpers-cmxsl +LOCAL_APT=`mktemp -d` if [[ "$PACKAGE" =~ ^linux(-hwe-[0-9]+\.[0-9]+)?$ && -n "$LP_VERSION" ]]; then # Function to truncate the version string to the major version (e.g., 6.5.0) truncate_version() { @@ -89,7 +89,7 @@ head -n 1 debian/changelog | grep -q $UPSTREAM-security && REPO=$CODENAME-securi echo | dch -D $REPO -v $FULLVERSION "$1" # Make sure the changelog file is identical between archs -/bin/sed "/-- Trisquel/s/.*/ -- Trisquel GNU\/Linux developers $DATE/" -i debian/changelog +/bin/sed "/-- Desarrollo/s/.*/ -- Desarrollo CMXSL $DATE/" -i debian/changelog } @@ -196,7 +196,7 @@ cd source UPSTREAMVERSION=$(dpkg-parsechangelog --show-field Version) -export FULLVERSION=$(dpkg-parsechangelog --show-field Version)trisquel${VERSION} +export FULLVERSION=$(dpkg-parsechangelog --show-field Version)cmxsl${VERSION} # Use 3.0 (native) deb source format [ -f debian/source/format ] && echo "3 (native)" > debian/source/format @@ -221,7 +221,7 @@ cd .. mv source $PACKAGE-$FULLVERSION dpkg-source -b -I.falsefileextension99 $PACKAGE-$FULLVERSION rm -rf ${LOCAL_APT} -echo -e "> Trisquel source package built! - $(date -R)\n" +echo -e "> CMXSL source package built! - $(date -R)\n" notify_found_distro_match_on_debian_rules }