25static gboolean
show_about_dialog(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
27 GtkWidget *dialog = gtk_about_dialog_new();
28 gtk_widget_set_name (dialog,
"about-dialog");
29#ifdef GDK_WINDOWING_QUARTZ
32 gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(dialog),
PACKAGE_NAME);
34 char *copyright = g_strdup_printf(_(
"Copyright \302\251 darktable authors 2009-2022\nCopyright \302\251 Aur\303\251lien Pierre 2022-%s"),
darktable_last_commit_year);
35 gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog), copyright);
37 gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog),
38 _(
"Organize and develop images from digital cameras"));
39 gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog),
"https://ansel.photos");
40 gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(dialog), _(
"Website"));
41 char *icon = g_strdup(
"ansel");
42 gtk_about_dialog_set_logo_icon_name(GTK_ABOUT_DIALOG(dialog), icon);
45 const char *str = _(
"all those of you that made previous releases possible");
47#include "tools/darktable_authors.h"
49 const char *
final[] = {str, NULL };
50 gtk_about_dialog_add_credit_section (GTK_ABOUT_DIALOG(dialog), _(
"and..."),
final);
51 gtk_about_dialog_set_translator_credits(GTK_ABOUT_DIALOG(dialog), _(
"translator-credits"));
54 gtk_dialog_run(GTK_DIALOG(dialog));
55 gtk_widget_destroy(dialog);
60static gboolean
open_doc_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
67static gboolean
open_chat_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
70 "https://app.element.io/#/room/#ansel:matrix.org", GDK_CURRENT_TIME, NULL);
74static gboolean
open_search_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
77 "https://chantal.aurelienpierre.com", GDK_CURRENT_TIME, NULL);
81static gboolean
open_forum_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
84 "https://community.ansel.photos", GDK_CURRENT_TIME, NULL);
94 gchar *help_url = g_object_get_data(G_OBJECT(widget),
"dt-help-url");
95 if(help_url)
return help_url;
96 widget = gtk_widget_get_parent(widget);
106 gdk_event_handler_set((GdkEventFunc)gtk_main_do_event, NULL, NULL);
111 gboolean handled =
FALSE;
115 case GDK_BUTTON_PRESS:
117 if(event->button.button == GDK_BUTTON_SECONDARY)
125 GtkWidget *event_widget = gtk_get_event_widget(event);
130 if(help_url && *help_url)
138 GtkWidget *dialog = gtk_message_dialog_new
139 (GTK_WINDOW(win), GTK_DIALOG_DESTROY_WITH_PARENT,
140 GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,
141 _(
"do you want to access ansel.photos ?"));
142#ifdef GDK_WINDOWING_QUARTZ
146 gtk_window_set_title(GTK_WINDOW(dialog), _(
"access the online usermanual?"));
147 const gint res = gtk_dialog_run(GTK_DIALOG(dialog));
148 const gboolean open = (res == GTK_RESPONSE_YES) || !(res == GTK_RESPONSE_NO);
149 gtk_widget_destroy(dialog);
153 GError *
error = NULL;
154 const gboolean uri_success = gtk_show_uri_on_window(GTK_WINDOW(win), help_url, gtk_get_current_event_time(), &
error);
165 fprintf (stderr,
"unable to read file: %s\n",
error->message);
180 case GDK_ENTER_NOTIFY:
181 case GDK_LEAVE_NOTIFY:
183 GtkWidget *event_widget = gtk_get_event_widget(event);
190 dt_cursor_t cursor =
event->type == GDK_ENTER_NOTIFY ? GDK_QUESTION_ARROW : GDK_X_CURSOR;
202 if(!handled) gtk_main_do_event(event);
205static gboolean
contextual_help_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
213static gboolean
search_accels_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
222 add_sub_menu_entry(menus, lists, _(
"Online documentation"), index, NULL,
open_doc_callback, NULL, NULL, NULL, 0, 0);
223 add_sub_menu_entry(menus, lists, _(
"Ask a question"), index, NULL,
open_search_callback, NULL, NULL, NULL, 0, 0);
224 add_sub_menu_entry(menus, lists, _(
"Join the support chat"), index, NULL,
open_chat_callback, NULL, NULL, NULL, 0, 0);
225 add_sub_menu_entry(menus, lists, _(
"Join the support forum"), index, NULL,
open_forum_callback, NULL, NULL, NULL, 0, 0);
227 add_sub_menu_entry(menus, lists, _(
"Open contextual help"), index, NULL,
contextual_help_callback, NULL, NULL, NULL, 0, 0);
229 NULL, GDK_KEY_p, GDK_CONTROL_MASK);
231 add_sub_menu_entry(menus, lists, _(
"About"), index, NULL,
show_about_dialog, NULL, NULL, NULL, 0, 0);
void dt_accels_search(dt_accels_t *accels, GtkWindow *main_window, GtkWidget *anchor)
static void error(char *msg)
const char darktable_package_version[]
const char darktable_last_commit_year[]
void dt_control_forbid_change_cursor()
void dt_control_log(const char *msg,...)
void dt_control_allow_change_cursor()
#define dt_control_change_cursor(cursor)
GdkCursorType dt_cursor_t
void dt_print(dt_debug_thread_t thread, const char *msg,...)
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
GtkWidget * dt_ui_main_window(dt_ui_t *ui)
get the main window widget
static gboolean show_about_dialog(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static void _restore_default_cursor()
void append_help(GtkWidget **menus, GList **lists, const dt_menus_t index)
static void _main_do_event_help(GdkEvent *event, gpointer data)
static gboolean open_chat_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean search_accels_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean open_search_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean open_doc_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static char * get_help_url(GtkWidget *widget)
static gboolean contextual_help_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean open_forum_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
void dt_osx_disallow_fullscreen(GtkWidget *widget)
struct _GtkWidget GtkWidget
struct dt_gui_gtk_t * gui