summaryrefslogtreecommitdiff
path: root/graphics/darktable/files
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/darktable/files')
-rw-r--r--graphics/darktable/files/patch-git-0cc770a2e21ced661c5363c5733eb13ac743374885
-rw-r--r--graphics/darktable/files/patch-git-5db7918176ca45a24e9ea5b2a7bdbce89834305946
-rw-r--r--graphics/darktable/files/patch-git-727ad35663589dc046c557787f0c1c34a45fb4af23
-rw-r--r--graphics/darktable/files/patch-git-b4e81416381fd7a1e189a4fc4d8b3836906ddd2b154
-rw-r--r--graphics/darktable/files/patch-git-dd5e98050bbd3b726cf1577042f03de734eaf64223
-rw-r--r--graphics/darktable/files/patch-git-e00a758e6164389e845308f3615c3754dd04c71227
-rw-r--r--graphics/darktable/files/patch-git-eac87cf0c41ef6d2190cd88cd9379a288edba1fa30
7 files changed, 388 insertions, 0 deletions
diff --git a/graphics/darktable/files/patch-git-0cc770a2e21ced661c5363c5733eb13ac7433748 b/graphics/darktable/files/patch-git-0cc770a2e21ced661c5363c5733eb13ac7433748
new file mode 100644
index 000000000000..4127a55bb2ba
--- /dev/null
+++ b/graphics/darktable/files/patch-git-0cc770a2e21ced661c5363c5733eb13ac7433748
@@ -0,0 +1,85 @@
+From 0cc770a2e21ced661c5363c5733eb13ac7433748 Mon Sep 17 00:00:00 2001
+From: Martin Straeten <39386816+MStraeten@users.noreply.github.com>
+Date: Fri, 27 Jun 2025 17:06:45 +0200
+Subject: [PATCH] reset window placement if last position is out of available
+ display space (#18988)
+
+* reset window if position is out of display space
+
+on initialisation darktable moves the window to the last position even thats outside of the available displays.
+
+_valid_window_placement checks for an overlay with an existing display
+
+dt_gui_gtk_load_config() resets position to default if there's no overlap
+
+* 24 pixel as a border
+
+a border of 24 pixels is used to define the effective area that must be overlapped from the last window position to avoid a reset of position
+
+* stile fixes
+
+one parameter per line
+several const additions
+---
+ src/gui/gtk.c | 41 ++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 40 insertions(+), 1 deletion(-)
+
+diff --git a/src/gui/gtk.c b/src/gui/gtk.c
+index 671d87345850..a620dcb42332 100644
+--- src/gui/gtk.c
++++ b/src/gui/gtk.c
+@@ -773,6 +773,42 @@ static gboolean _scrollbar_changed(GtkWidget *widget,
+ return TRUE;
+ }
+
++gboolean _valid_window_placement( const gint saved_x,
++ const gint saved_y,
++ const gint window_width,
++ const gint window_height,
++ const gint border)
++{
++ GdkDisplay *display = gdk_display_get_default();
++ const gint n_monitors = gdk_display_get_n_monitors(display);
++
++ // check each monitor
++ for(gint i = 0; i < n_monitors; i++)
++ {
++ GdkMonitor *monitor = gdk_display_get_monitor(display, i);
++ GdkRectangle geometry;
++ gdk_monitor_get_geometry(monitor, &geometry);
++
++ // Calculate effective area excluding border
++ const gint eff_x = geometry.x + border;
++ const gint eff_y = geometry.y + border;
++ const gint eff_width = geometry.width - (2 * border);
++ const gint eff_height = geometry.height - (2 * border);
++
++ if(eff_width <= 0 || eff_height <= 0) continue;
++
++ // Check overlap
++ const gboolean x_overlap = (saved_x < eff_x + eff_width) && (saved_x + window_width > eff_x);
++ const gboolean y_overlap = (saved_y < eff_y + eff_height) && (saved_y + window_height > eff_y);
++
++ if(x_overlap && y_overlap)
++ {
++ return TRUE;
++ }
++ }
++ return FALSE;
++}
++
+ int dt_gui_gtk_load_config()
+ {
+ dt_pthread_mutex_lock(&darktable.gui->mutex);
+@@ -784,7 +820,10 @@ int dt_gui_gtk_load_config()
+ const gint y = MAX(0, dt_conf_get_int("ui_last/window_y"));
+
+ gtk_window_resize(GTK_WINDOW(widget), width, height);
+- gtk_window_move(GTK_WINDOW(widget), x, y);
++ if(_valid_window_placement(x, y, width, height, 24))
++ gtk_window_move(GTK_WINDOW(widget), x, y);
++ else
++ gtk_window_move(GTK_WINDOW(widget), 0, 0);
+ const gboolean fullscreen = dt_conf_get_bool("ui_last/fullscreen");
+
+ if(fullscreen)
diff --git a/graphics/darktable/files/patch-git-5db7918176ca45a24e9ea5b2a7bdbce898343059 b/graphics/darktable/files/patch-git-5db7918176ca45a24e9ea5b2a7bdbce898343059
new file mode 100644
index 000000000000..cabdbe858e29
--- /dev/null
+++ b/graphics/darktable/files/patch-git-5db7918176ca45a24e9ea5b2a7bdbce898343059
@@ -0,0 +1,46 @@
+From 5db7918176ca45a24e9ea5b2a7bdbce898343059 Mon Sep 17 00:00:00 2001
+From: Mario Zimmermann <mail@zisoft.de>
+Date: Mon, 23 Jun 2025 13:36:33 +0200
+Subject: [PATCH] use full metadata tag name for variable substitution
+
+---
+ src/common/variables.c | 4 +---
+ src/gui/gtkentry.c | 2 +-
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/common/variables.c b/src/common/variables.c
+index b8deed704af0..2746a7cf8647 100644
+--- src/common/variables.c
++++ b/src/common/variables.c
+@@ -953,9 +953,8 @@ static char *_get_base_value(dt_variables_params_t *params, char **variable)
+ for(GList* iter = dt_metadata_get_list(); iter; iter = iter->next)
+ {
+ dt_metadata_t *metadata = (dt_metadata_t *)iter->data;
+- gchar *prefix = g_utf8_strup(dt_metadata_get_tag_subkey(metadata->tagname), -1);
+ gboolean found = FALSE;
+- if(_has_prefix(variable, prefix))
++ if(_has_prefix(variable, metadata->tagname))
+ {
+ GList *res = dt_metadata_get(params->imgid, metadata->tagname, NULL);
+ if(res != NULL)
+@@ -963,7 +962,6 @@ static char *_get_base_value(dt_variables_params_t *params, char **variable)
+ g_list_free_full(res, g_free);
+ found = TRUE;
+ }
+- g_free(prefix);
+ if(found) break;
+ }
+ dt_pthread_mutex_unlock(&darktable.metadata_threadsafe);
+diff --git a/src/gui/gtkentry.c b/src/gui/gtkentry.c
+index b4acc9ccc8ad..db200eff47a9 100644
+--- src/gui/gtkentry.c
++++ b/src/gui/gtkentry.c
+@@ -291,7 +291,7 @@ void dt_gtkentry_variables_add_metadata(dt_metadata_t *metadata)
+ {
+ GtkTreeIter iter;
+
+- gchar *varname = g_utf8_strup(dt_metadata_get_tag_subkey(metadata->tagname), -1);
++ gchar *varname = g_strdup(metadata->tagname);
+ gchar *description = g_strdup_printf("$(%s) - %s", varname, _("from metadata"));
+ gtk_list_store_append(_completion_model, &iter);
+ gtk_list_store_set(_completion_model, &iter,
diff --git a/graphics/darktable/files/patch-git-727ad35663589dc046c557787f0c1c34a45fb4af b/graphics/darktable/files/patch-git-727ad35663589dc046c557787f0c1c34a45fb4af
new file mode 100644
index 000000000000..2cf87c412f38
--- /dev/null
+++ b/graphics/darktable/files/patch-git-727ad35663589dc046c557787f0c1c34a45fb4af
@@ -0,0 +1,23 @@
+From 727ad35663589dc046c557787f0c1c34a45fb4af Mon Sep 17 00:00:00 2001
+From: Hanno Schwalm <hanno@schwalm-bremen.de>
+Date: Sun, 29 Jun 2025 06:07:42 +0200
+Subject: [PATCH] Fix non-raw OpenCL rastermask codepath
+
+Using the correct OpenCL interpolator
+---
+ src/iop/rasterfile.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/iop/rasterfile.c b/src/iop/rasterfile.c
+index 9f774b3c86cb..4e582861be70 100644
+--- src/iop/rasterfile.c
++++ b/src/iop/rasterfile.c
+@@ -378,7 +378,7 @@ int process_cl(dt_iop_module_t *self,
+ if(visual) return err;
+
+ if(roi_out->scale != roi_in->scale && ch == 4)
+- err = dt_iop_clip_and_zoom_roi_cl(devid, dev_out, dev_in, roi_out, roi_in);
++ err = dt_iop_clip_and_zoom_cl(devid, dev_out, dev_in, roi_out, roi_in);
+ else
+ {
+ size_t iorigin[] = { roi_out->x, roi_out->y, 0 };
diff --git a/graphics/darktable/files/patch-git-b4e81416381fd7a1e189a4fc4d8b3836906ddd2b b/graphics/darktable/files/patch-git-b4e81416381fd7a1e189a4fc4d8b3836906ddd2b
new file mode 100644
index 000000000000..666c92431acb
--- /dev/null
+++ b/graphics/darktable/files/patch-git-b4e81416381fd7a1e189a4fc4d8b3836906ddd2b
@@ -0,0 +1,154 @@
+From b4e81416381fd7a1e189a4fc4d8b3836906ddd2b Mon Sep 17 00:00:00 2001
+From: Pascal Obry <pascal@obry.net>
+Date: Tue, 17 Jun 2025 17:35:04 +0200
+Subject: [PATCH] Fix memory leak when using dt_util_localize_segmented_name.
+
+---
+ src/common/history.c | 8 +++++---
+ src/common/presets.c | 14 +++++++-------
+ src/common/presets.h | 8 ++++----
+ src/develop/imageop.c | 6 +++++-
+ src/gui/styles_dialog.c | 12 +++++++-----
+ 5 files changed, 28 insertions(+), 20 deletions(-)
+
+diff --git a/src/common/history.c b/src/common/history.c
+index 94b370c140f7..3fa458999ed7 100644
+--- src/common/history.c
++++ b/src/common/history.c
+@@ -1,6 +1,6 @@
+ /*
+ This file is part of darktable,
+- Copyright (C) 2010-2024 darktable developers.
++ Copyright (C) 2010-2025 darktable developers.
+
+ darktable is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -1023,13 +1023,15 @@ char *dt_history_get_name_label(const char *name,
+ }
+ else
+ {
+- const char *l_label = hand_edited
+- ? label
++ char *l_label = hand_edited
++ ? g_strdup (label)
+ : dt_util_localize_segmented_name(label, FALSE);
+
+ result = markup
+ ? g_markup_printf_escaped("%s • <small>%s</small>", name, l_label)
+ : g_markup_printf_escaped("%s • %s", name, l_label);
++
++ g_free(l_label);
+ }
+
+ return result;
+diff --git a/src/common/presets.c b/src/common/presets.c
+index a22dc8935c56..50fab77749dc 100644
+--- src/common/presets.c
++++ b/src/common/presets.c
+@@ -428,7 +428,7 @@ char *dt_presets_get_module_label(const char *module_name,
+ const char *name = (const char *)sqlite3_column_text(stmt, 0);
+ const char *multi_name = (const char *)sqlite3_column_text(stmt, 1);
+ if(multi_name && (strlen(multi_name) == 0 || multi_name[0] != ' '))
+- result = g_strdup(dt_presets_get_multi_name(name, multi_name, FALSE));
++ result = dt_presets_get_multi_name(name, multi_name, FALSE);
+ }
+ g_free(query);
+ sqlite3_finalize(stmt);
+@@ -436,9 +436,9 @@ char *dt_presets_get_module_label(const char *module_name,
+ return result;
+ }
+
+-const char *dt_presets_get_multi_name(const char *name,
+- const char *multi_name,
+- const gboolean localize)
++char *dt_presets_get_multi_name(const char *name,
++ const char *multi_name,
++ const gboolean localize)
+ {
+ const gboolean auto_module = dt_conf_get_bool("darkroom/ui/auto_module_name_update");
+
+@@ -446,10 +446,10 @@ const char *dt_presets_get_multi_name(const char *name,
+ // in non auto-update mode : use only the multi_name if defined
+ if(auto_module)
+ return strlen(multi_name) > 0
+- ? multi_name
+- : (localize ? dt_util_localize_segmented_name(name, FALSE) : name);
++ ? g_strdup(multi_name)
++ : (localize ? dt_util_localize_segmented_name(name, FALSE) : g_strdup(name));
+ else
+- return strlen(multi_name) > 0 ? multi_name : "";
++ return g_strdup(strlen(multi_name) > 0 ? multi_name : "");
+ }
+
+ // clang-format off
+diff --git a/src/common/presets.h b/src/common/presets.h
+index b493b543b1db..fe4c65fc3960 100644
+--- src/common/presets.h
++++ b/src/common/presets.h
+@@ -1,6 +1,6 @@
+ /*
+ This file is part of darktable,
+- Copyright (C) 2019-2023 darktable developers.
++ Copyright (C) 2019-2025 darktable developers.
+
+ darktable is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -42,9 +42,9 @@ char *dt_presets_get_module_label(const char *module_name,
+ and the recorded preset's multi_name. This depends on the preference
+ darkroom/ui/auto_module_name_update
+ */
+-const char *dt_presets_get_multi_name(const char *name,
+- const char *multi_name,
+- const gboolean localize);
++char *dt_presets_get_multi_name(const char *name,
++ const char *multi_name,
++ const gboolean localize);
+
+ /** get currently active preset name for the module */
+ gchar *dt_get_active_preset_name(dt_iop_module_t *module, gboolean *writeprotect);
+diff --git a/src/develop/imageop.c b/src/develop/imageop.c
+index b2886b8d274e..13386fb6286b 100644
+--- src/develop/imageop.c
++++ b/src/develop/imageop.c
+@@ -1198,7 +1198,11 @@ static void _iop_panel_name(dt_iop_module_t *module)
+ if(module->multi_name_hand_edited)
+ new_label = g_strdup_printf("• %s", module->multi_name);
+ else
+- new_label = g_strdup_printf("• %s", dt_util_localize_segmented_name(module->multi_name, FALSE));
++ {
++ char *loc = dt_util_localize_segmented_name(module->multi_name, FALSE);
++ new_label = g_strdup_printf("• %s", loc);
++ g_free(loc);
++ }
+ gtk_widget_set_name(GTK_WIDGET(iname), "iop-module-name");
+ }
+ }
+diff --git a/src/gui/styles_dialog.c b/src/gui/styles_dialog.c
+index c4fc24704e9f..75474de98793 100644
+--- src/gui/styles_dialog.c
++++ b/src/gui/styles_dialog.c
+@@ -1,6 +1,6 @@
+ /*
+ This file is part of darktable,
+- Copyright (C) 2010-2024 darktable developers.
++ Copyright (C) 2010-2025 darktable developers.
+
+ darktable is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -1003,10 +1003,12 @@ GtkWidget *dt_gui_style_content_dialog(char *name, const dt_imgid_t imgid)
+
+ if(i->multi_name && strlen(i->multi_name) > 0)
+ {
+- snprintf(mn, sizeof(mn), "(%s)",
+- i->multi_name_hand_edited
+- ? i->multi_name
+- : dt_util_localize_segmented_name(i->multi_name, TRUE));
++ char *mname = i->multi_name_hand_edited
++ ? g_strdup(i->multi_name)
++ : dt_util_localize_segmented_name(i->multi_name, TRUE);
++
++ snprintf(mn, sizeof(mn), "(%s)", mname);
++ g_free(mname);
+ }
+ else
+ {
diff --git a/graphics/darktable/files/patch-git-dd5e98050bbd3b726cf1577042f03de734eaf642 b/graphics/darktable/files/patch-git-dd5e98050bbd3b726cf1577042f03de734eaf642
new file mode 100644
index 000000000000..9b218f023472
--- /dev/null
+++ b/graphics/darktable/files/patch-git-dd5e98050bbd3b726cf1577042f03de734eaf642
@@ -0,0 +1,23 @@
+From dd5e98050bbd3b726cf1577042f03de734eaf642 Mon Sep 17 00:00:00 2001
+From: Pascal Obry <pascal@obry.net>
+Date: Tue, 17 Jun 2025 17:34:51 +0200
+Subject: [PATCH] snapshots: Ensure the entry fill all the widget while
+ editing.
+
+---
+ src/libs/snapshots.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/libs/snapshots.c b/src/libs/snapshots.c
+index bf0909f757e7..9c2fd0c23c76 100644
+--- src/libs/snapshots.c
++++ b/src/libs/snapshots.c
+@@ -558,7 +558,7 @@ static void _init_snapshot_entry(dt_lib_module_t *self, dt_lib_snapshot_t *s)
+ gtk_widget_set_halign(s->name, GTK_ALIGN_START);
+
+ s->entry = gtk_entry_new();
+- gtk_widget_set_halign(s->entry, GTK_ALIGN_START);
++ gtk_widget_set_halign(s->entry, GTK_ALIGN_FILL);
+ g_signal_connect(G_OBJECT(s->entry), "activate",
+ G_CALLBACK(_entry_activated_callback), self);
+
diff --git a/graphics/darktable/files/patch-git-e00a758e6164389e845308f3615c3754dd04c712 b/graphics/darktable/files/patch-git-e00a758e6164389e845308f3615c3754dd04c712
new file mode 100644
index 000000000000..67331abd7b4c
--- /dev/null
+++ b/graphics/darktable/files/patch-git-e00a758e6164389e845308f3615c3754dd04c712
@@ -0,0 +1,27 @@
+From e00a758e6164389e845308f3615c3754dd04c712 Mon Sep 17 00:00:00 2001
+From: Mario Zimmermann <mail@zisoft.de>
+Date: Fri, 27 Jun 2025 20:05:23 +0200
+Subject: [PATCH] fix screen dpi setting has no effect
+
+---
+ src/gui/gtk.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/gui/gtk.c b/src/gui/gtk.c
+index a620dcb42332..d62411e9d6ef 100644
+--- src/gui/gtk.c
++++ b/src/gui/gtk.c
+@@ -1630,10 +1630,10 @@ double dt_get_screen_resolution(GtkWidget *widget)
+ screen_dpi = 96.0;
+ strncpy(opt_str, "(default value)", sizeof(opt_str));
+ }
+- gdk_screen_set_resolution(gtk_widget_get_screen(widget), screen_dpi);
+- dt_print(DT_DEBUG_CONTROL, "[screen resolution] setting the screen resolution to %f dpi %s",
+- screen_dpi, opt_str);
+ }
++ gdk_screen_set_resolution(gtk_widget_get_screen(widget), screen_dpi);
++ dt_print(DT_DEBUG_CONTROL, "[screen resolution] setting the screen resolution to %f dpi %s",
++ screen_dpi, opt_str);
+ return screen_dpi;
+ }
+
diff --git a/graphics/darktable/files/patch-git-eac87cf0c41ef6d2190cd88cd9379a288edba1fa b/graphics/darktable/files/patch-git-eac87cf0c41ef6d2190cd88cd9379a288edba1fa
new file mode 100644
index 000000000000..2f3bf38c170c
--- /dev/null
+++ b/graphics/darktable/files/patch-git-eac87cf0c41ef6d2190cd88cd9379a288edba1fa
@@ -0,0 +1,30 @@
+From eac87cf0c41ef6d2190cd88cd9379a288edba1fa Mon Sep 17 00:00:00 2001
+From: Pascal Obry <pascal@obry.net>
+Date: Fri, 27 Jun 2025 08:14:30 +0200
+Subject: [PATCH] Fix compilation when OpenMP is disabled.
+
+Fixes #19006.
+---
+ src/common/darktable.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/common/darktable.c b/src/common/darktable.c
+index 11f86b0330a8..e5feaf63eddd 100644
+--- src/common/darktable.c
++++ b/src/common/darktable.c
+@@ -1193,10 +1193,13 @@ int dt_init(int argc, char *argv[], const gboolean init_gui, const gboolean load
+ if(desired > possible)
+ dt_print(DT_DEBUG_ALWAYS,
+ "[dt_init --threads] requested %d ompthreads restricted to %d",
+- desired, possible);
++ desired, possible);
++#ifdef _OPENMP
+ dt_print(DT_DEBUG_ALWAYS,
+ "[dt_init --threads] using %d threads of %d for openmp parallel sections %s",
+- darktable.num_openmp_threads, (int)dt_get_num_procs(), omp_get_dynamic() ? "(dynamic)" : "(static)");
++ darktable.num_openmp_threads, (int)dt_get_num_procs(),
++ omp_get_dynamic() ? "(dynamic)" : "(static)");
++#endif
+ k++;
+ argv[k-1] = NULL;
+ argv[k] = NULL;