42 gboolean sensitive =
FALSE;
54static gboolean
undo_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
81 gboolean sensitive =
FALSE;
94static gboolean
redo_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
111static gboolean
compress_history_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
118 if(is_darkroom_image_in_list)
138static gboolean
delete_history_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
147 if(is_darkroom_image_in_list)
155 if(is_darkroom_image_in_list)
167static gboolean
copy_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
172 dt_control_log(_(
"Copy is allowed only with exactly one image selected"));
181 if(is_darkroom_image_in_list)
194static gboolean
copy_parts_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
199 dt_control_log(_(
"Copy is allowed only with exactly one image selected"));
208 if(is_darkroom_image_in_list)
226static gboolean
paste_all_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
237 "history/paste/mode",
238 "history/paste/copy_iop_order",
257static gboolean
paste_parts_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
268 "history/paste/mode",
269 "history/paste/copy_iop_order",
296static gboolean
load_xmp_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
303 GtkFileChooserNative *filechooser = gtk_file_chooser_native_new(
304 _(
"open sidecar file"), GTK_WINDOW(win), GTK_FILE_CHOOSER_ACTION_OPEN,
305 _(
"_open"), _(
"_cancel"));
306 gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(filechooser),
FALSE);
311 const int32_t imgid = GPOINTER_TO_INT(imgs->data);
317 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(filechooser), pathname);
333 GtkFileFilter *filter;
334 filter = GTK_FILE_FILTER(gtk_file_filter_new());
335 gtk_file_filter_add_pattern(filter,
"*.xmp");
336 gtk_file_filter_add_pattern(filter,
"*.XMP");
337 gtk_file_filter_set_name(filter, _(
"XMP sidecar files"));
338 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filechooser), filter);
340 filter = GTK_FILE_FILTER(gtk_file_filter_new());
341 gtk_file_filter_add_pattern(filter,
"*");
342 gtk_file_filter_set_name(filter, _(
"all files"));
343 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filechooser), filter);
345 if(gtk_native_dialog_run(GTK_NATIVE_DIALOG(filechooser)) == GTK_RESPONSE_ACCEPT)
347 gchar *dtfilename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooser));
351 = gtk_message_dialog_new(GTK_WINDOW(win), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR,
352 GTK_BUTTONS_CLOSE, _(
"error loading file '%s'"), dtfilename);
353#ifdef GDK_WINDOWING_QUARTZ
356 gtk_dialog_run(GTK_DIALOG(dialog));
357 gtk_widget_destroy(dialog);
375 g_object_unref(filechooser);
381static gboolean
duplicate_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
404static gboolean
new_history_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
422 dt_control_log(_(
"Creating new historys needs selected images to work"));
427static gboolean
shortcuts_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
433static gboolean
history_append_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
444static gboolean
history_prepend_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
456 GdkModifierType mods, gpointer user_data)
467static gboolean
copy_iop_order_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
478static gboolean
paste_ask_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
491 add_sub_menu_entry(menus, lists, _(
"Undo"), index, NULL,
undo_callback, NULL, NULL,
undo_sensitive_callback, GDK_KEY_z, GDK_CONTROL_MASK);
493 add_sub_menu_entry(menus, lists, _(
"Redo"), index, NULL,
redo_callback, NULL, NULL,
redo_sensitive_callback, GDK_KEY_y, GDK_CONTROL_MASK);
497 add_sub_menu_entry(menus, lists, _(
"Copy history (all)"), index, NULL,
copy_callback, NULL, NULL,
has_selection, GDK_KEY_c, GDK_CONTROL_MASK);
499 add_sub_menu_entry(menus, lists, _(
"Copy history (parts)..."), index, NULL,
copy_parts_callback, NULL, NULL,
has_selection, GDK_KEY_c, GDK_CONTROL_MASK | GDK_SHIFT_MASK);
517 _(
"Paste copied history BEFORE the current history.\n"
518 "CURRENT EDITS are applied afterwards and win conflicts."));
523 _(
"Paste copied history AFTER the current history.\n"
524 "COPIED EDITS are applied afterwards and win conflicts."));
529 _(
"Discard the current history and replace it entirely with the copied history."));
559 add_sub_menu_entry(menus, lists, _(
"Preferences..."), index, NULL,
GET_ACCEL_WRAPPER(
dt_gui_preferences_show), NULL, NULL, NULL, 0, 0);
560 add_sub_menu_entry(menus, lists, _(
"Keyboard shortcuts..."), index, NULL,
shortcuts_callback, NULL, NULL, NULL, 0, 0);
void dt_accels_window(dt_accels_t *accels, GtkWindow *main_window)
Show the modal dialog listing all available keyboard shortcuts and letting user to set them.
GList * dt_act_on_get_images()
void dt_image_film_roll_directory(const dt_image_t *img, char *pathname, size_t pathname_len)
void dt_conf_set_bool(const char *name, int val)
int dt_conf_get_bool(const char *name)
void dt_conf_set_int(const char *name, int val)
int dt_conf_get_int(const char *name)
void dt_conf_set_folder_from_file_chooser(const char *name, GtkFileChooser *chooser)
gboolean dt_conf_get_folder_to_file_chooser(const char *name, GtkFileChooser *chooser)
void dt_control_log(const char *msg,...)
void dt_control_queue_redraw_center()
request redraw of center window. This redraws the center view within a gdk critical section to preven...
void dt_control_duplicate_images(gboolean virgin)
#define g_list_is_singleton(list)
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
void dt_dev_write_history(dt_develop_t *dev, gboolean async)
Thread-safe wrapper around dt_dev_write_history_ext() for dev->image_storage.id.
void dt_dev_undo_start_record(dt_develop_t *dev)
void dt_dev_undo_end_record(dt_develop_t *dev)
static gboolean redo_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean history_prepend_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean paste_sensitive_callback()
static gboolean delete_history_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean new_history_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean history_replace_checked_callback(GtkWidget *widget)
static gboolean undo_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean compress_history_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean copy_iop_order_checked_callback(GtkWidget *widget)
static gboolean copy_parts_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean paste_all_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean redo_sensitive_callback()
static gboolean history_append_checked_callback(GtkWidget *widget)
static gboolean copy_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean duplicate_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean paste_ask_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean paste_parts_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
void append_edit(GtkWidget **menus, GList **lists, const dt_menus_t index)
static gboolean shortcuts_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean history_append_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean copy_iop_order_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean undo_sensitive_callback()
static gboolean paste_ask_checked_callback(GtkWidget *widget)
static gboolean load_xmp_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean history_prepend_checked_callback(GtkWidget *widget)
static gboolean history_replace_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
GtkWidget * dt_ui_main_window(dt_ui_t *ui)
get the main window widget
gboolean dt_history_paste_on_list(const GList *list)
gboolean dt_history_copy(int32_t imgid)
gboolean dt_history_paste_parts_on_list(const GList *list)
gboolean dt_history_delete_on_list(const GList *list, gboolean undo)
gboolean dt_history_paste_parts_prepare(void)
int dt_history_load_and_apply_on_list(gchar *filename, const GList *list)
int dt_history_compress_on_list(const GList *imgs)
gboolean dt_history_copy_parts(int32_t imgid)
void dt_history_compress_on_image(const int32_t imgid)
@ DT_HISTORY_MERGE_REPLACE
@ DT_HISTORY_MERGE_PREPEND
@ DT_HISTORY_MERGE_APPEND
gboolean dt_gui_merge_options_dialog(const char *title, const char *mode_key, const char *iop_order_key, const char *ask_key, const gboolean iop_order_available)
Show a modal dialog to pick merge mode and pipeline order before a paste or style apply.
void dt_image_cache_read_release(dt_image_cache_t *cache, const dt_image_t *img)
dt_image_t * dt_image_cache_get(dt_image_cache_t *cache, const int32_t imgid, char mode)
void dt_osx_disallow_fullscreen(GtkWidget *widget)
void dt_gui_preferences_show()
int32_t dt_selection_get_first_id(struct dt_selection_t *selection)
int dt_selection_get_length(struct dt_selection_t *selection)
GList * dt_selection_get_list(struct dt_selection_t *selection)
struct _GtkWidget GtkWidget
struct dt_gui_gtk_t * gui
struct dt_selection_t * selection
struct dt_image_cache_t * image_cache
struct dt_develop_t * develop
struct dt_view_manager_t * view_manager
dt_history_copy_item_t copy_paste
void dt_undo_do_redo(dt_undo_t *self, uint32_t filter)
gboolean dt_is_redo_list_populated(dt_undo_t *self, uint32_t filter)
void dt_undo_do_undo(dt_undo_t *self, uint32_t filter)
gboolean dt_is_undo_list_populated(dt_undo_t *self, uint32_t filter)
const dt_view_t * dt_view_manager_get_current_view(dt_view_manager_t *vm)