diff --git a/src/bauhaus/bauhaus.c b/src/bauhaus/bauhaus.c
index adb276f874a6..d5d40ea02fc9 100644
--- a/src/bauhaus/bauhaus.c
+++ b/src/bauhaus/bauhaus.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/calculator.h"
@@ -583,10 +584,10 @@ static gboolean _window_motion_notify(GtkWidget *widget,
// recalculate event coords so we get useful values outside window
GdkWindow *window = gtk_widget_get_window(pop->area);
gdk_window_get_origin(window, &allocation.x, &allocation.y);
- const gint ex = event->x_root - allocation.x;
- const gint ey = event->y_root - allocation.y;
+ const gint ex = dt_gdk_event_get_root_x(event) - allocation.x;
+ const gint ey = dt_gdk_event_get_root_y(event) - allocation.y;
- const int tol = DT_PIXEL_APPLY_DPI(event->state & GDK_BUTTON1_MASK ? 400 : 50);
+ const int tol = DT_PIXEL_APPLY_DPI(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK ? 400 : 50);
if(ex < - tol || ex > allocation.width + tol
|| ey + pop->offcut < - tol
|| ey + pop->offcut > pop->position.height + tol)
@@ -629,7 +630,7 @@ static gboolean _window_motion_notify(GtkWidget *widget,
: _slider_get_line_offset
(pop->oldpos, 5.0 * powf(10.0f, -d->digits) / (d->max - d->min) / fabsf(d->factor),
bh->mouse_x / (width - _widget_get_quad_width(w)), bh->mouse_y / width, ht / width);
- if(event->state & GDK_BUTTON1_MASK
+ if(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK
|| (bh->mouse_line_distance
&& ((bh->mouse_line_distance * mouse_off <= 0) ^
(fabsf(bh->mouse_line_distance - mouse_off) > .5f))))
@@ -644,7 +645,7 @@ static gboolean _window_motion_notify(GtkWidget *widget,
const int active = (bh->mouse_y - w->top_gap) / bh->line_height;
if(active >= 0 && active < d->entries->len)
{
- if(_combobox_entry(d, active)->sensitive && event->state & GDK_BUTTON1_MASK)
+ if(_combobox_entry(d, active)->sensitive && dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
{
if(active != d->active)
_combobox_set(w, active, w->combobox.mute_scrolling);
@@ -668,7 +669,7 @@ static gboolean _popup_button_release(GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
- if(darktable.bauhaus->change_active && event->button != GDK_BUTTON_MIDDLE)
+ if(darktable.bauhaus->change_active && dt_gdk_event_get_button(event) != GDK_BUTTON_MIDDLE)
_popup_hide();
return TRUE;
@@ -678,7 +679,7 @@ static gboolean _popup_button_press(GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
- if(event->window != gtk_widget_get_window(widget))
+ if(dt_gdk_event_get_window(event) != gtk_widget_get_window(widget))
{
_popup_reject();
return TRUE;
@@ -687,17 +688,17 @@ static gboolean _popup_button_press(GtkWidget *widget,
dt_bauhaus_t *bh = darktable.bauhaus;
dt_bauhaus_widget_t *w = bh->current;
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
// only accept left mouse click
gtk_widget_set_state_flags(GTK_WIDGET(w),
GTK_STATE_FLAG_FOCUSED, FALSE);
if(w->type == DT_BAUHAUS_COMBOBOX
- && !dt_gui_long_click(event->time, bh->opentime))
+ && !dt_gui_long_click(dt_gdk_event_get_time(event), bh->opentime))
{
// counts as double click, reset:
- if(!(dt_modifier_is(event->state, GDK_CONTROL_MASK) && w->field
+ if(!(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK) && w->field
&& dt_gui_presets_autoapply_for_module((dt_iop_module_t *)w->module,
GTK_WIDGET(w))))
dt_bauhaus_widget_reset(GTK_WIDGET(w));
@@ -707,7 +708,7 @@ static gboolean _popup_button_press(GtkWidget *widget,
event->state |= GDK_BUTTON1_MASK;
_window_motion_notify(widget, (GdkEventMotion*)event, user_data);
}
- else if(event->button == GDK_BUTTON_MIDDLE && w->type == DT_BAUHAUS_SLIDER)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_MIDDLE && w->type == DT_BAUHAUS_SLIDER)
_slider_zoom_range(w, 0);
else
_popup_reject();
@@ -3096,14 +3097,14 @@ static void _widget_scroll(GtkEventControllerScroll *controller,
if(w->type == DT_BAUHAUS_SLIDER)
{
const gboolean force = darktable.control->element == DT_ACTION_ELEMENT_FORCE
- && event->scroll.window == gtk_widget_get_window(widget);
- if(force && dt_modifier_is(event->scroll.state, GDK_SHIFT_MASK | GDK_CONTROL_MASK))
+ && dt_gdk_event_get_window(event) == gtk_widget_get_window(widget);
+ if(force && dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK | GDK_CONTROL_MASK))
{
_slider_zoom_range(w, delta);
_slider_zoom_toast(w);
}
else
- _slider_add_step(widget, - delta, event->scroll.state, force);
+ _slider_add_step(widget, - delta, dt_gdk_event_get_state(event), force);
}
else
_combobox_next_sensitive(w, delta, 0, FALSE);
@@ -3117,7 +3118,7 @@ static gboolean _widget_key_press(GtkWidget *widget, GdkEventKey *event)
dt_bauhaus_widget_t *w = (dt_bauhaus_widget_t *)widget;
int delta = -1;
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_Right:
case GDK_KEY_KP_Right:
@@ -3133,7 +3134,7 @@ static gboolean _widget_key_press(GtkWidget *widget, GdkEventKey *event)
_request_focus(w);
if(w->type == DT_BAUHAUS_SLIDER)
- _slider_add_step(widget, delta, event->state, FALSE);
+ _slider_add_step(widget, delta, dt_gdk_event_get_state(event), FALSE);
else
_combobox_next_sensitive(w, delta, 0, FALSE);
@@ -3447,7 +3448,7 @@ static gboolean _popup_key_press(GtkWidget *widget,
const gboolean is_combo = w->type == DT_BAUHAUS_COMBOBOX;
int delta = -1;
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_BackSpace:
case GDK_KEY_Delete:
@@ -3513,7 +3514,7 @@ static gboolean _popup_key_press(GtkWidget *widget,
if(is_combo)
_combobox_next_sensitive(w, delta, 0, w->combobox.mute_scrolling);
else
- _slider_add_step(GTK_WIDGET(w), delta, event->state, FALSE);
+ _slider_add_step(GTK_WIDGET(w), delta, dt_gdk_event_get_state(event), FALSE);
break;
default:
if(!event->string || !g_utf8_validate(event->string, -1, NULL)) return FALSE;
@@ -3660,7 +3661,7 @@ static void _widget_motion(GtkEventControllerMotion *controller,
const float steps = floorf((x - bh->mouse_x) / scaled_step);
GdkEvent *const event = gtk_get_current_event(); // TODO cleanup
_slider_add_step(widget, copysignf(1, d->factor) * steps,
- event->motion.state, FALSE);
+ dt_gdk_event_get_state(event), FALSE);
gdk_event_free(event);
bh->mouse_x += steps * scaled_step;
diff --git a/src/chart/main.c b/src/chart/main.c
index 57ece81bc526..cf066ebcc96f 100644
--- a/src/chart/main.c
+++ b/src/chart/main.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "chart/dtcairo.h"
#include "chart/colorchart.h"
@@ -195,7 +196,7 @@ static gboolean motion_notify_callback_reference(GtkWidget *widget, GdkEventMoti
static gboolean handle_motion(GtkWidget *widget, GdkEventMotion *event, dt_lut_t *self, image_t *image)
{
- if(!(event->state & GDK_BUTTON1_MASK) || !image->image) return FALSE;
+ if(!(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK) || !image->image) return FALSE;
// mouse -> 0..1
float x, y;
@@ -259,8 +260,8 @@ static void map_mouse_to_0_1(GtkWidget *widget, GdkEventMotion *event, image_t *
guint width = gtk_widget_get_allocated_width(widget);
guint height = gtk_widget_get_allocated_height(widget);
- *x = (event->x - image->offset_x) / (width - 2.0 * image->offset_x);
- *y = (event->y - image->offset_y) / (height - 2.0 * image->offset_y);
+ *x = (dt_gdk_event_get_x(event) - image->offset_x) / (width - 2.0 * image->offset_x);
+ *y = (dt_gdk_event_get_y(event) - image->offset_y) / (height - 2.0 * image->offset_y);
}
static void update_corner(image_t *image, int which, float *x, float *y)
diff --git a/src/common/gdk_event_utils.h b/src/common/gdk_event_utils.h
new file mode 100644
index 000000000000..b3433cab767b
--- /dev/null
+++ b/src/common/gdk_event_utils.h
@@ -0,0 +1,172 @@
+/*
+ This file is part of darktable,
+ Copyright (C) 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
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ darktable 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 darktable. If not, see .
+*/
+
+#pragma once
+
+#include
+
+G_BEGIN_DECLS
+
+/* Inline wrappers around gdk_event_get_*() accessor functions.
+ *
+ * These provide direct-return access to GdkEvent fields without direct struct
+ * member access. They accept const void* so any typed event pointer
+ * (GdkEventButton*, GdkEventKey*, etc.) can be passed without a cast.
+ *
+ * This is preparation for the GTK4 migration where GdkEvent is no longer
+ * a publicly accessible struct.
+ */
+
+static inline GdkEventType dt_gdk_event_get_type(const void *e)
+{
+ return gdk_event_get_event_type((const GdkEvent *)e);
+}
+
+static inline guint32 dt_gdk_event_get_time(const void *e)
+{
+ return gdk_event_get_time((const GdkEvent *)e);
+}
+
+static inline guint dt_gdk_event_get_button(const void *e)
+{
+ guint b = 0;
+ gdk_event_get_button((const GdkEvent *)e, &b);
+ return b;
+}
+
+static inline guint dt_gdk_event_get_click_count(const void *e)
+{
+ guint c = 0;
+ gdk_event_get_click_count((const GdkEvent *)e, &c);
+ return c;
+}
+
+static inline GdkModifierType dt_gdk_event_get_state(const void *e)
+{
+ GdkModifierType s = 0;
+ gdk_event_get_state((const GdkEvent *)e, &s);
+ return s;
+}
+
+static inline gdouble dt_gdk_event_get_x(const void *e)
+{
+ gdouble x = 0, y = 0;
+ gdk_event_get_coords((const GdkEvent *)e, &x, &y);
+ (void)y;
+ return x;
+}
+
+static inline gdouble dt_gdk_event_get_y(const void *e)
+{
+ gdouble x = 0, y = 0;
+ gdk_event_get_coords((const GdkEvent *)e, &x, &y);
+ (void)x;
+ return y;
+}
+
+static inline gdouble dt_gdk_event_get_root_x(const void *e)
+{
+ gdouble x = 0, y = 0;
+ gdk_event_get_root_coords((const GdkEvent *)e, &x, &y);
+ (void)y;
+ return x;
+}
+
+static inline gdouble dt_gdk_event_get_root_y(const void *e)
+{
+ gdouble x = 0, y = 0;
+ gdk_event_get_root_coords((const GdkEvent *)e, &x, &y);
+ (void)x;
+ return y;
+}
+
+static inline guint dt_gdk_event_get_keyval(const void *e)
+{
+ guint k = 0;
+ gdk_event_get_keyval((const GdkEvent *)e, &k);
+ return k;
+}
+
+static inline guint16 dt_gdk_event_get_keycode(const void *e)
+{
+ guint16 k = 0;
+ gdk_event_get_keycode((const GdkEvent *)e, &k);
+ return k;
+}
+
+static inline GdkScrollDirection dt_gdk_event_get_scroll_direction(const void *e)
+{
+ GdkScrollDirection d = GDK_SCROLL_UP;
+ gdk_event_get_scroll_direction((const GdkEvent *)e, &d);
+ return d;
+}
+
+static inline gdouble dt_gdk_event_get_scroll_delta_x(const void *e)
+{
+ gdouble dx = 0, dy = 0;
+ gdk_event_get_scroll_deltas((const GdkEvent *)e, &dx, &dy);
+ (void)dy;
+ return dx;
+}
+
+static inline gdouble dt_gdk_event_get_scroll_delta_y(const void *e)
+{
+ gdouble dx = 0, dy = 0;
+ gdk_event_get_scroll_deltas((const GdkEvent *)e, &dx, &dy);
+ (void)dx;
+ return dy;
+}
+
+static inline GdkWindow *dt_gdk_event_get_window(const void *e)
+{
+ return gdk_event_get_window((const GdkEvent *)e);
+}
+
+static inline GdkDevice *dt_gdk_event_get_device(const void *e)
+{
+ return gdk_event_get_device((const GdkEvent *)e);
+}
+
+static inline GdkDevice *dt_gdk_event_get_source_device(const void *e)
+{
+ return gdk_event_get_source_device((const GdkEvent *)e);
+}
+
+static inline GdkScreen *dt_gdk_event_get_screen(const void *e)
+{
+ return gdk_event_get_screen((const GdkEvent *)e);
+}
+
+static inline GdkSeat *dt_gdk_event_get_seat(const void *e)
+{
+ return gdk_event_get_seat((const GdkEvent *)e);
+}
+
+static inline gboolean dt_gdk_event_get_pointer_emulated(void *e)
+{
+ return gdk_event_get_pointer_emulated((GdkEvent *)e);
+}
+
+static inline gboolean dt_gdk_event_get_axis(const void *e,
+ GdkAxisUse axis_use,
+ gdouble *value)
+{
+ return gdk_event_get_axis((const GdkEvent *)e, axis_use, value);
+}
+
+G_END_DECLS
diff --git a/src/develop/blend_gui.c b/src/develop/blend_gui.c
index 0c5f3c024908..b9289771678d 100644
--- a/src/develop/blend_gui.c
+++ b/src/develop/blend_gui.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "develop/blend.h"
#include "bauhaus/bauhaus.h"
@@ -1353,7 +1354,7 @@ static gboolean _blendop_blendif_showmask_clicked(GtkToggleButton *button,
{
DT_GUARD_GUI_UPDATE(TRUE);
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
const gboolean has_mask_display =
module->request_mask_display
@@ -1365,12 +1366,12 @@ static gboolean _blendop_blendif_showmask_clicked(GtkToggleButton *button,
| DT_DEV_PIXELPIPE_DISPLAY_CHANNEL
| DT_DEV_PIXELPIPE_DISPLAY_ANY);
- if(dt_modifier_is(event->state, GDK_CONTROL_MASK | GDK_SHIFT_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK | GDK_SHIFT_MASK))
module->request_mask_display |=
(DT_DEV_PIXELPIPE_DISPLAY_MASK | DT_DEV_PIXELPIPE_DISPLAY_CHANNEL);
- else if(dt_modifier_is(event->state, GDK_SHIFT_MASK))
+ else if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK))
module->request_mask_display |= DT_DEV_PIXELPIPE_DISPLAY_CHANNEL;
- else if(dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ else if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
module->request_mask_display |= DT_DEV_PIXELPIPE_DISPLAY_MASK;
else
module->request_mask_display |=
@@ -1406,7 +1407,7 @@ static gboolean _blendop_masks_modes_none_clicked(GtkWidget *button,
DT_GUARD_GUI_UPDATE(TRUE);
dt_iop_gui_blend_data_t *data = module->blend_data;
- if(event->button == GDK_BUTTON_PRIMARY && data->selected_mask_mode != button)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && data->selected_mask_mode != button)
{
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->selected_mask_mode),
FALSE); // unsets currently toggled if any
@@ -1606,12 +1607,12 @@ static gboolean _blendop_masks_add_shape(GtkWidget *widget,
dt_iop_module_t *self)
{
if(DT_IN_GUI_UPDATE()
- || event->button != GDK_BUTTON_PRIMARY)
+ || dt_gdk_event_get_button(event) != GDK_BUTTON_PRIMARY)
return TRUE;
dt_iop_gui_blend_data_t *bd = self->blend_data;
- const gboolean continuous = dt_modifier_is(event->state, GDK_CONTROL_MASK);
+ const gboolean continuous = dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
// find out who we are
int this = -1;
@@ -1673,7 +1674,7 @@ static gboolean _blendop_masks_show_and_edit(GtkWidget *widget,
dt_iop_gui_blend_data_t *bd = self->blend_data;
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_request_focus(self);
@@ -1686,7 +1687,7 @@ static gboolean _blendop_masks_show_and_edit(GtkWidget *widget,
if(grp && (grp->type & DT_MASKS_GROUP) && grp->points)
{
const gboolean control_button_pressed =
- dt_modifier_is(event->state, GDK_CONTROL_MASK);
+ dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
switch(bd->masks_shown)
{
@@ -2202,15 +2203,15 @@ static gboolean _blendop_blendif_enter(GtkWidget *widget,
dt_dev_pixelpipe_display_mask_t mode = DT_DEV_PIXELPIPE_DISPLAY_NONE;
// depending on shift modifiers we activate channel and/or mask display
- if(dt_modifier_is(event->state, GDK_SHIFT_MASK | GDK_CONTROL_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK | GDK_CONTROL_MASK))
{
mode = (DT_DEV_PIXELPIPE_DISPLAY_MASK | DT_DEV_PIXELPIPE_DISPLAY_CHANNEL);
}
- else if(dt_modifier_is(event->state, GDK_SHIFT_MASK))
+ else if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK))
{
mode = DT_DEV_PIXELPIPE_DISPLAY_CHANNEL;
}
- else if(dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ else if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
mode = DT_DEV_PIXELPIPE_DISPLAY_MASK;
}
@@ -2299,7 +2300,7 @@ static gboolean _blendop_blendif_key_press(GtkWidget *widget,
const int tab = data->tab;
const int in_out = (widget == GTK_WIDGET(data->filter[1].slider)) ? 1 : 0;
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_a:
case GDK_KEY_A:
diff --git a/src/develop/imageop.c b/src/develop/imageop.c
index 6fe982d0bbb6..c0065498c901 100644
--- a/src/develop/imageop.c
+++ b/src/develop/imageop.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "develop/imageop.h"
#include "bauhaus/bauhaus.h"
@@ -829,9 +830,9 @@ static gboolean _rename_module_key_press(GtkWidget *entry,
{
gboolean ended = FALSE;
- if(event->type == GDK_FOCUS_CHANGE
- || event->keyval == GDK_KEY_Return
- || event->keyval == GDK_KEY_KP_Enter)
+ if(dt_gdk_event_get_type(event) == GDK_FOCUS_CHANGE
+ || dt_gdk_event_get_keyval(event) == GDK_KEY_Return
+ || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Enter)
{
if(gtk_entry_get_text_length(GTK_ENTRY(entry)) > 0)
{
@@ -859,7 +860,7 @@ static gboolean _rename_module_key_press(GtkWidget *entry,
ended = TRUE;
}
- else if(event->keyval == GDK_KEY_Escape)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Escape)
{
ended = TRUE;
}
@@ -984,13 +985,13 @@ static gboolean _gui_multiinstance_callback(GtkButton *button,
GdkEventButton *event,
dt_iop_module_t *module)
{
- if(event && event->button == GDK_BUTTON_SECONDARY)
+ if(event && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
if(!(module->flags() & IOP_FLAGS_ONE_INSTANCE))
_gui_copy_callback(button, module);
return TRUE;
}
- else if(event && event->button == GDK_BUTTON_MIDDLE)
+ else if(event && dt_gdk_event_get_button(event) == GDK_BUTTON_MIDDLE)
{
return FALSE;
}
@@ -2315,7 +2316,7 @@ static gboolean _gui_reset_callback(GtkButton *button,
// Ctrl is used to apply any auto-presets to the current module
// If Ctrl was not pressed, or no auto-presets were applied, reset the module parameters
if(!(event
- && dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ && dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
|| !dt_gui_presets_autoapply_for_module(module, NULL))
{
// if a drawn mask is set, remove it from the list
diff --git a/src/dtgtk/culling.c b/src/dtgtk/culling.c
index 3a8e08076c17..6e4e643ec623 100644
--- a/src/dtgtk/culling.c
+++ b/src/dtgtk/culling.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
/** a class to manage a collection of zoomable thumbnails for culling
* or full preview. */
@@ -632,7 +633,7 @@ static gboolean _event_gesture(GtkWidget *widget,
GdkEvent *event,
gpointer user_data)
{
- if(event->type != GDK_TOUCHPAD_PINCH) return FALSE;
+ if(dt_gdk_event_get_type(event) != GDK_TOUCHPAD_PINCH) return FALSE;
const GdkEventTouchpadPinch *pinch = &event->touchpad_pinch;
dt_print(DT_DEBUG_INPUT,
"[culling gesture] pinch phase=%d x=%.1f y=%.1f dx=%.3f dy=%.3f scale=%.6f state=0x%x",
@@ -847,25 +848,25 @@ static gboolean _event_button_press(GtkWidget *widget,
{
dt_culling_t *table = (dt_culling_t *)user_data;
- if(event->button == GDK_BUTTON_PRIMARY
- && event->type == GDK_BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY
+ && dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS)
{
// make sure any edition field loses the focus
gtk_widget_grab_focus(dt_ui_center(darktable.gui->ui));
}
- if(event->button == GDK_BUTTON_MIDDLE)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_MIDDLE)
{
// convert screen coordinates to culling coordinates
int ox = 0, oy = 0;
GdkWindow *win = gtk_widget_get_window(table->widget);
if(win)
gdk_window_get_origin(win, &ox, &oy);
- const float x_culling = event->x_root - ox;
- const float y_culling = event->y_root - oy;
+ const float x_culling = dt_gdk_event_get_root_x(event) - ox;
+ const float y_culling = dt_gdk_event_get_root_y(event) - oy;
// if shift is pressed, we work only with image hovered
- if(dt_modifier_is(event->state, GDK_SHIFT_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK))
_toggle_zoom_current(table, x_culling, y_culling);
else
_toggle_zoom_all(table, x_culling, y_culling);
@@ -874,8 +875,8 @@ static gboolean _event_button_press(GtkWidget *widget,
const dt_imgid_t id = dt_control_get_mouse_over_id();
if(dt_is_valid_imgid(id)
- && event->button == GDK_BUTTON_PRIMARY
- && event->type == GDK_2BUTTON_PRESS)
+ && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY
+ && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// we have to set again the selected image, because it was deselected
// during the previous GDK_BUTTON_PRESS event
@@ -891,8 +892,8 @@ static gboolean _event_button_press(GtkWidget *widget,
return TRUE;
}
- table->pan_x = event->x_root;
- table->pan_y = event->y_root;
+ table->pan_x = dt_gdk_event_get_root_x(event);
+ table->pan_y = dt_gdk_event_get_root_y(event);
table->panning = TRUE;
return TRUE;
}
@@ -905,8 +906,8 @@ static gboolean _event_motion_notify(GtkWidget *widget,
table->mouse_inside = TRUE;
if(!table->panning)
{
- table->pan_x = event->x_root;
- table->pan_y = event->y_root;
+ table->pan_x = dt_gdk_event_get_root_x(event);
+ table->pan_y = dt_gdk_event_get_root_y(event);
return FALSE;
}
@@ -925,14 +926,14 @@ static gboolean _event_motion_notify(GtkWidget *widget,
if(table->panning && fz > 1.0f)
{
- const double x = event->x_root;
- const double y = event->y_root;
+ const double x = dt_gdk_event_get_root_x(event);
+ const double y = dt_gdk_event_get_root_y(event);
// we want the images to stay in the screen
const float scale = darktable.gui->ppd_thb / darktable.gui->ppd;
const float valx = (x - table->pan_x) * scale;
const float valy = (y - table->pan_y) * scale;
- if(dt_modifier_is(event->state, GDK_SHIFT_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK))
{
const dt_imgid_t mouseid = dt_control_get_mouse_over_id();
for(GList *l = table->list; l; l = g_list_next(l))
@@ -1001,7 +1002,7 @@ static gboolean _event_button_release(GtkWidget *widget,
// we use a very simple culling-specific selection
if(dt_act_on_use_culling_selection()
&& dt_is_valid_imgid(overid)
- && event->button == GDK_BUTTON_PRIMARY)
+ && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
const dt_imgid_t old_sel = table->selection;
if(table->selection == overid)
diff --git a/src/dtgtk/gradientslider.c b/src/dtgtk/gradientslider.c
index 0dd36bf5679b..b12c39cc6340 100644
--- a/src/dtgtk/gradientslider.c
+++ b/src/dtgtk/gradientslider.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include
#include
@@ -309,7 +310,7 @@ static gboolean _gradient_slider_button_press(GtkWidget *widget,
GtkDarktableGradientSlider *gslider = DTGTK_GRADIENT_SLIDER(widget);
// reset slider
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS && gslider->is_resettable)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS && gslider->is_resettable)
{
gslider->is_dragging = FALSE;
gslider->do_reset = TRUE;
@@ -319,19 +320,19 @@ static gboolean _gradient_slider_button_press(GtkWidget *widget,
g_signal_emit_by_name(G_OBJECT(widget), "value-changed");
g_signal_emit_by_name(G_OBJECT(widget), "value-reset");
}
- else if((event->button == GDK_BUTTON_PRIMARY || event->button == GDK_BUTTON_SECONDARY) && event->type == GDK_BUTTON_PRESS)
+ else if((dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY || dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY) && dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS)
{
- const gint lselected = _get_active_marker_from_screen(widget, event->x, event->y);
+ const gint lselected = _get_active_marker_from_screen(widget, dt_gdk_event_get_x(event), dt_gdk_event_get_y(event));
assert(lselected >= 0);
assert(lselected <= gslider->positions - 1);
- if(event->button == GDK_BUTTON_PRIMARY) // left mouse button : select and start dragging
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY) // left mouse button : select and start dragging
{
gslider->selected = lselected;
gslider->do_reset = FALSE;
- const gdouble newposition = _get_position_from_screen(widget, event->x);
+ const gdouble newposition = _get_position_from_screen(widget, dt_gdk_event_get_x(event));
const gint direction = gslider->position[gslider->selected] <= newposition ? MOVE_RIGHT : MOVE_LEFT;
_slider_move(widget, gslider->selected, newposition, direction);
@@ -373,7 +374,7 @@ static gboolean _gradient_slider_motion_notify(GtkWidget *widget,
{
assert(gslider->timeout_handle > 0);
- const gdouble newposition = _get_position_from_screen(widget, event->x);
+ const gdouble newposition = _get_position_from_screen(widget, dt_gdk_event_get_x(event));
const gint direction = gslider->position[gslider->selected] <= newposition ? MOVE_RIGHT : MOVE_LEFT;
_slider_move(widget, gslider->selected, newposition, direction);
@@ -384,7 +385,7 @@ static gboolean _gradient_slider_motion_notify(GtkWidget *widget,
}
else
{
- gslider->active = _get_active_marker_from_screen(widget, event->x, event->y);
+ gslider->active = _get_active_marker_from_screen(widget, dt_gdk_event_get_x(event), dt_gdk_event_get_y(event));
}
if(gslider->selected != -1) gtk_widget_grab_focus(widget);
@@ -400,11 +401,11 @@ static gboolean _gradient_slider_button_release(GtkWidget *widget,
GtkDarktableGradientSlider *gslider = DTGTK_GRADIENT_SLIDER(widget);
const gint selected = _get_active_marker(gslider);
- if(event->button == GDK_BUTTON_PRIMARY && selected != -1 && gslider->do_reset == FALSE)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && selected != -1 && gslider->do_reset == FALSE)
{
// First get some dimension info
gslider->is_changed = TRUE;
- const gdouble newposition = _get_position_from_screen(widget, event->x);
+ const gdouble newposition = _get_position_from_screen(widget, dt_gdk_event_get_x(event));
const gint direction = gslider->position[selected] <= newposition ? MOVE_RIGHT : MOVE_LEFT;
_slider_move(widget, selected, newposition, direction);
@@ -437,7 +438,7 @@ static gboolean _gradient_slider_scroll_event(GtkWidget *widget,
{
gdouble delta = delta_y * -gslider->increment;
return _gradient_slider_add_delta_internal(widget, delta,
- event->state, selected);
+ dt_gdk_event_get_state(event), selected);
}
return TRUE;
@@ -452,7 +453,7 @@ static gboolean _gradient_slider_key_press_event(GtkWidget *widget,
int handled = FALSE;
float delta = -gslider->increment;
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_Up:
case GDK_KEY_KP_Up:
@@ -472,7 +473,7 @@ static gboolean _gradient_slider_key_press_event(GtkWidget *widget,
if(selected == -1) return TRUE;
return _gradient_slider_add_delta_internal(widget, delta,
- event->state, selected);
+ dt_gdk_event_get_state(event), selected);
}
static void _gradient_slider_class_init(GtkDarktableGradientSliderClass *klass)
diff --git a/src/dtgtk/range.c b/src/dtgtk/range.c
index 4132d367ba3c..60fb4337cb3e 100644
--- a/src/dtgtk/range.c
+++ b/src/dtgtk/range.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "range.h"
#include "bauhaus/bauhaus.h"
#include "control/control.h"
@@ -1511,7 +1512,7 @@ void dtgtk_range_select_redraw(GtkDarktableRangeSelect *range)
static gboolean _event_band_motion(GtkWidget *widget, GdkEventMotion *event, gpointer user_data)
{
GtkDarktableRangeSelect *range = (GtkDarktableRangeSelect *)user_data;
- range->current_x_px = event->x - range->alloc_padding.x;
+ range->current_x_px = dt_gdk_event_get_x(event) - range->alloc_padding.x;
// if we are outside the graph, don't go further
const gboolean inside = (range->current_x_px >= 0 && range->current_x_px <= range->alloc_padding.width);
@@ -1526,7 +1527,7 @@ static gboolean _event_band_motion(GtkWidget *widget, GdkEventMotion *event, gpo
// point the popup to the current position
gint wx, wy;
gtk_widget_translate_coordinates(range->band, gtk_widget_get_toplevel(range->band), 0, 0, &wx, &wy);
- GdkRectangle rect = { event->x, 0, 1, gtk_widget_get_allocated_height(range->band) };
+ GdkRectangle rect = { dt_gdk_event_get_x(event), 0, 1, gtk_widget_get_allocated_height(range->band) };
gtk_popover_set_pointing_to(GTK_POPOVER(range->cur_window), &rect);
const double smin_r = (range->bounds & DT_RANGE_BOUND_MIN) ? range->min_r : range->select_min_r;
diff --git a/src/dtgtk/resetlabel.c b/src/dtgtk/resetlabel.c
index dcc43ebbc746..4edeb79052e1 100644
--- a/src/dtgtk/resetlabel.c
+++ b/src/dtgtk/resetlabel.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "dtgtk/resetlabel.h"
@@ -30,7 +31,7 @@ static void dtgtk_reset_label_init(GtkDarktableResetLabel *label)
static gboolean _reset_label_callback(GtkDarktableResetLabel *label, GdkEventButton *event, gpointer user_data)
{
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
memcpy(((char *)label->module->params) + label->offset,
((char *)label->module->default_params) + label->offset, label->size);
diff --git a/src/dtgtk/thumbnail.c b/src/dtgtk/thumbnail.c
index b5a4e2445ec3..c8f8b49855d4 100644
--- a/src/dtgtk/thumbnail.c
+++ b/src/dtgtk/thumbnail.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
/** this is the thumbnail class for the lighttable module. */
#include "common/extra_optimizations.h"
@@ -1055,7 +1056,7 @@ static gboolean _event_rating_release(GtkWidget *widget,
if(dtgtk_thumbnail_btn_is_hidden(widget))
return FALSE;
- if(event->button == GDK_BUTTON_PRIMARY && !thumb->moved)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && !thumb->moved)
{
dt_view_image_over_t rating = DT_VIEW_DESERT;
if(widget == thumb->w_reject)
@@ -1093,12 +1094,12 @@ static gboolean _event_grouping_release(GtkWidget *widget,
if(dtgtk_thumbnail_btn_is_hidden(widget))
return FALSE;
- if(event->button == GDK_BUTTON_PRIMARY && !thumb->moved)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && !thumb->moved)
{
//TODO: will succeed if either or *both* of Shift and Control are
//pressed. Do we want this?
- if(dt_modifier_is(event->state, GDK_SHIFT_MASK)
- | dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK)
+ | dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
// just add the whole group to the selection. TODO: make this
// also work for collapsed groups.
@@ -1143,7 +1144,7 @@ static gboolean _event_audio_release(GtkWidget *widget,
if(dtgtk_thumbnail_btn_is_hidden(widget))
return FALSE;
- if(event->button == GDK_BUTTON_PRIMARY && !thumb->moved)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && !thumb->moved)
{
gboolean start_audio = TRUE;
if(darktable.view_manager->audio.audio_player_id != -1)
@@ -1313,12 +1314,12 @@ static gboolean _event_box_enter_leave(GtkWidget *widget,
{
dt_thumbnail_t *thumb = (dt_thumbnail_t *)user_data;
- if(event->type == GDK_ENTER_NOTIFY && !thumb->disable_mouseover)
+ if(dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY && !thumb->disable_mouseover)
dt_control_set_mouse_over_id(thumb->imgid);
- _set_flag(widget, GTK_STATE_FLAG_PRELIGHT, (event->type == GDK_ENTER_NOTIFY));
+ _set_flag(widget, GTK_STATE_FLAG_PRELIGHT, (dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY));
_set_flag(thumb->w_image_box, GTK_STATE_FLAG_PRELIGHT,
- (event->type == GDK_ENTER_NOTIFY));
+ (dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY));
return FALSE;
}
@@ -1328,11 +1329,11 @@ static gboolean _event_image_enter_leave(GtkWidget *widget,
{
dt_thumbnail_t *thumb = (dt_thumbnail_t *)user_data;
- if(event->type == GDK_ENTER_NOTIFY && !thumb->disable_mouseover)
+ if(dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY && !thumb->disable_mouseover)
dt_control_set_mouse_over_id(thumb->imgid);
_set_flag(thumb->w_image_box, GTK_STATE_FLAG_PRELIGHT,
- (event->type == GDK_ENTER_NOTIFY));
+ (dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY));
return FALSE;
}
@@ -1342,7 +1343,7 @@ static gboolean _event_btn_enter_leave(GtkWidget *widget,
{
dt_thumbnail_t *thumb = (dt_thumbnail_t *)user_data;
- if(event->type == GDK_ENTER_NOTIFY)
+ if(dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY)
{
if(widget == thumb->w_reject)
darktable.control->element = DT_VIEW_REJECT;
@@ -1355,7 +1356,7 @@ static gboolean _event_btn_enter_leave(GtkWidget *widget,
_set_flag(thumb->w_image_box, GTK_STATE_FLAG_PRELIGHT, TRUE);
_thumb_update_tags_tooltip(thumb);
}
- else if(event->type == GDK_LEAVE_NOTIFY)
+ else if(dt_gdk_event_get_type(event) == GDK_LEAVE_NOTIFY)
{
if(widget == thumb->w_reject)
darktable.control->element = -1;
diff --git a/src/dtgtk/thumbnail_btn.c b/src/dtgtk/thumbnail_btn.c
index b2e42d004cd5..35ddc96d8f68 100644
--- a/src/dtgtk/thumbnail_btn.c
+++ b/src/dtgtk/thumbnail_btn.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "thumbnail_btn.h"
#include "gui/gtk.h"
#include
@@ -103,7 +104,7 @@ static gboolean _thumbnail_btn_enter_leave_notify_callback(GtkWidget *widget, Gd
{
g_return_val_if_fail(widget != NULL, FALSE);
- if(event->type == GDK_ENTER_NOTIFY)
+ if(dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY)
gtk_widget_set_state_flags(widget, GTK_STATE_FLAG_PRELIGHT, FALSE);
else
gtk_widget_unset_state_flags(widget, GTK_STATE_FLAG_PRELIGHT);
diff --git a/src/dtgtk/thumbtable.c b/src/dtgtk/thumbtable.c
index 4a4bee4c49f6..6c1fe6cd2d4d 100644
--- a/src/dtgtk/thumbtable.c
+++ b/src/dtgtk/thumbtable.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
/** a class to manage a table of thumbnail for lighttable and filmstrip. */
#include "dtgtk/thumbtable.h"
@@ -1420,10 +1421,10 @@ static gboolean _event_button_press(GtkWidget *widget,
const dt_imgid_t id = dt_control_get_mouse_over_id();
- if(dt_is_valid_imgid(id) && event->button == GDK_BUTTON_PRIMARY)
+ if(dt_is_valid_imgid(id) && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
// double-click
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
switch(table->mode)
{
@@ -1454,12 +1455,12 @@ static gboolean _event_button_press(GtkWidget *widget,
}
}
- if(event->type == GDK_BUTTON_PRESS
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS
&& table->mode == DT_THUMBTABLE_MODE_FILMSTRIP)
return FALSE;
}
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS)
{
// make sure any edition field loses the focus
gtk_widget_grab_focus(dt_ui_center(darktable.gui->ui));
@@ -1467,8 +1468,8 @@ static gboolean _event_button_press(GtkWidget *widget,
if(table->mode != DT_THUMBTABLE_MODE_ZOOM
&& !dt_is_valid_imgid(id)
- && event->button == GDK_BUTTON_PRIMARY
- && event->type == GDK_BUTTON_PRESS)
+ && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY
+ && dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS)
{
const dt_view_type_flags_t cv = dt_view_get_current();
@@ -1485,8 +1486,8 @@ static gboolean _event_button_press(GtkWidget *widget,
}
PangoRectangle *button = &table->manual_button;
- if(event->x < button->x && event->x > button->x - button->width
- && event->y < button->y && event->y > button->y - button->height)
+ if(dt_gdk_event_get_x(event) < button->x && dt_gdk_event_get_x(event) > button->x - button->width
+ && dt_gdk_event_get_y(event) < button->y && dt_gdk_event_get_y(event) > button->y - button->height)
{
dt_gui_show_help(NULL);
}
@@ -1497,7 +1498,7 @@ static gboolean _event_button_press(GtkWidget *widget,
if(table->mode != DT_THUMBTABLE_MODE_ZOOM)
return TRUE;
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS)
{
table->dragging = TRUE;
table->drag_dx = table->drag_dy = 0;
@@ -1520,8 +1521,8 @@ static gboolean _event_motion_notify(GtkWidget *widget,
gboolean ret = FALSE;
if(table->dragging && table->mode == DT_THUMBTABLE_MODE_ZOOM)
{
- const int dx = ceil(event->x_root) - table->last_x;
- const int dy = ceil(event->y_root) - table->last_y;
+ const int dx = ceil(dt_gdk_event_get_root_x(event)) - table->last_x;
+ const int dy = ceil(dt_gdk_event_get_root_y(event)) - table->last_y;
_move(table, dx, dy, TRUE);
table->drag_dx += dx;
table->drag_dy += dy;
@@ -1535,8 +1536,8 @@ static gboolean _event_motion_notify(GtkWidget *widget,
ret = TRUE;
}
- table->last_x = ceil(event->x_root);
- table->last_y = ceil(event->y_root);
+ table->last_x = ceil(dt_gdk_event_get_root_x(event));
+ table->last_y = ceil(dt_gdk_event_get_root_y(event));
return ret;
}
@@ -1557,15 +1558,15 @@ static gboolean _event_button_release(GtkWidget *widget,
const dt_imgid_t id = dt_control_get_mouse_over_id();
if(dt_is_valid_imgid(id)
- && event->button == GDK_BUTTON_PRIMARY
- && event->type == GDK_BUTTON_RELEASE)
+ && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY
+ && dt_gdk_event_get_type(event) == GDK_BUTTON_RELEASE)
{
- if(dt_modifier_is(event->state, GDK_CONTROL_MASK)
- || dt_modifier_is(event->state, GDK_MOD2_MASK)) // CMD key on macOS
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK)
+ || dt_modifier_is(dt_gdk_event_get_state(event), GDK_MOD2_MASK)) // CMD key on macOS
{
dt_selection_toggle(darktable.selection, id);
}
- else if(dt_modifier_is(event->state, GDK_SHIFT_MASK))
+ else if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK))
{
dt_selection_select_range(darktable.selection, id);
}
diff --git a/src/gui/accelerators.c b/src/gui/accelerators.c
index 3eb4393e596b..4725a06f98bc 100644
--- a/src/gui/accelerators.c
+++ b/src/gui/accelerators.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "gui/accelerators.h"
#include "common/action.h"
@@ -2001,7 +2002,7 @@ static gboolean _view_key_pressed(GtkWidget *widget,
if(!strcmp(gtk_widget_get_name(widget), "actions_view"))
{
// if control key pressed, copy lua command to clipboard (CTRL+C will work)
- if(dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
dt_shortcut_t shortcut = { .speed = 1.0 };
gtk_tree_model_get(model, &iter, 0, &shortcut.action, -1);
@@ -2019,13 +2020,13 @@ static gboolean _view_key_pressed(GtkWidget *widget,
dt_shortcut_t *s = g_sequence_get(shortcut_iter);
// if control key pressed, copy lua command to clipboard (CTRL+C will work)
- if(dt_modifier_is(event->state, GDK_CONTROL_MASK) && s->views)
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK) && s->views)
{
_shortcut_copy_lua(NULL, s, NULL);
}
// GDK_KEY_BackSpace moves to parent in tree
- if(event->keyval == GDK_KEY_Delete || event->keyval == GDK_KEY_KP_Delete)
+ if(dt_gdk_event_get_keyval(event) == GDK_KEY_Delete || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Delete)
{
if(dt_gui_show_yes_no_dialog(_("removing shortcut"), "",
s->is_default ? s->views ?
@@ -2266,15 +2267,15 @@ static gboolean _action_view_click(GtkWidget *widget,
GtkTreeView *view = GTK_TREE_VIEW(widget);
GtkTreeModel *model = gtk_tree_view_get_model(view);
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(view);
GtkTreePath *path = NULL;
- if(gtk_tree_view_get_path_at_pos(view, (gint)event->x, (gint)event->y,
+ if(gtk_tree_view_get_path_at_pos(view, (gint)dt_gdk_event_get_x(event), (gint)dt_gdk_event_get_y(event),
&path, NULL, NULL, NULL))
{
- if(event->type == GDK_DOUBLE_BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_DOUBLE_BUTTON_PRESS)
{
gtk_tree_selection_select_path(selection, path);
_action_row_activated(view, path, NULL, model);
@@ -2295,7 +2296,7 @@ static gboolean _action_view_click(GtkWidget *widget,
else
gtk_tree_selection_unselect_all(selection);
}
- else if(event->button == GDK_BUTTON_SECONDARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
GtkTreeIter iter;
gtk_tree_model_get_iter_first(model, &iter);
@@ -4521,7 +4522,7 @@ static guint _fix_keyval(GdkEvent *event)
{
guint keyval = 0;
GdkKeymap *keymap = gdk_keymap_get_for_display(gdk_display_get_default());
- gdk_keymap_translate_keyboard_state(keymap, event->key.hardware_keycode, 0, 0,
+ gdk_keymap_translate_keyboard_state(keymap, dt_gdk_event_get_keycode(event), 0, 0,
&keyval, NULL, NULL, NULL);
return keyval;
}
@@ -4530,16 +4531,16 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
GdkEvent *event,
gpointer user_data)
{
- if((event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE ||
- event->type == GDK_DOUBLE_BUTTON_PRESS || event->type == GDK_TRIPLE_BUTTON_PRESS)
- && event->button.button > 7)
+ if((dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS || dt_gdk_event_get_type(event) == GDK_BUTTON_RELEASE ||
+ dt_gdk_event_get_type(event) == GDK_DOUBLE_BUTTON_PRESS || dt_gdk_event_get_type(event) == GDK_TRIPLE_BUTTON_PRESS)
+ && dt_gdk_event_get_button(event) > 7)
{
- if(event->type == GDK_BUTTON_RELEASE)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_RELEASE)
dt_shortcut_key_release(DT_SHORTCUT_DEVICE_TABLET,
- event->button.time, event->button.button - 7);
+ dt_gdk_event_get_time(event), dt_gdk_event_get_button(event) - 7);
else
dt_shortcut_key_press (DT_SHORTCUT_DEVICE_TABLET,
- event->button.time, event->button.button - 7);
+ dt_gdk_event_get_time(event), dt_gdk_event_get_button(event) - 7);
return TRUE;
}
@@ -4547,10 +4548,10 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
if(_pressed_keys == NULL)
{
dt_shortcut_t s = { .action = _sc.action };
- gboolean middle_click = event->type == GDK_BUTTON_PRESS
- && event->button.button == GDK_BUTTON_MIDDLE;
+ gboolean middle_click = dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS
+ && dt_gdk_event_get_button(event) == GDK_BUTTON_MIDDLE;
- if((middle_click || event->type == GDK_SCROLL)
+ if((middle_click || dt_gdk_event_get_type(event) == GDK_SCROLL)
&& (s.action || (s.action = dt_action_widget(darktable.control->mapping_widget))))
{
int delta;
@@ -4567,19 +4568,19 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
return TRUE;
}
- if(_grab_widget && event->type == GDK_BUTTON_PRESS)
+ if(_grab_widget && dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS)
{
_ungrab_grab_widget();
_sc = (dt_shortcut_t) { 0 };
return TRUE;
}
- if(event->type != GDK_KEY_PRESS && event->type != GDK_KEY_RELEASE &&
- event->type != GDK_FOCUS_CHANGE)
+ if(dt_gdk_event_get_type(event) != GDK_KEY_PRESS && dt_gdk_event_get_type(event) != GDK_KEY_RELEASE &&
+ dt_gdk_event_get_type(event) != GDK_FOCUS_CHANGE)
return FALSE;
if(GTK_IS_WINDOW(w) &&
- (event->type == GDK_KEY_PRESS || event->type == GDK_KEY_RELEASE))
+ (dt_gdk_event_get_type(event) == GDK_KEY_PRESS || dt_gdk_event_get_type(event) == GDK_KEY_RELEASE))
{
GtkWidget *focused_widget = gtk_window_get_focus(GTK_WINDOW(w));
if(focused_widget)
@@ -4588,23 +4589,23 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
return TRUE;
if((GTK_IS_ENTRY(focused_widget) || GTK_IS_TREE_VIEW(focused_widget)) &&
- (event->key.keyval == GDK_KEY_Tab ||
- event->key.keyval == GDK_KEY_KP_Tab ||
- event->key.keyval == GDK_KEY_ISO_Left_Tab))
+ (dt_gdk_event_get_keyval(event) == GDK_KEY_Tab ||
+ dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Tab ||
+ dt_gdk_event_get_keyval(event) == GDK_KEY_ISO_Left_Tab))
return FALSE;
}
}
}
- switch(event->type)
+ switch(dt_gdk_event_get_type(event))
{
case GDK_KEY_PRESS:
if(event->key.is_modifier
- // || event->key.keyval >= GDK_KEY_ModeLock (all hardware event "keys", including extra "media" keys)
- || event->key.keyval == GDK_KEY_VoidSymbol
- || event->key.keyval == GDK_KEY_Meta_L
- || event->key.keyval == GDK_KEY_Meta_R
- || event->key.keyval == GDK_KEY_ISO_Level3_Shift)
+ // || dt_gdk_event_get_keyval(event) >= GDK_KEY_ModeLock (all hardware event "keys", including extra "media" keys)
+ || dt_gdk_event_get_keyval(event) == GDK_KEY_VoidSymbol
+ || dt_gdk_event_get_keyval(event) == GDK_KEY_Meta_L
+ || dt_gdk_event_get_keyval(event) == GDK_KEY_Meta_R
+ || dt_gdk_event_get_keyval(event) == GDK_KEY_ISO_Level3_Shift)
return FALSE;
dt_shortcut_t ko = { .key = _fix_keyval(event) - 1, .press = 0x7,
@@ -4619,23 +4620,23 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
return FALSE;
}
- _sc.mods = _key_modifiers_clean(event->key.state);
+ _sc.mods = _key_modifiers_clean(dt_gdk_event_get_state(event));
- dt_shortcut_key_press(DT_SHORTCUT_DEVICE_KEYBOARD_MOUSE, event->key.time, ko.key + 1);
+ dt_shortcut_key_press(DT_SHORTCUT_DEVICE_KEYBOARD_MOUSE, dt_gdk_event_get_time(event), ko.key + 1);
break;
case GDK_KEY_RELEASE:
- if(event->key.is_modifier || event->key.keyval == GDK_KEY_ISO_Level3_Shift)
+ if(event->key.is_modifier || dt_gdk_event_get_keyval(event) == GDK_KEY_ISO_Level3_Shift)
{
// are we defining shortcuts for fallbacks? just modifiers can be used.
if(_sc.action && _sc.action->type == DT_ACTION_TYPE_FALLBACK)
{
- _sc.mods = _key_modifiers_clean(event->key.state);
+ _sc.mods = _key_modifiers_clean(dt_gdk_event_get_state(event));
dt_shortcut_move(DT_SHORTCUT_DEVICE_KEYBOARD_MOUSE, 0, DT_SHORTCUT_MOVE_NONE, 1);
}
return FALSE;
}
- dt_shortcut_key_release(DT_SHORTCUT_DEVICE_KEYBOARD_MOUSE, event->key.time, _fix_keyval(event));
+ dt_shortcut_key_release(DT_SHORTCUT_DEVICE_KEYBOARD_MOUSE, dt_gdk_event_get_time(event), _fix_keyval(event));
break;
case GDK_GRAB_BROKEN:
if(!event->grab_broken.implicit)
@@ -4652,16 +4653,16 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
_ungrab_at_focus_loss();
return FALSE;
case GDK_SCROLL:
- _sc.mods = _key_modifiers_clean(event->scroll.state);
+ _sc.mods = _key_modifiers_clean(dt_gdk_event_get_state(event));
int delta_x, delta_y;
if(dt_gui_get_scroll_unit_deltas(&event->scroll, &delta_x, &delta_y))
{
if(delta_x)
- dt_shortcut_move(DT_SHORTCUT_DEVICE_KEYBOARD_MOUSE, event->scroll.time,
+ dt_shortcut_move(DT_SHORTCUT_DEVICE_KEYBOARD_MOUSE, dt_gdk_event_get_time(event),
DT_SHORTCUT_MOVE_PAN, -delta_x);
if(delta_y)
- dt_shortcut_move(DT_SHORTCUT_DEVICE_KEYBOARD_MOUSE, event->scroll.time,
+ dt_shortcut_move(DT_SHORTCUT_DEVICE_KEYBOARD_MOUSE, dt_gdk_event_get_time(event),
DT_SHORTCUT_MOVE_SCROLL, -delta_y);
}
break;
@@ -4669,15 +4670,15 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
;
static gdouble move_start_x = 0, move_start_y = 0, last_distance = 0;
- const gdouble x_move = event->motion.x - move_start_x;
- const gdouble y_move = event->motion.y - move_start_y;
+ const gdouble x_move = dt_gdk_event_get_x(event) - move_start_x;
+ const gdouble y_move = dt_gdk_event_get_y(event) - move_start_y;
const gdouble new_distance = x_move * x_move + y_move * y_move;
static int move_last_time = 0;
if(move_last_time != _last_time || new_distance < last_distance)
{
- move_start_x = event->motion.x;
- move_start_y = event->motion.y;
+ move_start_x = dt_gdk_event_get_x(event);
+ move_start_y = dt_gdk_event_get_y(event);
move_last_time = _last_time;
last_distance = 0;
break;
@@ -4685,11 +4686,11 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
// might just be an accidental move during a key press or button click
// possibly different time sources from midi or other devices
- if(event->motion.time > _last_time
- && !dt_gui_long_click(event->motion.time, _last_time))
+ if(dt_gdk_event_get_time(event) > _last_time
+ && !dt_gui_long_click(dt_gdk_event_get_time(event), _last_time))
break;
- _sc.mods = _key_modifiers_clean(event->motion.state);
+ _sc.mods = _key_modifiers_clean(dt_gdk_event_get_state(event));
const gdouble step_size = 10;
@@ -4703,7 +4704,7 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
if(fabs(angle) >= 2)
{
move_start_x += size * step_size;
- move_start_y = event->motion.y;
+ move_start_y = dt_gdk_event_get_y(event);
}
else
{
@@ -4711,7 +4712,7 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
move_start_y -= size * step_size;
if(fabs(angle) < .5)
{
- move_start_x = event->motion.x;
+ move_start_x = dt_gdk_event_get_x(event);
move = DT_SHORTCUT_MOVE_VERTICAL;
}
else
@@ -4723,19 +4724,19 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
if(_previous_move == move || _previous_move == DT_SHORTCUT_MOVE_NONE)
dt_shortcut_move(DT_SHORTCUT_DEVICE_KEYBOARD_MOUSE,
- event->motion.time, move, size);
+ dt_gdk_event_get_time(event), move, size);
else
_previous_move = move;
}
break;
case GDK_BUTTON_PRESS:
- _sc.mods = _key_modifiers_clean(event->button.state);
+ _sc.mods = _key_modifiers_clean(dt_gdk_event_get_state(event));
- _pressed_button |= 1 << (event->button.button - 1);
+ _pressed_button |= 1 << (dt_gdk_event_get_button(event) - 1);
_interrupt_delayed_release(_sc.button != _pressed_button);
_sc.button = _pressed_button;
_sc.click = 0;
- _last_time = event->button.time;
+ _last_time = dt_gdk_event_get_time(event);
break;
case GDK_DOUBLE_BUTTON_PRESS:
_sc.click |= DT_SHORTCUT_DOUBLE;
@@ -4744,11 +4745,11 @@ gboolean dt_shortcut_dispatcher(GtkWidget *w,
_sc.click |= DT_SHORTCUT_TRIPLE;
break;
case GDK_BUTTON_RELEASE:
- _pressed_button &= ~(1 << (event->button.button - 1));
+ _pressed_button &= ~(1 << (dt_gdk_event_get_button(event) - 1));
_interrupt_delayed_release(FALSE);
- _delay_for_double_triple(event->button.time, 0);
+ _delay_for_double_triple(dt_gdk_event_get_time(event), 0);
_last_time = 0; // important; otherwise releasing two buttons will trigger two actions
// also, we seem to be receiving presses and releases twice!?! FIXME
diff --git a/src/gui/gtk.c b/src/gui/gtk.c
index 32fc10563c8b..52de7818f934 100644
--- a/src/gui/gtk.c
+++ b/src/gui/gtk.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/darktable.h"
#ifdef HAVE_GPHOTO2
@@ -430,7 +431,7 @@ gboolean dt_gui_ignore_scroll(GdkEventScroll *event)
const gboolean ignore_without_mods =
dt_conf_get_bool("darkroom/ui/sidebar_scroll_default");
const GdkModifierType mods_pressed =
- (event->state & gtk_accelerator_get_default_mod_mask());
+ (dt_gdk_event_get_state(event) & gtk_accelerator_get_default_mod_mask());
if(mods_pressed == 0)
{
@@ -457,7 +458,7 @@ gboolean dt_gui_get_scroll_deltas(const GdkEventScroll *event,
if(gdk_event_get_pointer_emulated((GdkEvent*)event)) return FALSE;
gboolean handled = FALSE;
- switch(event->direction)
+ switch(dt_gdk_event_get_scroll_direction(event))
{
// is one-unit cardinal, e.g. from a mouse scroll wheel
case GDK_SCROLL_LEFT:
@@ -494,14 +495,14 @@ gboolean dt_gui_get_scroll_deltas(const GdkEventScroll *event,
break;
// is trackpad (or touch) scroll
case GDK_SCROLL_SMOOTH:
- if((delta_x && event->delta_x != 0) || (delta_y && event->delta_y != 0))
+ if((delta_x && dt_gdk_event_get_scroll_delta_x(event) != 0) || (delta_y && dt_gdk_event_get_scroll_delta_y(event) != 0))
{
#ifdef GDK_WINDOWING_QUARTZ // on macOS deltas need to be scaled
- if(delta_x) *delta_x = event->delta_x / DT_UI_SCROLL_SMOOTH_DELTA_SCALE;
- if(delta_y) *delta_y = event->delta_y / DT_UI_SCROLL_SMOOTH_DELTA_SCALE;
+ if(delta_x) *delta_x = dt_gdk_event_get_scroll_delta_x(event) / DT_UI_SCROLL_SMOOTH_DELTA_SCALE;
+ if(delta_y) *delta_y = dt_gdk_event_get_scroll_delta_y(event) / DT_UI_SCROLL_SMOOTH_DELTA_SCALE;
#else
- if(delta_x) *delta_x = event->delta_x;
- if(delta_y) *delta_y = event->delta_y;
+ if(delta_x) *delta_x = dt_gdk_event_get_scroll_delta_x(event);
+ if(delta_y) *delta_y = dt_gdk_event_get_scroll_delta_y(event);
#endif
handled = TRUE;
}
@@ -524,7 +525,7 @@ gboolean dt_gui_get_scroll_unit_deltas(const GdkEventScroll *event,
gboolean handled = FALSE;
- switch(event->direction)
+ switch(dt_gdk_event_get_scroll_direction(event))
{
// is one-unit cardinal, e.g. from a mouse scroll wheel
case GDK_SCROLL_LEFT:
@@ -571,11 +572,11 @@ gboolean dt_gui_get_scroll_unit_deltas(const GdkEventScroll *event,
// scroll, and only then tell caller that there is a scroll to
// handle
#ifdef GDK_WINDOWING_QUARTZ // on macOS deltas need to be scaled
- acc_x += event->delta_x / DT_UI_SCROLL_SMOOTH_DELTA_SCALE;
- acc_y += event->delta_y / DT_UI_SCROLL_SMOOTH_DELTA_SCALE;
+ acc_x += dt_gdk_event_get_scroll_delta_x(event) / DT_UI_SCROLL_SMOOTH_DELTA_SCALE;
+ acc_y += dt_gdk_event_get_scroll_delta_y(event) / DT_UI_SCROLL_SMOOTH_DELTA_SCALE;
#else
- acc_x += event->delta_x;
- acc_y += event->delta_y;
+ acc_x += dt_gdk_event_get_scroll_delta_x(event);
+ acc_y += dt_gdk_event_get_scroll_delta_y(event);
#endif
const gdouble amt_x = trunc(acc_x);
const gdouble amt_y = trunc(acc_y);
@@ -742,7 +743,7 @@ static gboolean _input_event(GtkWidget *widget,
{
(void)user_data;
- switch(event->type)
+ switch(dt_gdk_event_get_type(event))
{
case GDK_TOUCHPAD_PINCH:
case GDK_TOUCHPAD_SWIPE:
@@ -751,7 +752,7 @@ static gboolean _input_event(GtkWidget *widget,
{
dt_print(DT_DEBUG_INPUT,
"[touchpad] gesture event type=%d source='%s' source_type=%d",
- event->type,
+ dt_gdk_event_get_type(event),
gdk_device_get_name(_touchpad),
gdk_device_get_source(_touchpad));
}
@@ -759,14 +760,14 @@ static gboolean _input_event(GtkWidget *widget,
{
dt_print(DT_DEBUG_INPUT,
"[touchpad] gesture event type=%d without source device",
- event->type);
+ dt_gdk_event_get_type(event));
}
break;
default:
break;
}
- if(event->type == GDK_TOUCHPAD_PINCH && darktable.gui->touchpad_gestures_enabled)
+ if(dt_gdk_event_get_type(event) == GDK_TOUCHPAD_PINCH && darktable.gui->touchpad_gestures_enabled)
{
const GdkEventTouchpadPinch *pinch = &event->touchpad_pinch;
dt_print(DT_DEBUG_INPUT,
@@ -783,7 +784,7 @@ static gboolean _input_event(GtkWidget *widget,
dt_print(DT_DEBUG_INPUT,
"[touchpad] pinch ignored by current view");
}
- else if(event->type == GDK_TOUCHPAD_PINCH)
+ else if(dt_gdk_event_get_type(event) == GDK_TOUCHPAD_PINCH)
{
dt_print(DT_DEBUG_INPUT,
"[touchpad] pinch received but disabled by preference darkroom/ui/touchpad_gestures");
@@ -799,23 +800,23 @@ static gboolean _scrolled(GtkWidget *widget,
(void)user_data;
GdkDevice *device = gdk_event_get_source_device((GdkEvent *)event);
const gboolean touchpad_enabled = darktable.gui->touchpad_gestures_enabled;
- const gboolean ctrl_pressed = dt_modifier_is(event->state, GDK_CONTROL_MASK);
+ const gboolean ctrl_pressed = dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
dt_print(DT_DEBUG_INPUT,
"[scroll] direction=%d smooth=%s stop=%s ctrl=%s"
" x=%.1f y=%.1f dx=%.3f dy=%.3f state=0x%x"
" device='%s' source-type=%d",
- event->direction,
- event->direction == GDK_SCROLL_SMOOTH ? "yes" : "no",
+ dt_gdk_event_get_scroll_direction(event),
+ dt_gdk_event_get_scroll_direction(event) == GDK_SCROLL_SMOOTH ? "yes" : "no",
event->is_stop ? "yes" : "no",
ctrl_pressed ? "yes" : "no",
- event->x, event->y, event->delta_x, event->delta_y, event->state,
+ dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), dt_gdk_event_get_scroll_delta_x(event), dt_gdk_event_get_scroll_delta_y(event), dt_gdk_event_get_state(event),
device ? gdk_device_get_name(device) : "",
device ? (int)gdk_device_get_source(device) : -1);
const gboolean is_touchpad_source = device && gdk_device_get_source(device) == GDK_SOURCE_TOUCHPAD;
const gboolean matches_last_gesture_device = (device == _touchpad);
- const gboolean is_smooth = event->direction == GDK_SCROLL_SMOOTH && !event->is_stop;
+ const gboolean is_smooth = dt_gdk_event_get_scroll_direction(event) == GDK_SCROLL_SMOOTH && !event->is_stop;
#ifdef GDK_WINDOWING_QUARTZ
// On macOS/Quartz, the built-in trackpad reports as GDK_SOURCE_MOUSE, not
// GDK_SOURCE_TOUCHPAD. Route every non-ctrl smooth scroll to gesture_pan so
@@ -844,12 +845,12 @@ static gboolean _scrolled(GtkWidget *widget,
delta_x *= DT_UI_SCROLL_SMOOTH_DELTA_SCALE;
delta_y *= DT_UI_SCROLL_SMOOTH_DELTA_SCALE;
if((delta_x != 0.0 || delta_y != 0.0)
- && dt_view_manager_gesture_pan(darktable.view_manager, event->x, event->y,
- delta_x, delta_y, event->state & 0xf))
+ && dt_view_manager_gesture_pan(darktable.view_manager, dt_gdk_event_get_x(event), dt_gdk_event_get_y(event),
+ delta_x, delta_y, dt_gdk_event_get_state(event) & 0xf))
{
dt_print(DT_DEBUG_INPUT,
"[touchpad] pan x=%.2f y=%.2f dx=%.3f dy=%.3f source='%s'",
- event->x, event->y, delta_x, delta_y,
+ dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), delta_x, delta_y,
device ? gdk_device_get_name(device) : "");
gtk_widget_queue_draw(widget);
return TRUE;
@@ -880,12 +881,12 @@ static gboolean _scrolled(GtkWidget *widget,
{
dt_print(DT_DEBUG_INPUT,
"[scroll] discrete fallback x=%.2f y=%.2f up=%d state=0x%x source='%s' source_type=%d",
- event->x, event->y, delta_y < 0, event->state,
+ dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), delta_y < 0, dt_gdk_event_get_state(event),
device ? gdk_device_get_name(device) : "",
device ? gdk_device_get_source(device) : -1);
- dt_view_manager_scrolled(darktable.view_manager, event->x, event->y,
+ dt_view_manager_scrolled(darktable.view_manager, dt_gdk_event_get_x(event), dt_gdk_event_get_y(event),
delta_y < 0,
- event->state & 0xf);
+ dt_gdk_event_get_state(event) & 0xf);
gtk_widget_queue_draw(widget);
}
@@ -1218,19 +1219,19 @@ static gboolean _window_configure(GtkWidget *da,
guint dt_gui_translated_key_state(const GdkEventKey *event)
{
- if(gdk_keyval_to_lower(event->keyval) == gdk_keyval_to_upper(event->keyval) )
+ if(gdk_keyval_to_lower(dt_gdk_event_get_keyval(event)) == gdk_keyval_to_upper(dt_gdk_event_get_keyval(event)) )
{
//not an alphabetic character
//find any modifiers consumed to produce keyval
guint consumed;
gdk_keymap_translate_keyboard_state
(gdk_keymap_get_for_display(gdk_display_get_default()),
- event->hardware_keycode, event->state, event->group,
+ dt_gdk_event_get_keycode(event), dt_gdk_event_get_state(event), event->group,
NULL, NULL, NULL, &consumed);
- return event->state & ~consumed & gtk_accelerator_get_default_mod_mask();
+ return dt_gdk_event_get_state(event) & ~consumed & gtk_accelerator_get_default_mod_mask();
}
else
- return event->state & gtk_accelerator_get_default_mod_mask();
+ return dt_gdk_event_get_state(event) & gtk_accelerator_get_default_mod_mask();
}
static gboolean _button_pressed(GtkWidget *w,
@@ -1244,8 +1245,8 @@ static gboolean _button_pressed(GtkWidget *w,
{
gdk_event_get_axis((GdkEvent *)event, GDK_AXIS_PRESSURE, &pressure);
}
- dt_control_button_pressed(event->x, event->y, pressure,
- event->button, event->type, event->state & 0xf);
+ dt_control_button_pressed(dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), pressure,
+ dt_gdk_event_get_button(event), dt_gdk_event_get_type(event), dt_gdk_event_get_state(event) & 0xf);
gtk_widget_grab_focus(w);
gtk_widget_queue_draw(w);
return FALSE;
@@ -1255,7 +1256,7 @@ static gboolean _button_released(GtkWidget *w,
const GdkEventButton *event,
gpointer user_data)
{
- dt_control_button_released(event->x, event->y, event->button, event->state & 0xf);
+ dt_control_button_released(dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), dt_gdk_event_get_button(event), dt_gdk_event_get_state(event) & 0xf);
gtk_widget_queue_draw(w);
return TRUE;
}
@@ -1272,7 +1273,7 @@ static gboolean _mouse_moved(GtkWidget *w,
gdk_event_get_axis((GdkEvent *)event, GDK_AXIS_PRESSURE, &pressure);
gui->have_pen_pressure = pressure != 1.0;
}
- dt_control_mouse_moved(event->x, event->y, pressure, event->state & 0xf);
+ dt_control_mouse_moved(dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), pressure, dt_gdk_event_get_state(event) & 0xf);
return FALSE;
}
@@ -2612,7 +2613,7 @@ static gboolean _ui_init_panel_container_center_scroll_event(GtkWidget *widget,
const GdkEventScroll *event)
{
// just make sure nothing happens unless ctrl-alt are pressed:
- return (((event->state & gtk_accelerator_get_default_mod_mask())
+ return (((dt_gdk_event_get_state(event) & gtk_accelerator_get_default_mod_mask())
!= darktable.gui->sidebar_scroll_mask)
!= dt_conf_get_bool("darkroom/ui/sidebar_scroll_default"));
// GTK4: return GDK_EVENT_PROPAGATE/GDK_EVENT_STOP
@@ -2710,7 +2711,7 @@ static gboolean _side_panel_press(GtkWidget *widget,
const GdkEvent *event,
gpointer user_data)
{
- if(event->button.button == GDK_BUTTON_SECONDARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
_add_remove_modules(NULL);
return TRUE;
}
@@ -3908,7 +3909,7 @@ static gboolean _notebook_motion_notify_callback(GtkNotebook *notebook,
gtk_widget_get_allocation(gtk_notebook_get_tab_label
(notebook, gtk_notebook_get_nth_page(notebook, i)),
&label_alloc);
- if(event->x + notebook_alloc.x < label_alloc.x + label_alloc.width)
+ if(dt_gdk_event_get_x(event) + notebook_alloc.x < label_alloc.x + label_alloc.width)
{
darktable.control->element = i;
break;
@@ -4038,7 +4039,7 @@ static gboolean _notebook_button_press_callback(GtkNotebook *notebook,
const GdkEventButton *event,
gpointer user_data)
{
- if(event->type == GDK_2BUTTON_PRESS && gtk_get_event_widget((GdkEvent*)event) == GTK_WIDGET(notebook))
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS && gtk_get_event_widget((GdkEvent*)event) == GTK_WIDGET(notebook))
_reset_all_bauhaus(notebook, gtk_notebook_get_nth_page(notebook, gtk_notebook_get_current_page(notebook)));
return FALSE;
@@ -4235,7 +4236,7 @@ static gboolean _resize_wrap_scroll(GtkScrolledWindow *sw,
const gint increment = _get_container_row_heigth(w);
- if(dt_modifier_is(event->state, GDK_SHIFT_MASK | GDK_MOD1_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK | GDK_MOD1_MASK))
{
const gint new_size = dt_conf_get_int(config_str) + increment*delta_y;
@@ -4267,7 +4268,7 @@ static gboolean _scroll_wrap_height(GtkWidget *w,
const GdkEventScroll *event,
const char *config_str)
{
- if(dt_modifier_is(event->state, GDK_SHIFT_MASK | GDK_MOD1_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK | GDK_MOD1_MASK))
{
int delta_y;
if(dt_gui_get_scroll_unit_delta(event, &delta_y))
@@ -4318,7 +4319,7 @@ static gboolean _resize_wrap_motion(GtkWidget *widget,
{
// keeps resize box from shrinking when user clicks above very
// bottom of handle
- const int new_height = round(event->y + 0.5*DT_RESIZE_HANDLE_SIZE);
+ const int new_height = round(dt_gdk_event_get_y(event) + 0.5*DT_RESIZE_HANDLE_SIZE);
if(DTGTK_IS_DRAWING_AREA(widget))
{
// enforce configuration limits
@@ -4335,11 +4336,11 @@ static gboolean _resize_wrap_motion(GtkWidget *widget,
}
const gboolean prior = _resize_wrap_handle_hover;
- if(!(event->state & GDK_BUTTON1_MASK)
- && event->window == gtk_widget_get_window(widget))
+ if(!(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
+ && dt_gdk_event_get_window(event) == gtk_widget_get_window(widget))
{
_resize_wrap_handle_hover =
- event->y >= gtk_widget_get_allocated_height(widget) - DT_RESIZE_HANDLE_SIZE;
+ dt_gdk_event_get_y(event) >= gtk_widget_get_allocated_height(widget) - DT_RESIZE_HANDLE_SIZE;
if(_resize_wrap_handle_hover != prior)
{
if(_resize_wrap_handle_hover)
@@ -4359,15 +4360,15 @@ static gboolean _resize_wrap_button(GtkWidget *widget,
const char *config_str)
{
if(_resize_wrap_dragging
- && event->type == GDK_BUTTON_RELEASE)
+ && dt_gdk_event_get_type(event) == GDK_BUTTON_RELEASE)
{
_resize_wrap_dragging = FALSE;
dt_control_clear_temp_cursor();
return TRUE;
}
- else if(event->y >= gtk_widget_get_allocated_height(widget) - DT_RESIZE_HANDLE_SIZE
- && event->type == GDK_BUTTON_PRESS
- && event->button == GDK_BUTTON_PRIMARY)
+ else if(dt_gdk_event_get_y(event) >= gtk_widget_get_allocated_height(widget) - DT_RESIZE_HANDLE_SIZE
+ && dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS
+ && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
_resize_wrap_dragging = TRUE;
return TRUE;
@@ -4381,13 +4382,13 @@ static gboolean _resize_wrap_enter_leave(GtkWidget *widget,
const char *config_str)
{
_resize_wrap_hovered =
- event->type == GDK_ENTER_NOTIFY
+ dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY
|| event->detail == GDK_NOTIFY_INFERIOR
|| _resize_wrap_dragging ? widget : NULL;
// When leave handle and widget, remove temp resize cursor. When
// enter widget, motion event will handle cursor change for handle.
- if(event->type == GDK_LEAVE_NOTIFY
+ if(dt_gdk_event_get_type(event) == GDK_LEAVE_NOTIFY
&& !_resize_wrap_dragging
&& _resize_wrap_handle_hover)
{
@@ -4847,7 +4848,7 @@ static void _scroll_proxy_real(GtkEventControllerScroll* controller,
&& !gdk_event_get_pointer_emulated(event)
&& !_scroll_sidebar(controller, dy, event))
{
- if(event->scroll.direction == GDK_SCROLL_SMOOTH)
+ if(dt_gdk_event_get_scroll_direction(event) == GDK_SCROLL_SMOOTH)
{
dx = _scroll_attenuate(dx);
dy = _scroll_attenuate(dy);
diff --git a/src/gui/import_metadata.c b/src/gui/import_metadata.c
index e6bd9fe7769f..482018f26f12 100644
--- a/src/gui/import_metadata.c
+++ b/src/gui/import_metadata.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/debug.h"
#include "common/metadata.h"
@@ -70,7 +71,7 @@ static gboolean _import_metadata_reset(GtkWidget *label,
GdkEventButton *event,
GtkWidget *widget)
{
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
gtk_entry_set_text(GTK_ENTRY(widget), "");
}
@@ -108,7 +109,7 @@ static gboolean _import_metadata_reset_all(GtkWidget *label,
GdkEventButton *event,
dt_import_metadata_t *metadata)
{
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
_metadata_reset_all(metadata, FALSE);
}
diff --git a/src/gui/preferences.c b/src/gui/preferences.c
index ef3f89ab8ecd..0fb92056827c 100644
--- a/src/gui/preferences.c
+++ b/src/gui/preferences.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include
#include
@@ -284,7 +285,7 @@ static gboolean reset_language_widget(GtkWidget *label,
GdkEventButton *event,
GtkWidget *widget)
{
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
dt_bauhaus_combobox_set(widget, darktable.l10n->sys_default);
return TRUE;
@@ -1163,7 +1164,7 @@ static gboolean tree_key_press_presets(GtkWidget *widget,
// We can just ignore mod key presses outright
if(event->is_modifier) return FALSE;
- if(event->keyval == GDK_KEY_Delete || event->keyval == GDK_KEY_BackSpace)
+ if(dt_gdk_event_get_keyval(event) == GDK_KEY_Delete || dt_gdk_event_get_keyval(event) == GDK_KEY_BackSpace)
{
// If a leaf node is selected, delete that preset
@@ -1349,13 +1350,13 @@ _gui_preferences_bool_click(GtkWidget *label,
GdkEventButton *event,
GtkWidget *widget)
{
- if(event->type == GDK_BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS)
{
const gboolean cur = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), !cur);
return TRUE;
}
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
dt_gui_preferences_bool_reset(widget);
return TRUE;
@@ -1414,7 +1415,7 @@ _gui_preferences_int_reset(GtkWidget *label,
GdkEventButton *event,
GtkWidget *widget)
{
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
dt_gui_preferences_int_reset(widget);
return TRUE;
@@ -1525,7 +1526,7 @@ _gui_preferences_string_reset(GtkWidget *label,
GdkEventButton *event,
GtkWidget *widget)
{
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
dt_gui_preferences_string_reset(widget);
return TRUE;
diff --git a/src/gui/preferences_ai.c b/src/gui/preferences_ai.c
index 521e2457e5a6..b9c8438b86c4 100644
--- a/src/gui/preferences_ai.c
+++ b/src/gui/preferences_ai.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "gui/preferences_ai.h"
#include "bauhaus/bauhaus.h"
@@ -609,7 +610,7 @@ static void _on_provider_changed(GtkWidget *widget, gpointer user_data)
static gboolean
_reset_enable_click(GtkWidget *label, GdkEventButton *event, GtkWidget *widget)
{
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
const gboolean def = dt_confgen_get_bool("plugins/ai/enabled", DT_DEFAULT);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), def);
@@ -622,7 +623,7 @@ _reset_enable_click(GtkWidget *label, GdkEventButton *event, GtkWidget *widget)
static gboolean
_reset_provider_click(GtkWidget *label, GdkEventButton *event, gpointer user_data)
{
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
dt_prefs_ai_data_t *data = (dt_prefs_ai_data_t *)user_data;
const char *def = dt_confgen_get(DT_AI_CONF_PROVIDER, DT_DEFAULT);
@@ -1264,15 +1265,15 @@ static gboolean _on_tree_motion(GtkWidget *widget,
GdkWindow *bin = gtk_tree_view_get_bin_window(tv);
if(!bin) return FALSE;
gint bx, by;
- if(event->window == bin)
+ if(dt_gdk_event_get_window(event) == bin)
{
- bx = (gint)event->x;
- by = (gint)event->y;
+ bx = (gint)dt_gdk_event_get_x(event);
+ by = (gint)dt_gdk_event_get_y(event);
}
else
{
gtk_tree_view_convert_widget_to_bin_window_coords(
- tv, (gint)event->x, (gint)event->y, &bx, &by);
+ tv, (gint)dt_gdk_event_get_x(event), (gint)dt_gdk_event_get_y(event), &bx, &by);
}
if(_info_active_at_bin(user_data, tv, bx, by))
{
@@ -1292,8 +1293,8 @@ static gboolean _on_info_button_press(GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
- if(event->type != GDK_BUTTON_PRESS
- || event->button != 1)
+ if(dt_gdk_event_get_type(event) != GDK_BUTTON_PRESS
+ || dt_gdk_event_get_button(event) != 1)
return FALSE;
dt_prefs_ai_data_t *data = (dt_prefs_ai_data_t *)user_data;
@@ -1301,7 +1302,7 @@ static gboolean _on_info_button_press(GtkWidget *widget,
GtkTreePath *path = NULL;
GtkTreeViewColumn *column = NULL;
- if(!gtk_tree_view_get_path_at_pos(tv, (gint)event->x, (gint)event->y,
+ if(!gtk_tree_view_get_path_at_pos(tv, (gint)dt_gdk_event_get_x(event), (gint)dt_gdk_event_get_y(event),
&path, &column, NULL, NULL))
return FALSE;
diff --git a/src/gui/presets.c b/src/gui/presets.c
index 1727a5b037a0..7afd1b9e52d8 100644
--- a/src/gui/presets.c
+++ b/src/gui/presets.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/darktable.h"
@@ -1274,13 +1275,13 @@ static gboolean _menuitem_button_preset(GtkMenuItem *menuitem,
GdkEventButton *event,
dt_iop_module_t *module)
{
- gboolean long_click = dt_gui_long_click(event->time, _click_time);
+ gboolean long_click = dt_gui_long_click(dt_gdk_event_get_time(event), _click_time);
gchar *name = g_object_get_data(G_OBJECT(menuitem), "dt-preset-name");
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
- if(_click_time > event->time)
+ if(_click_time > dt_gdk_event_get_time(event))
{
if(_active_menu_item)
gtk_check_menu_item_set_active(_active_menu_item, FALSE);
@@ -1290,8 +1291,8 @@ static gboolean _menuitem_button_preset(GtkMenuItem *menuitem,
dt_gui_presets_apply_preset(name, module);
}
}
- else if(event->button == GDK_BUTTON_SECONDARY
- && event->type == GDK_BUTTON_RELEASE
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY
+ && dt_gdk_event_get_type(event) == GDK_BUTTON_RELEASE
&& _click_time)
{
if(long_click || (module->flags() & IOP_FLAGS_ONE_INSTANCE))
@@ -1313,7 +1314,7 @@ static gboolean _menuitem_button_preset(GtkMenuItem *menuitem,
dt_iop_connect_accels_multi(module->so);
}
- _click_time = event->type == GDK_BUTTON_PRESS ? event->time : G_MAXUINT;
+ _click_time = dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS ? dt_gdk_event_get_time(event) : G_MAXUINT;
return long_click; // keep menu open on long click
}
@@ -1322,7 +1323,7 @@ static void _menuitem_activate_preset(GtkMenuItem *menuitem,
dt_iop_module_t *module)
{
GdkEvent *event = gtk_get_current_event();
- if(event->type == GDK_KEY_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_KEY_PRESS)
dt_gui_presets_apply_preset(g_object_get_data(G_OBJECT(menuitem),
"dt-preset-name"), module);
gdk_event_free(event);
diff --git a/src/iop/ashift.c b/src/iop/ashift.c
index 0c83fc1a9597..bb0bd0a45284 100644
--- a/src/iop/ashift.c
+++ b/src/iop/ashift.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/bilateral.h"
@@ -5326,13 +5327,13 @@ static int _event_fit_v_button_clicked(GtkWidget *widget,
{
DT_GUARD_GUI_UPDATE(FALSE);
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_ashift_params_t *p = self->params;
dt_iop_ashift_gui_data_t *g = self->gui_data;
- const int control = dt_modifiers_include(event->state, GDK_CONTROL_MASK);
- const int shift = dt_modifiers_include(event->state, GDK_SHIFT_MASK);
+ const int control = dt_modifiers_include(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
+ const int shift = dt_modifiers_include(dt_gdk_event_get_state(event), GDK_SHIFT_MASK);
dt_iop_ashift_fitaxis_t fitaxis = ASHIFT_FIT_NONE;
@@ -5374,13 +5375,13 @@ static int _event_fit_h_button_clicked(GtkWidget *widget,
{
DT_GUARD_GUI_UPDATE(FALSE);
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_ashift_params_t *p = self->params;
dt_iop_ashift_gui_data_t *g = self->gui_data;
- const int control = dt_modifiers_include(event->state, GDK_CONTROL_MASK);
- const int shift = dt_modifiers_include(event->state, GDK_SHIFT_MASK);
+ const int control = dt_modifiers_include(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
+ const int shift = dt_modifiers_include(dt_gdk_event_get_state(event), GDK_SHIFT_MASK);
dt_iop_ashift_fitaxis_t fitaxis = ASHIFT_FIT_NONE;
@@ -5422,13 +5423,13 @@ static int _event_fit_both_button_clicked(GtkWidget *widget,
{
DT_GUARD_GUI_UPDATE(FALSE);
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_ashift_params_t *p = self->params;
dt_iop_ashift_gui_data_t *g = self->gui_data;
- const int control = dt_modifiers_include(event->state, GDK_CONTROL_MASK);
- const int shift = dt_modifiers_include(event->state, GDK_SHIFT_MASK);
+ const int control = dt_modifiers_include(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
+ const int shift = dt_modifiers_include(dt_gdk_event_get_state(event), GDK_SHIFT_MASK);
dt_iop_ashift_fitaxis_t fitaxis = ASHIFT_FIT_NONE;
@@ -5472,15 +5473,15 @@ static int _event_structure_auto_clicked(GtkWidget *widget,
{
DT_GUARD_GUI_UPDATE(FALSE);
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_ashift_params_t *p = self->params;
dt_iop_ashift_gui_data_t *g = self->gui_data;
_do_clean_structure(self, p, TRUE);
- const int control = dt_modifiers_include(event->state, GDK_CONTROL_MASK);
- const int shift = dt_modifiers_include(event->state, GDK_SHIFT_MASK);
+ const int control = dt_modifiers_include(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
+ const int shift = dt_modifiers_include(dt_gdk_event_get_state(event), GDK_SHIFT_MASK);
dt_iop_ashift_enhance_t enhance;
diff --git a/src/iop/atrous.c b/src/iop/atrous.c
index a953d74f85d5..387f3a10676b 100644
--- a/src/iop/atrous.c
+++ b/src/iop/atrous.c
@@ -14,6 +14,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/debug.h"
@@ -1032,7 +1033,7 @@ static gboolean area_enter_leave_notify(GtkWidget *widget,
dt_iop_module_t *self)
{
dt_iop_atrous_gui_data_t *g = self->gui_data;
- g->in_curve = event->type == GDK_ENTER_NOTIFY;
+ g->in_curve = dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY;
if(!g->dragging)
g->x_move = -1;
@@ -1385,8 +1386,8 @@ static gboolean area_motion_notify(GtkWidget *widget,
gtk_widget_get_allocation(widget, &allocation);
const int height = allocation.height - 2 * inset - DT_RESIZE_HANDLE_SIZE;
const int width = allocation.width - 2 * inset;
- if(!g->dragging) g->mouse_x = CLAMP(event->x - inset, 0, width) / (float)width;
- g->mouse_y = 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ if(!g->dragging) g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
+ g->mouse_y = 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
darktable.control->element = 0;
@@ -1400,7 +1401,7 @@ static gboolean area_motion_notify(GtkWidget *widget,
*p = g->drag_params;
if(g->x_move >= 0)
{
- const float mx = CLAMP(event->x - inset, 0, width) / (float)width;
+ const float mx = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
if(g->x_move > 0 && g->x_move < BANDS - 1)
{
const float minx = p->x[g->channel][g->x_move - 1] + 0.001f;
@@ -1415,7 +1416,7 @@ static gboolean area_motion_notify(GtkWidget *widget,
gtk_widget_queue_draw(widget);
dt_dev_add_history_item_target(darktable.develop, self, TRUE, widget + g->channel);
}
- else if(event->y > height)
+ else if(dt_gdk_event_get_y(event) > height)
{
// move x-positions
g->x_move = 0;
@@ -1461,7 +1462,7 @@ static gboolean area_button_press(GtkWidget *widget,
GdkEventButton *event,
dt_iop_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// reset current curve
dt_iop_atrous_params_t *p = self->params;
@@ -1475,7 +1476,7 @@ static gboolean area_button_press(GtkWidget *widget,
}
dt_dev_add_history_item_target(darktable.develop, self, TRUE, widget + g->channel2);
}
- else if(event->button == GDK_BUTTON_PRIMARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
// set active point
dt_iop_atrous_gui_data_t *g = self->gui_data;
@@ -1487,8 +1488,8 @@ static gboolean area_button_press(GtkWidget *widget,
const int width = allocation.width - 2 * inset;
g->mouse_pick
= dt_draw_curve_calc_value(g->minmax_curve,
- CLAMP(event->x - inset, 0, width) / (float)width);
- g->mouse_pick -= 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width);
+ g->mouse_pick -= 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
g->dragging = 1;
return TRUE;
}
@@ -1499,7 +1500,7 @@ static gboolean area_button_release(GtkWidget *widget,
GdkEventButton *event,
dt_iop_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_atrous_gui_data_t *g = self->gui_data;
g->dragging = 0;
@@ -1517,7 +1518,7 @@ static gboolean area_scrolled(GtkWidget *widget,
if(dt_gui_ignore_scroll(event)) return FALSE;
- if(dt_modifier_is(event->state, GDK_MOD1_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_MOD1_MASK))
return gtk_widget_event(GTK_WIDGET(g->channel_tabs), (GdkEvent*)event);
int delta_y;
diff --git a/src/iop/basecurve.c b/src/iop/basecurve.c
index dc84532889a4..ea207d25aad2 100644
--- a/src/iop/basecurve.c
+++ b/src/iop/basecurve.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/colorspaces_inline_conversions.h"
@@ -1537,7 +1538,7 @@ static gboolean dt_iop_basecurve_leave_notify(GtkWidget *widget,
dt_iop_module_t *self)
{
dt_iop_basecurve_gui_data_t *g = self->gui_data;
- if(!(event->state & GDK_BUTTON1_MASK))
+ if(!(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK))
g->selected = -1;
gtk_widget_queue_draw(widget);
return FALSE;
@@ -1793,14 +1794,14 @@ static gboolean dt_iop_basecurve_motion_notify(GtkWidget *widget,
int height = allocation.height - 2 * inset, width = allocation.width - 2 * inset;
const double old_m_x = g->mouse_x;
const double old_m_y = g->mouse_y;
- g->mouse_x = event->x - inset;
- g->mouse_y = event->y - inset;
+ g->mouse_x = dt_gdk_event_get_x(event) - inset;
+ g->mouse_y = dt_gdk_event_get_y(event) - inset;
const float mx = CLAMP(g->mouse_x, 0, width) / (float)width;
const float my = 1.0f - CLAMP(g->mouse_y, 0, height) / (float)height;
const float linx = to_lin(mx, g->loglogscale), liny = to_lin(my, g->loglogscale);
- if(event->state & GDK_BUTTON1_MASK)
+ if(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
{
// got a vertex selected:
if(g->selected >= 0)
@@ -1814,7 +1815,7 @@ static gboolean dt_iop_basecurve_motion_notify(GtkWidget *widget,
const float dy = to_lin(1 - g->mouse_y / height - translate_mouse_y, g->loglogscale)
- to_lin(1 - old_m_y / height - translate_mouse_y, g->loglogscale);
- return _move_point_internal(self, widget, dx, dy, event->state);
+ return _move_point_internal(self, widget, dx, dy, dt_gdk_event_get_state(event));
}
else if(nodes < MAXNODES && g->selected >= -1)
{
@@ -1859,9 +1860,9 @@ static gboolean dt_iop_basecurve_button_press(GtkWidget *widget,
int nodes = p->basecurve_nodes[ch];
dt_iop_basecurve_node_t *basecurve = p->basecurve[ch];
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
- if(event->type == GDK_BUTTON_PRESS && dt_modifier_is(event->state, GDK_CONTROL_MASK)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK)
&& nodes < MAXNODES && g->selected == -1)
{
// if we are not on a node -> add a new node at the current x of the pointer and y of the curve at that x
@@ -1869,8 +1870,8 @@ static gboolean dt_iop_basecurve_button_press(GtkWidget *widget,
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
int width = allocation.width - 2 * inset;
- g->mouse_x = event->x - inset;
- g->mouse_y = event->y - inset;
+ g->mouse_x = dt_gdk_event_get_x(event) - inset;
+ g->mouse_y = dt_gdk_event_get_y(event) - inset;
const float mx = CLAMP(g->mouse_x, 0, width) / (float)width;
const float linx = to_lin(mx, g->loglogscale);
@@ -1920,7 +1921,7 @@ static gboolean dt_iop_basecurve_button_press(GtkWidget *widget,
}
return TRUE;
}
- else if(event->type == GDK_2BUTTON_PRESS)
+ else if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// reset current curve
p->basecurve_nodes[ch] = d->basecurve_nodes[ch];
@@ -1936,7 +1937,7 @@ static gboolean dt_iop_basecurve_button_press(GtkWidget *widget,
return TRUE;
}
}
- else if(event->button == GDK_BUTTON_SECONDARY && g->selected >= 0)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY && g->selected >= 0)
{
if(g->selected == 0 || g->selected == nodes - 1)
{
@@ -2002,7 +2003,7 @@ static gboolean _scrolled(GtkWidget *widget, GdkEventScroll *event, dt_iop_modul
if(dt_gui_get_scroll_delta(event, &delta_y))
{
delta_y *= -BASECURVE_DEFAULT_STEP;
- return _move_point_internal(self, widget, 0.0, delta_y, event->state);
+ return _move_point_internal(self, widget, 0.0, delta_y, dt_gdk_event_get_state(event));
}
return TRUE;
@@ -2018,22 +2019,22 @@ static gboolean dt_iop_basecurve_key_press(GtkWidget *widget,
int handled = 0;
float dx = 0.0f, dy = 0.0f;
- if(event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up)
+ if(dt_gdk_event_get_keyval(event) == GDK_KEY_Up || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Up)
{
handled = 1;
dy = BASECURVE_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Down || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Down)
{
handled = 1;
dy = -BASECURVE_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Right || event->keyval == GDK_KEY_KP_Right)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Right || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Right)
{
handled = 1;
dx = BASECURVE_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_KP_Left)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Left || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Left)
{
handled = 1;
dx = -BASECURVE_DEFAULT_STEP;
@@ -2041,7 +2042,7 @@ static gboolean dt_iop_basecurve_key_press(GtkWidget *widget,
if(!handled) return FALSE;
- return _move_point_internal(self, widget, dx, dy, event->state);
+ return _move_point_internal(self, widget, dx, dy, dt_gdk_event_get_state(event));
}
#undef BASECURVE_DEFAULT_STEP
diff --git a/src/iop/colorchecker.c b/src/iop/colorchecker.c
index cd5172142899..548790259d67 100644
--- a/src/iop/colorchecker.c
+++ b/src/iop/colorchecker.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/colorspaces_inline_conversions.h"
@@ -1393,8 +1394,8 @@ static gboolean checker_motion_notify(
const int width = allocation.width;
const int height = allocation.height;
- const float mouse_x = CLAMP(event->x, 0, width);
- const float mouse_y = CLAMP(event->y, 0, height);
+ const float mouse_x = CLAMP(dt_gdk_event_get_x(event), 0, width);
+ const float mouse_y = CLAMP(dt_gdk_event_get_y(event), 0, height);
int cells_x = 6, cells_y = 4;
if(p->num_patches > 24)
{
@@ -1428,8 +1429,8 @@ static gboolean checker_button_press(
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
int width = allocation.width, height = allocation.height;
- const float mouse_x = CLAMP(event->x, 0, width);
- const float mouse_y = CLAMP(event->y, 0, height);
+ const float mouse_x = CLAMP(dt_gdk_event_get_x(event), 0, width);
+ const float mouse_y = CLAMP(dt_gdk_event_get_y(event), 0, height);
int cells_x = 6, cells_y = 4;
if(p->num_patches > 24)
{
@@ -1439,7 +1440,7 @@ static gboolean checker_button_press(
const float mx = mouse_x * cells_x / (float)width;
const float my = mouse_y * cells_y / (float)height;
int patch = (int)mx + cells_x*(int)my;
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{ // reset on double click
if(patch < 0 || patch >= p->num_patches) return FALSE;
p->target_L[patch] = p->source_L[patch];
@@ -1452,7 +1453,7 @@ static gboolean checker_button_press(
gtk_widget_queue_draw(g->area);
return TRUE;
}
- else if(event->button == GDK_BUTTON_SECONDARY && (patch < p->num_patches))
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY && (patch < p->num_patches))
{
// right click: delete patch, move others up
if(patch < 0 || patch >= p->num_patches) return FALSE;
@@ -1477,8 +1478,8 @@ static gboolean checker_button_press(
gtk_widget_queue_draw(g->area);
return TRUE;
}
- else if((event->button == GDK_BUTTON_PRIMARY) &&
- dt_modifier_is(event->state, GDK_SHIFT_MASK) &&
+ else if((dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY) &&
+ dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK) &&
(self->request_color_pick == DT_REQUEST_COLORPICK_MODULE))
{
// shift-left while colour picking: replace source colour
diff --git a/src/iop/colorcorrection.c b/src/iop/colorcorrection.c
index 8a7551e3c5b4..7fe8e4c41569 100644
--- a/src/iop/colorcorrection.c
+++ b/src/iop/colorcorrection.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/colorspaces.h"
#include "common/opencl.h"
@@ -355,11 +356,11 @@ static gboolean dt_iop_colorcorrection_motion_notify(GtkWidget *widget, GdkEvent
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
int width = allocation.width - 2 * inset, height = allocation.height - 2 * inset;
- const float mouse_x = CLAMP(event->x - inset, 0, width);
- const float mouse_y = CLAMP(height - 1 - event->y + inset, 0, height);
+ const float mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width);
+ const float mouse_y = CLAMP(height - 1 - dt_gdk_event_get_y(event) + inset, 0, height);
const float ma = (2.0 * mouse_x - width) * DT_COLORCORRECTION_MAX / (float)width;
const float mb = (2.0 * mouse_y - height) * DT_COLORCORRECTION_MAX / (float)height;
- if(event->state & GDK_BUTTON1_MASK)
+ if(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
{
if(g->selected == 1)
{
@@ -393,7 +394,7 @@ static gboolean dt_iop_colorcorrection_motion_notify(GtkWidget *widget, GdkEvent
static gboolean dt_iop_colorcorrection_button_press(GtkWidget *widget, GdkEventButton *event,
dt_iop_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// double click resets:
dt_iop_colorcorrection_gui_data_t *g = self->gui_data;
@@ -456,22 +457,22 @@ static gboolean dt_iop_colorcorrection_key_press(GtkWidget *widget, GdkEventKey
int handled = 0;
float dx = 0.0f, dy = 0.0f;
- if(event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up)
+ if(dt_gdk_event_get_keyval(event) == GDK_KEY_Up || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Up)
{
handled = 1;
dy = COLORCORRECTION_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Down || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Down)
{
handled = 1;
dy = -COLORCORRECTION_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Right || event->keyval == GDK_KEY_KP_Right)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Right || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Right)
{
handled = 1;
dx = COLORCORRECTION_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_KP_Left)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Left || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Left)
{
handled = 1;
dx = -COLORCORRECTION_DEFAULT_STEP;
@@ -479,7 +480,7 @@ static gboolean dt_iop_colorcorrection_key_press(GtkWidget *widget, GdkEventKey
if(!handled) return FALSE;
- float multiplier = dt_accel_get_speed_multiplier(widget, event->state);
+ float multiplier = dt_accel_get_speed_multiplier(widget, dt_gdk_event_get_state(event));
dx *= multiplier;
dy *= multiplier;
diff --git a/src/iop/colorequal.c b/src/iop/colorequal.c
index dfadc4c5b342..7a7cce905bf6 100644
--- a/src/iop/colorequal.c
+++ b/src/iop/colorequal.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
/* Midi mapping is supported, here is the reference for loupedeck+
midi:D7=iop/colorequal/page;hue
@@ -2702,7 +2703,7 @@ static gboolean _area_scrolled_callback(GtkWidget *widget,
{
const dt_iop_colorequal_gui_data_t *g = self->gui_data;
- GtkWidget *w = dt_modifier_is(event->state, GDK_MOD1_MASK)
+ GtkWidget *w = dt_modifier_is(dt_gdk_event_get_state(event), GDK_MOD1_MASK)
? GTK_WIDGET(g->notebook)
: _get_slider(g, g->selected);
return gtk_widget_event(w, (GdkEvent*)event);
@@ -2715,16 +2716,16 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
dt_iop_colorequal_gui_data_t *g = self->gui_data;
if(g->dragging && g->on_node)
- _area_set_pos(g, event->y);
+ _area_set_pos(g, dt_gdk_event_get_y(event));
else
{
// look if close to a node
const float epsilon = DT_PIXEL_APPLY_DPI(10.0);
const int oldsel = g->selected;
const int oldon = g->on_node;
- g->selected = (int)(((float)event->x - g->points[0][0])
+ g->selected = (int)(((float)dt_gdk_event_get_x(event) - g->points[0][0])
/ (g->points[1][0] - g->points[0][0]) + 0.5f) % NODES;
- g->on_node = fabsf(g->points[g->selected][1] - (float)event->y) < epsilon;
+ g->on_node = fabsf(g->points[g->selected][1] - (float)dt_gdk_event_get_y(event)) < epsilon;
darktable.control->element = g->selected;
if(oldsel != g->selected || oldon != g->on_node)
gtk_widget_queue_draw(GTK_WIDGET(g->area));
@@ -2739,17 +2740,17 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
{
dt_iop_colorequal_gui_data_t *g = self->gui_data;
- if(event->button == GDK_BUTTON_MIDDLE
- || (event->button == GDK_BUTTON_PRIMARY // Ctrl+Click alias for macOS
- && dt_modifier_is(event->state, GDK_CONTROL_MASK)))
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_MIDDLE
+ || (dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY // Ctrl+Click alias for macOS
+ && dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK)))
{
dt_conf_set_bool("plugins/darkroom/colorequal/show_sliders",
gtk_notebook_get_n_pages(g->notebook) != 4);
gui_update(self);
}
- else if(event->button == GDK_BUTTON_PRIMARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
_area_reset_nodes(g);
return TRUE;
@@ -2771,7 +2772,7 @@ static gboolean _area_button_release_callback(GtkWidget *widget,
{
dt_iop_colorequal_gui_data_t *g = self->gui_data;
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
g->dragging = FALSE;
return TRUE;
diff --git a/src/iop/colorzones.c b/src/iop/colorzones.c
index 170cce237158..ff5b00cfaedc 100644
--- a/src/iop/colorzones.c
+++ b/src/iop/colorzones.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/iop_profile.h"
@@ -1662,7 +1663,7 @@ static gboolean _bottom_area_button_press_callback(GtkWidget *widget,
{
dt_iop_colorzones_gui_data_t *g = self->gui_data;
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// reset zoom level
g->zoom_factor = 1.f;
@@ -1865,7 +1866,7 @@ static gboolean _area_scrolled_callback(GtkWidget *widget,
if(dt_gui_ignore_scroll(event)) return FALSE;
- if(dt_modifier_is(event->state, GDK_MOD1_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_MOD1_MASK))
return gtk_widget_event(GTK_WIDGET(g->channel_tabs), (GdkEvent*)event);
int delta_y;
@@ -1912,7 +1913,7 @@ static gboolean _area_scrolled_callback(GtkWidget *widget,
else
{
delta_y *= -DT_IOP_COLORZONES_DEFAULT_STEP;
- return _move_point_internal(self, widget, g->selected, 0.f, delta_y, event->state);
+ return _move_point_internal(self, widget, g->selected, 0.f, delta_y, dt_gdk_event_get_state(event));
}
}
@@ -1940,10 +1941,10 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
const float mx = g->mouse_x;
const float my = g->mouse_y;
- g->mouse_x = CLAMP(event->x - inset, 0, width) / (float)width;
- g->mouse_y = 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
+ g->mouse_y = 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
- if(event->state & GDK_BUTTON1_MASK)
+ if(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
{
g->offset_x += (mx - g->mouse_x) / g->zoom_factor;
g->offset_y += (my - g->mouse_y) / g->zoom_factor;
@@ -1963,8 +1964,8 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
const double old_m_x = g->mouse_x;
const double old_m_y = fabs(g->mouse_y);
- g->mouse_x = CLAMP(event->x - inset, 0, width) / (float)width;
- g->mouse_y = 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
+ g->mouse_y = 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
darktable.control->element =
(int)(8.0 *
@@ -1972,7 +1973,7 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
g->zoom_factor, g->offset_x) + 0.5f) % 8;
// move a node
- if(event->state & GDK_BUTTON1_MASK)
+ if(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
{
if(g->edit_by_area)
{
@@ -2003,7 +2004,7 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
g->zoom_factor, g->offset_y);
dt_iop_color_picker_reset(self, TRUE);
- return _move_point_internal(self, widget, g->selected, dx, dy, event->state);
+ return _move_point_internal(self, widget, g->selected, dx, dy, dt_gdk_event_get_state(event));
}
}
@@ -2019,7 +2020,7 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
dt_dev_add_history_item_target(darktable.develop, self, TRUE, widget + ch);
}
}
- else if(event->y > height)
+ else if(dt_gdk_event_get_y(event) > height)
{
g->x_move = 0;
const int bands = p->curve_num_nodes[g->channel];
@@ -2042,7 +2043,7 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
}
else
{
- if(event->state & GDK_BUTTON1_MASK)
+ if(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
{
if(nodes < DT_IOP_COLORZONES_MAXNODES && g->selected == -1)
{
@@ -2102,16 +2103,16 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
int nodes = p->curve_num_nodes[ch];
dt_iop_colorzones_node_t *curve = p->curve[ch];
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
- if(g->edit_by_area && event->type != GDK_2BUTTON_PRESS
- && !dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ if(g->edit_by_area && dt_gdk_event_get_type(event) != GDK_2BUTTON_PRESS
+ && !dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
g->dragging = 1;
return TRUE;
}
- else if(event->type == GDK_BUTTON_PRESS
- && dt_modifier_is(event->state, GDK_CONTROL_MASK)
+ else if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS
+ && dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK)
&& nodes < DT_IOP_COLORZONES_MAXNODES
&& (g->selected == -1 || g->edit_by_area))
{
@@ -2123,8 +2124,8 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
const int height = allocation.height - 2 * inset;
const int width = allocation.width - 2 * inset;
- g->mouse_x = CLAMP(event->x - inset, 0, width) / (float)width;
- g->mouse_y = 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
+ g->mouse_y = 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
const float mx = _mouse_to_curve(g->mouse_x, g->zoom_factor, g->offset_x);
@@ -2172,7 +2173,7 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
return TRUE;
}
- else if(event->type == GDK_2BUTTON_PRESS)
+ else if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// reset current curve
p->curve_num_nodes[ch] = d->curve_num_nodes[ch];
@@ -2191,7 +2192,7 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
return TRUE;
}
}
- else if(event->button == GDK_BUTTON_SECONDARY && g->selected >= 0)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY && g->selected >= 0)
{
if((g->selected == 0 || g->selected == nodes - 1)
&& p->splines_version == DT_IOP_COLORZONES_SPLINES_V1)
@@ -2218,7 +2219,7 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
// right click deletes the node, ctrl+right click reset the node to y-zero
_delete_node(self, curve, &p->curve_num_nodes[ch],
- g->selected, dt_modifier_is(event->state, GDK_CONTROL_MASK));
+ g->selected, dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK));
g->selected = -2; // avoid re-insertion of that point immediately after this
return TRUE;
@@ -2233,7 +2234,7 @@ static gboolean _area_button_release_callback(GtkWidget *widget,
{
if(darktable.develop->darkroom_skip_mouse_events) return TRUE;
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_colorzones_gui_data_t *g = self->gui_data;
g->dragging = 0;
@@ -2251,7 +2252,7 @@ static gboolean _area_leave_notify_callback(GtkWidget *widget,
dt_iop_colorzones_gui_data_t *g = self->gui_data;
// for fluxbox
g->mouse_y = -fabs(g->mouse_y);
- if(!(event->state & GDK_BUTTON1_MASK))
+ if(!(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK))
g->selected = -1;
gtk_widget_queue_draw(widget);
return TRUE;
@@ -2269,22 +2270,22 @@ static gboolean _area_key_press_callback(GtkWidget *widget,
int handled = 0;
float dx = 0.0f, dy = 0.0f;
- if(event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up)
+ if(dt_gdk_event_get_keyval(event) == GDK_KEY_Up || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Up)
{
handled = 1;
dy = DT_IOP_COLORZONES_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Down || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Down)
{
handled = 1;
dy = -DT_IOP_COLORZONES_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Right || event->keyval == GDK_KEY_KP_Right)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Right || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Right)
{
handled = 1;
dx = DT_IOP_COLORZONES_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_KP_Left)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Left || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Left)
{
handled = 1;
dx = -DT_IOP_COLORZONES_DEFAULT_STEP;
@@ -2293,7 +2294,7 @@ static gboolean _area_key_press_callback(GtkWidget *widget,
if(!handled) return FALSE;
dt_iop_color_picker_reset(self, TRUE);
- return _move_point_internal(self, widget, g->selected, dx, dy, event->state);
+ return _move_point_internal(self, widget, g->selected, dx, dy, dt_gdk_event_get_state(event));
}
static void _channel_tabs_switch_callback(GtkNotebook *notebook,
diff --git a/src/iop/denoiseprofile.c b/src/iop/denoiseprofile.c
index 95a3f951b36a..8995d9a926b6 100644
--- a/src/iop/denoiseprofile.c
+++ b/src/iop/denoiseprofile.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/eaw.h"
@@ -3453,8 +3454,8 @@ static gboolean denoiseprofile_motion_notify(GtkWidget *widget,
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
int height = allocation.height - 2 * inset, width = allocation.width - 2 * inset;
- if(!g->dragging) g->mouse_x = CLAMP(event->x - inset, 0, width) / (float)width;
- g->mouse_y = 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ if(!g->dragging) g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
+ g->mouse_y = 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
if(g->dragging)
{
*p = g->drag_params;
@@ -3480,7 +3481,7 @@ static gboolean denoiseprofile_button_press(GtkWidget *widget,
{
dt_iop_denoiseprofile_gui_data_t *g = self->gui_data;
const int ch = g->channel;
- if(event->button == 1 && event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == 1 && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// reset current curve
dt_iop_denoiseprofile_params_t *p = self->params;
@@ -3494,7 +3495,7 @@ static gboolean denoiseprofile_button_press(GtkWidget *widget,
dt_dev_add_history_item(darktable.develop, self, TRUE);
gtk_widget_queue_draw(GTK_WIDGET(g->area));
}
- else if(event->button == GDK_BUTTON_PRIMARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
g->drag_params = *(dt_iop_denoiseprofile_params_t *)self->params;
const int inset = DT_IOP_DENOISE_PROFILE_INSET;
@@ -3503,8 +3504,8 @@ static gboolean denoiseprofile_button_press(GtkWidget *widget,
int height = allocation.height - 2 * inset, width = allocation.width - 2 * inset;
g->mouse_pick
= dt_draw_curve_calc_value(g->transition_curve,
- CLAMP(event->x - inset, 0, width) / (float)width);
- g->mouse_pick -= 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width);
+ g->mouse_pick -= 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
g->dragging = 1;
return TRUE;
}
@@ -3515,7 +3516,7 @@ static gboolean denoiseprofile_button_release(GtkWidget *widget,
GdkEventButton *event,
dt_iop_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_denoiseprofile_gui_data_t *g = self->gui_data;
g->dragging = 0;
@@ -3542,7 +3543,7 @@ static gboolean denoiseprofile_scrolled(GtkWidget *widget,
if(dt_gui_ignore_scroll(event)) return FALSE;
- if(dt_modifier_is(event->state, GDK_MOD1_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_MOD1_MASK))
return gtk_widget_event(GTK_WIDGET(g->channel > DT_DENOISE_PROFILE_B ? g->channel_tabs_Y0U0V0 : g->channel_tabs), (GdkEvent*)event);
int delta_y;
diff --git a/src/iop/filmicrgb.c b/src/iop/filmicrgb.c
index edae7f5ebca4..7927eff8a101 100644
--- a/src/iop/filmicrgb.c
+++ b/src/iop/filmicrgb.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
/** Note :
* we use finite-math-only and fast-math because divisions by zero are manually avoided in the code
@@ -4175,7 +4176,7 @@ static gboolean area_button_press(GtkWidget *widget, const GdkEventButton *event
if(g->active_button != DT_FILMIC_GUI_BUTTON_LAST)
{
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// double click resets view
if(g->active_button == DT_FILMIC_GUI_BUTTON_TYPE)
@@ -4190,7 +4191,7 @@ static gboolean area_button_press(GtkWidget *widget, const GdkEventButton *event
return FALSE;
}
}
- else if(event->button == GDK_BUTTON_PRIMARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
// simple left click cycles through modes in positive direction
if(g->active_button == DT_FILMIC_GUI_BUTTON_TYPE)
@@ -4219,7 +4220,7 @@ static gboolean area_button_press(GtkWidget *widget, const GdkEventButton *event
return FALSE;
}
}
- else if(event->button == GDK_BUTTON_SECONDARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
// simple right click cycles through modes in negative direction
if(g->active_button == DT_FILMIC_GUI_BUTTON_TYPE)
@@ -4253,7 +4254,7 @@ static gboolean area_button_press(GtkWidget *widget, const GdkEventButton *event
static gboolean area_enter_leave_notify(GtkWidget *widget, const GdkEventCrossing *event, const dt_iop_module_t *self)
{
dt_iop_filmicrgb_gui_data_t *g = self->gui_data;
- g->gui_hover = event->type == GDK_ENTER_NOTIFY;
+ g->gui_hover = dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY;
gtk_widget_queue_draw(GTK_WIDGET(g->area));
return FALSE;
}
@@ -4266,8 +4267,8 @@ static gboolean area_motion_notify(GtkWidget *widget, const GdkEventMotion *even
if(!g->gui_sizes_inited) return FALSE;
// get in-widget coordinates
- const float y = event->y;
- const float x = event->x;
+ const float y = dt_gdk_event_get_y(event);
+ const float x = dt_gdk_event_get_x(event);
if(x > 0. && x < g->allocation.width && y > 0. && y < g->allocation.height) g->gui_hover = TRUE;
diff --git a/src/iop/levels.c b/src/iop/levels.c
index ec159d2fc03b..01d88bbafa00 100644
--- a/src/iop/levels.c
+++ b/src/iop/levels.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include
#include
#include
@@ -872,16 +873,16 @@ static gboolean dt_iop_levels_motion_notify(GtkWidget *widget, GdkEventMotion *e
int height = allocation.height - 2 * inset - DT_RESIZE_HANDLE_SIZE, width = allocation.width - 2 * inset;
if(!g->dragging)
{
- g->mouse_x = CLAMP(event->x - inset, 0, width);
+ g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width);
g->drag_start_percentage = (p->levels[1] - p->levels[0]) / (p->levels[2] - p->levels[0]);
}
- g->mouse_y = CLAMP(event->y - inset, 0, height);
+ g->mouse_y = CLAMP(dt_gdk_event_get_y(event) - inset, 0, height);
if(g->dragging)
{
if(g->handle_move >= 0 && g->handle_move < 3)
{
- const float mx = (CLAMP(event->x - inset, 0, width)) / (float)width;
+ const float mx = (CLAMP(dt_gdk_event_get_x(event) - inset, 0, width)) / (float)width;
dt_iop_levels_move_handle(self, g->handle_move, mx, p->levels, g->drag_start_percentage);
}
@@ -890,7 +891,7 @@ static gboolean dt_iop_levels_motion_notify(GtkWidget *widget, GdkEventMotion *e
else
{
g->handle_move = 0;
- const float mx = CLAMP(event->x - inset, 0, width) / (float)width;
+ const float mx = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
float dist = fabsf(p->levels[0] - mx);
for(int k = 1; k < 3; k++)
{
@@ -910,11 +911,11 @@ static gboolean dt_iop_levels_motion_notify(GtkWidget *widget, GdkEventMotion *e
static gboolean dt_iop_levels_button_press(GtkWidget *widget, GdkEventButton *event, dt_iop_module_t *self)
{
// set active point
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
if(darktable.develop->gui_module != self) dt_iop_request_focus(self);
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// Reset
dt_iop_levels_gui_data_t *g = self->gui_data;
@@ -938,7 +939,7 @@ static gboolean dt_iop_levels_button_press(GtkWidget *widget, GdkEventButton *ev
static gboolean dt_iop_levels_button_release(GtkWidget *widget, GdkEventButton *event, dt_iop_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_levels_gui_data_t *g = self->gui_data;
g->dragging = 0;
@@ -963,7 +964,7 @@ static gboolean dt_iop_levels_scroll(GtkWidget *widget, GdkEventScroll *event, d
if(darktable.develop->gui_module != self) dt_iop_request_focus(self);
- const float interval = 0.002 * dt_accel_get_speed_multiplier(widget, event->state); // Distance moved for each scroll event
+ const float interval = 0.002 * dt_accel_get_speed_multiplier(widget, dt_gdk_event_get_state(event)); // Distance moved for each scroll event
int delta_y;
if(dt_gui_get_scroll_unit_delta(event, &delta_y))
{
diff --git a/src/iop/liquify.c b/src/iop/liquify.c
index 6b470f3bbde9..9e759b8c2afa 100644
--- a/src/iop/liquify.c
+++ b/src/iop/liquify.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/imagebuf.h"
@@ -3535,7 +3536,7 @@ static gboolean btn_make_radio_callback(GtkToggleButton *btn,
return TRUE;
}
- g->creation_continuous = event != NULL && dt_modifier_is(event->state, GDK_CONTROL_MASK);
+ g->creation_continuous = event != NULL && dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
dt_control_hinter_message("");
diff --git a/src/iop/lowlight.c b/src/iop/lowlight.c
index 92fef19453fd..6037940ee36d 100644
--- a/src/iop/lowlight.c
+++ b/src/iop/lowlight.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/colorspaces_inline_conversions.h"
#include "common/darktable.h"
@@ -671,14 +672,14 @@ static gboolean lowlight_motion_notify(GtkWidget *widget, GdkEventMotion *event,
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
int height = allocation.height - 2 * inset - DT_RESIZE_HANDLE_SIZE, width = allocation.width - 2 * inset;
- if(!g->dragging) g->mouse_x = CLAMP(event->x - inset, 0, width) / (float)width;
- g->mouse_y = 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ if(!g->dragging) g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
+ g->mouse_y = 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
if(g->dragging)
{
*p = g->drag_params;
if(g->x_move >= 0)
{
- const float mx = CLAMP(event->x - inset, 0, width) / (float)width;
+ const float mx = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
if(g->x_move > 0 && g->x_move < DT_IOP_LOWLIGHT_BANDS - 1)
{
const float minx = p->transition_x[g->x_move - 1] + 0.001f;
@@ -693,7 +694,7 @@ static gboolean lowlight_motion_notify(GtkWidget *widget, GdkEventMotion *event,
gtk_widget_queue_draw(widget);
dt_dev_add_history_item_target(darktable.develop, self, TRUE, widget);
}
- else if(event->y > height)
+ else if(dt_gdk_event_get_y(event) > height)
{
g->x_move = 0;
float dist = fabs(p->transition_x[0] - g->mouse_x);
@@ -719,7 +720,7 @@ static gboolean lowlight_motion_notify(GtkWidget *widget, GdkEventMotion *event,
static gboolean lowlight_button_press(GtkWidget *widget, GdkEventButton *event, dt_iop_module_t *self)
{
dt_iop_lowlight_gui_data_t *g = self->gui_data;
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// reset current curve
dt_iop_lowlight_params_t *p = self->params;
@@ -732,7 +733,7 @@ static gboolean lowlight_button_press(GtkWidget *widget, GdkEventButton *event,
dt_dev_add_history_item_target(darktable.develop, self, TRUE, widget);
gtk_widget_queue_draw(GTK_WIDGET(g->area));
}
- else if(event->button == GDK_BUTTON_PRIMARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
g->drag_params = *(dt_iop_lowlight_params_t *)self->params;
const int inset = DT_IOP_LOWLIGHT_INSET;
@@ -740,8 +741,8 @@ static gboolean lowlight_button_press(GtkWidget *widget, GdkEventButton *event,
gtk_widget_get_allocation(widget, &allocation);
int height = allocation.height - 2 * inset - DT_RESIZE_HANDLE_SIZE, width = allocation.width - 2 * inset;
g->mouse_pick
- = dt_draw_curve_calc_value(g->transition_curve, CLAMP(event->x - inset, 0, width) / (float)width);
- g->mouse_pick -= 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ = dt_draw_curve_calc_value(g->transition_curve, CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width);
+ g->mouse_pick -= 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
g->dragging = 1;
return TRUE;
}
@@ -750,7 +751,7 @@ static gboolean lowlight_button_press(GtkWidget *widget, GdkEventButton *event,
static gboolean lowlight_button_release(GtkWidget *widget, GdkEventButton *event, dt_iop_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_lowlight_gui_data_t *g = self->gui_data;
g->dragging = 0;
diff --git a/src/iop/lut3d.c b/src/iop/lut3d.c
index 375703af51b1..e79efc566432 100644
--- a/src/iop/lut3d.c
+++ b/src/iop/lut3d.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/imagebuf.h"
@@ -1480,7 +1481,7 @@ static gboolean _mouse_scroll(GtkWidget *view, GdkEventScroll *event, dt_lib_mod
if(gtk_tree_selection_get_selected(selection, &model, &iter))
{
gboolean next = FALSE;
- if(event->delta_y > 0)
+ if(dt_gdk_event_get_scroll_delta_y(event) > 0)
next = gtk_tree_model_iter_next(model, &iter);
else
next = gtk_tree_model_iter_previous(model, &iter);
diff --git a/src/iop/monochrome.c b/src/iop/monochrome.c
index 3fc9870736c0..03ec60038586 100644
--- a/src/iop/monochrome.c
+++ b/src/iop/monochrome.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/bilateral.h"
@@ -459,8 +460,8 @@ static gboolean _monochrome_motion_notify(GtkWidget *widget, GdkEventMotion *eve
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
int width = allocation.width - 2 * inset, height = allocation.height - 2 * inset;
- const float mouse_x = CLAMP(event->x - inset, 0, width);
- const float mouse_y = CLAMP(height - 1 - event->y + inset, 0, height);
+ const float mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width);
+ const float mouse_y = CLAMP(height - 1 - dt_gdk_event_get_y(event) + inset, 0, height);
p->a = PANEL_WIDTH * (mouse_x - width * 0.5f) / (float)width;
p->b = PANEL_WIDTH * (mouse_y - height * 0.5f) / (float)height;
@@ -472,12 +473,12 @@ static gboolean _monochrome_motion_notify(GtkWidget *widget, GdkEventMotion *eve
static gboolean _monochrome_button_press(GtkWidget *widget, GdkEventButton *event, dt_iop_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_monochrome_gui_data_t *g = self->gui_data;
dt_iop_monochrome_params_t *p = self->params;
dt_iop_color_picker_reset(self, TRUE);
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// reset
const dt_iop_monochrome_params_t *const p0 = self->default_params;
@@ -491,8 +492,8 @@ static gboolean _monochrome_button_press(GtkWidget *widget, GdkEventButton *even
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
int width = allocation.width - 2 * inset, height = allocation.height - 2 * inset;
- const float mouse_x = CLAMP(event->x - inset, 0, width);
- const float mouse_y = CLAMP(height - 1 - event->y + inset, 0, height);
+ const float mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width);
+ const float mouse_y = CLAMP(height - 1 - dt_gdk_event_get_y(event) + inset, 0, height);
p->a = PANEL_WIDTH * (mouse_x - width * 0.5f) / (float)width;
p->b = PANEL_WIDTH * (mouse_y - height * 0.5f) / (float)height;
g->dragging = 1;
@@ -506,7 +507,7 @@ static gboolean _monochrome_button_press(GtkWidget *widget, GdkEventButton *even
static gboolean _monochrome_button_release(GtkWidget *widget, GdkEventButton *event, dt_iop_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_monochrome_gui_data_t *g = self->gui_data;
dt_iop_color_picker_reset(self, TRUE);
diff --git a/src/iop/rawdenoise.c b/src/iop/rawdenoise.c
index 1e06988c8dc9..fc1d29423be1 100644
--- a/src/iop/rawdenoise.c
+++ b/src/iop/rawdenoise.c
@@ -16,6 +16,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/darktable.h"
#include "common/imagebuf.h"
@@ -773,8 +774,8 @@ static gboolean rawdenoise_motion_notify(GtkWidget *widget, GdkEventMotion *even
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
int height = allocation.height - 2 * inset, width = allocation.width - 2 * inset;
- if(!g->dragging) g->mouse_x = CLAMP(event->x - inset, 0, width) / (float)width;
- g->mouse_y = 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ if(!g->dragging) g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
+ g->mouse_y = 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
if(g->dragging)
{
*p = g->drag_params;
@@ -797,7 +798,7 @@ static gboolean rawdenoise_button_press(GtkWidget *widget, GdkEventButton *event
{
dt_iop_rawdenoise_gui_data_t *g = self->gui_data;
const int ch = g->channel;
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// reset current curve
dt_iop_rawdenoise_params_t *p = self->params;
@@ -810,7 +811,7 @@ static gboolean rawdenoise_button_press(GtkWidget *widget, GdkEventButton *event
dt_dev_add_history_item_target(darktable.develop, self, TRUE, widget + ch);
gtk_widget_queue_draw(GTK_WIDGET(g->area));
}
- else if(event->button == GDK_BUTTON_PRIMARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
g->drag_params = *(dt_iop_rawdenoise_params_t *)self->params;
const int inset = DT_IOP_RAWDENOISE_INSET;
@@ -818,8 +819,8 @@ static gboolean rawdenoise_button_press(GtkWidget *widget, GdkEventButton *event
gtk_widget_get_allocation(widget, &allocation);
int height = allocation.height - 2 * inset, width = allocation.width - 2 * inset;
g->mouse_pick
- = dt_draw_curve_calc_value(g->transition_curve, CLAMP(event->x - inset, 0, width) / (float)width);
- g->mouse_pick -= 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ = dt_draw_curve_calc_value(g->transition_curve, CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width);
+ g->mouse_pick -= 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
g->dragging = 1;
return TRUE;
}
@@ -828,7 +829,7 @@ static gboolean rawdenoise_button_press(GtkWidget *widget, GdkEventButton *event
static gboolean rawdenoise_button_release(GtkWidget *widget, GdkEventButton *event, dt_iop_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_rawdenoise_gui_data_t *g = self->gui_data;
g->dragging = 0;
@@ -851,7 +852,7 @@ static gboolean rawdenoise_scrolled(GtkWidget *widget, GdkEventScroll *event, dt
if(dt_gui_ignore_scroll(event)) return FALSE;
- if(dt_modifier_is(event->state, GDK_MOD1_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_MOD1_MASK))
return gtk_widget_event(GTK_WIDGET(g->channel_tabs), (GdkEvent*)event);
int delta_y;
diff --git a/src/iop/retouch.c b/src/iop/retouch.c
index 1ce4a9ddc2bc..30f68cc5fc78 100644
--- a/src/iop/retouch.c
+++ b/src/iop/retouch.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/bilateral.h"
@@ -1254,7 +1255,7 @@ static gboolean rt_wdbar_button_press(GtkWidget *widget,
const int inset = round(RT_WDBAR_INSET * allocation.height);
const float box_w = (allocation.width - 2.0f * inset) / (float)RETOUCH_NO_SCALES;
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
if(g->lower_margin) // bottom slider
{
@@ -1284,7 +1285,7 @@ static gboolean rt_wdbar_button_release(GtkWidget *widget,
{
dt_iop_retouch_gui_data_t *g = self->gui_data;
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
g->is_dragging = 0;
gtk_widget_queue_draw(g->wd_bar);
@@ -1336,8 +1337,8 @@ static gboolean rt_wdbar_motion_notify(GtkWidget *widget,
/* record mouse position within control */
- g->wdbar_mouse_x = CLAMP(event->x - inset, 0, allocation.width - 2.0f * inset - 1.0f);
- g->wdbar_mouse_y = event->y;
+ g->wdbar_mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, allocation.width - 2.0f * inset - 1.0f);
+ g->wdbar_mouse_y = dt_gdk_event_get_y(event);
g->curr_scale = g->wdbar_mouse_x / box_w;
g->lower_cursor = g->upper_cursor = FALSE;
@@ -1840,7 +1841,7 @@ static gboolean rt_edit_masks_callback(GtkWidget *widget,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->bt_ellipse), FALSE);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->bt_brush), FALSE);
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
DT_ENTER_GUI_UPDATE();
@@ -1851,7 +1852,7 @@ static gboolean rt_edit_masks_callback(GtkWidget *widget,
if(grp && (grp->type & DT_MASKS_GROUP) && grp->points)
{
const gboolean control_button_pressed =
- dt_modifier_is(event->state, GDK_CONTROL_MASK);
+ dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
switch(bd->masks_shown)
{
diff --git a/src/iop/rgbcurve.c b/src/iop/rgbcurve.c
index 7cb4dee7074b..cfb428201247 100644
--- a/src/iop/rgbcurve.c
+++ b/src/iop/rgbcurve.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/iop_profile.h"
@@ -692,7 +693,7 @@ static gboolean _area_scrolled_callback(GtkWidget *widget,
if(dt_gui_get_scroll_delta(event, &delta_y))
{
delta_y *= -RGBCURVE_DEFAULT_STEP;
- return _move_point_internal(self, widget, 0.0, delta_y, event->state);
+ return _move_point_internal(self, widget, 0.0, delta_y, dt_gdk_event_get_state(event));
}
return TRUE;
@@ -716,22 +717,22 @@ static gboolean _area_key_press_callback(GtkWidget *widget,
int handled = 0;
float dx = 0.0f, dy = 0.0f;
- if(event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up)
+ if(dt_gdk_event_get_keyval(event) == GDK_KEY_Up || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Up)
{
handled = 1;
dy = RGBCURVE_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Down || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Down)
{
handled = 1;
dy = -RGBCURVE_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Right || event->keyval == GDK_KEY_KP_Right)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Right || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Right)
{
handled = 1;
dx = RGBCURVE_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_KP_Left)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Left || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Left)
{
handled = 1;
dx = -RGBCURVE_DEFAULT_STEP;
@@ -740,7 +741,7 @@ static gboolean _area_key_press_callback(GtkWidget *widget,
if(!handled) return FALSE;
dt_iop_color_picker_reset(self, TRUE);
- return _move_point_internal(self, widget, dx, dy, event->state);
+ return _move_point_internal(self, widget, dx, dy, dt_gdk_event_get_state(event));
}
#undef RGBCURVE_DEFAULT_STEP
@@ -750,7 +751,7 @@ static gboolean _area_leave_notify_callback(GtkWidget *widget,
dt_iop_module_t *self)
{
dt_iop_rgbcurve_gui_data_t *g = self->gui_data;
- if(!(event->state & GDK_BUTTON1_MASK))
+ if(!(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK))
g->selected = -1;
gtk_widget_queue_draw(widget);
@@ -1185,10 +1186,10 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
const float mx = g->mouse_x;
const float my = g->mouse_y;
- g->mouse_x = CLAMP(event->x - inset, 0, width) / (float)width;
- g->mouse_y = 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
+ g->mouse_y = 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
- if(event->state & GDK_BUTTON1_MASK)
+ if(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
{
g->offset_x += (mx - g->mouse_x) / g->zoom_factor;
g->offset_y += (my - g->mouse_y) / g->zoom_factor;
@@ -1217,15 +1218,15 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
const double old_m_x = g->mouse_x;
const double old_m_y = g->mouse_y;
- g->mouse_x = CLAMP(event->x - inset, 0, width) / (float)width;
- g->mouse_y = 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
+ g->mouse_y = 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
const float mx = g->mouse_x;
const float my = g->mouse_y;
const float linx = _mouse_to_curve(mx, g->zoom_factor, g->offset_x),
liny = _mouse_to_curve(my, g->zoom_factor, g->offset_y);
- if(event->state & GDK_BUTTON1_MASK)
+ if(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
{
// got a vertex selected:
if(g->selected >= 0)
@@ -1249,7 +1250,7 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
g->zoom_factor, g->offset_y);
dt_iop_color_picker_reset(self, TRUE);
- return _move_point_internal(self, widget, dx, dy, event->state);
+ return _move_point_internal(self, widget, dx, dy, dt_gdk_event_get_state(event));
}
else if(nodes < DT_IOP_RGBCURVE_MAXNODES && g->selected >= -1)
{
@@ -1304,10 +1305,10 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
const int nodes = p->curve_num_nodes[ch];
dt_iop_rgbcurve_node_t *curve_nodes = p->curve_nodes[ch];
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
- if(event->type == GDK_BUTTON_PRESS
- && dt_modifier_is(event->state, GDK_CONTROL_MASK)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS
+ && dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK)
&& nodes < DT_IOP_RGBCURVE_MAXNODES && g->selected == -1)
{
// if we are not on a node -> add a new node at the current x of
@@ -1318,8 +1319,8 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
const int width = allocation.width - 2 * inset;
const int height = allocation.height - 2 * inset;
- g->mouse_x = CLAMP(event->x - inset, 0, width) / (float)width;
- g->mouse_y = 1.0 - CLAMP(event->y - inset, 0, height) / (float)height;
+ g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
+ g->mouse_y = 1.0 - CLAMP(dt_gdk_event_get_y(event) - inset, 0, height) / (float)height;
const float mx = g->mouse_x;
const float linx = _mouse_to_curve(mx, g->zoom_factor, g->offset_x);
@@ -1369,7 +1370,7 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
return TRUE;
}
- else if(event->type == GDK_2BUTTON_PRESS)
+ else if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// reset current curve
// if autoscale is on: allow only reset of L curve
@@ -1403,7 +1404,7 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
return TRUE;
}
}
- else if(event->button == GDK_BUTTON_SECONDARY && g->selected >= 0)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY && g->selected >= 0)
{
if(g->selected == 0 || g->selected == nodes - 1)
{
diff --git a/src/iop/rgblevels.c b/src/iop/rgblevels.c
index 620216c1c9e5..3dfa1c9b0e8b 100644
--- a/src/iop/rgblevels.c
+++ b/src/iop/rgblevels.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/iop_profile.h"
#include "bauhaus/bauhaus.h"
@@ -560,16 +561,16 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
int height = allocation.height - 2 * inset - DT_RESIZE_HANDLE_SIZE, width = allocation.width - 2 * inset;
if(!g->dragging)
{
- g->mouse_x = CLAMP(event->x - inset, 0, width);
+ g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width);
g->drag_start_percentage = (p->levels[g->channel][1] - p->levels[g->channel][0]) / (p->levels[g->channel][2] - p->levels[g->channel][0]);
}
- g->mouse_y = CLAMP(event->y - inset, 0, height);
+ g->mouse_y = CLAMP(dt_gdk_event_get_y(event) - inset, 0, height);
if(g->dragging)
{
if(g->handle_move >= 0 && g->handle_move < 3)
{
- const float mx = (CLAMP(event->x - inset, 0, width)) / (float)width;
+ const float mx = (CLAMP(dt_gdk_event_get_x(event) - inset, 0, width)) / (float)width;
_rgblevels_move_handle(self, g->handle_move, mx, p->levels[g->channel], g->drag_start_percentage);
}
@@ -577,7 +578,7 @@ static gboolean _area_motion_notify_callback(GtkWidget *widget,
else
{
g->handle_move = 0;
- const float mx = CLAMP(event->x - inset, 0, width) / (float)width;
+ const float mx = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width) / (float)width;
float dist = fabsf(p->levels[g->channel][0] - mx);
for(int k = 1; k < 3; k++)
{
@@ -602,11 +603,11 @@ static gboolean _area_button_press_callback(GtkWidget *widget,
dt_iop_module_t *self)
{
// set active point
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
if(darktable.develop->gui_module != self) dt_iop_request_focus(self);
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
_turn_selregion_picker_off(self);
@@ -640,7 +641,7 @@ static gboolean _area_button_release_callback(GtkWidget *widget,
GdkEventButton *event,
dt_iop_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_iop_rgblevels_gui_data_t *g = self->gui_data;
g->dragging = 0;
@@ -667,7 +668,7 @@ static gboolean _area_scroll_callback(GtkWidget *widget,
if(darktable.develop->gui_module != self) dt_iop_request_focus(self);
- const float interval = 0.002 * dt_accel_get_speed_multiplier(widget, event->state);
+ const float interval = 0.002 * dt_accel_get_speed_multiplier(widget, dt_gdk_event_get_state(event));
// Distance moved for each scroll event
int delta_y;
if(dt_gui_get_scroll_unit_delta(event, &delta_y))
diff --git a/src/iop/tonecurve.c b/src/iop/tonecurve.c
index 69a997fee5b5..192a8b6fe1f3 100644
--- a/src/iop/tonecurve.c
+++ b/src/iop/tonecurve.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include
#include
#include
@@ -1181,7 +1182,7 @@ static gboolean _scrolled(GtkWidget *widget,
if(dt_gui_get_scroll_delta(event, &delta_y))
{
delta_y *= -TONECURVE_DEFAULT_STEP;
- return _move_point_internal(self, widget, 0.0, delta_y, event->state);
+ return _move_point_internal(self, widget, 0.0, delta_y, dt_gdk_event_get_state(event));
}
return TRUE;
@@ -1206,22 +1207,22 @@ static gboolean dt_iop_tonecurve_key_press(GtkWidget *widget,
int handled = 0;
float dx = 0.0f, dy = 0.0f;
- if(event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up)
+ if(dt_gdk_event_get_keyval(event) == GDK_KEY_Up || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Up)
{
handled = 1;
dy = TONECURVE_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Down || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Down)
{
handled = 1;
dy = -TONECURVE_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Right || event->keyval == GDK_KEY_KP_Right)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Right || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Right)
{
handled = 1;
dx = TONECURVE_DEFAULT_STEP;
}
- else if(event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_KP_Left)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_Left || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Left)
{
handled = 1;
dx = -TONECURVE_DEFAULT_STEP;
@@ -1229,7 +1230,7 @@ static gboolean dt_iop_tonecurve_key_press(GtkWidget *widget,
if(!handled) return FALSE;
- return _move_point_internal(self, widget, dx, dy, event->state);
+ return _move_point_internal(self, widget, dx, dy, dt_gdk_event_get_state(event));
}
#undef TONECURVE_DEFAULT_STEP
@@ -1348,7 +1349,7 @@ static gboolean dt_iop_tonecurve_leave_notify(GtkWidget *widget,
dt_iop_module_t *self)
{
dt_iop_tonecurve_gui_data_t *g = self->gui_data;
- if(!(event->state & GDK_BUTTON1_MASK))
+ if(!(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK))
g->selected = -1;
gtk_widget_queue_draw(widget);
return FALSE;
@@ -1772,15 +1773,15 @@ static gboolean dt_iop_tonecurve_motion_notify(GtkWidget *widget,
int height = allocation.height - 2 * inset, width = allocation.width - 2 * inset;
double old_m_x = g->mouse_x;
double old_m_y = g->mouse_y;
- g->mouse_x = event->x - inset;
- g->mouse_y = event->y - inset;
+ g->mouse_x = dt_gdk_event_get_x(event) - inset;
+ g->mouse_y = dt_gdk_event_get_y(event) - inset;
const float mx = CLAMP(g->mouse_x, 0, width) / width;
const float my = 1.0f - CLAMP(g->mouse_y, 0, height) / height;
const float linx = to_lin(mx, g->loglogscale, ch, g->semilog, 0),
liny = to_lin(my, g->loglogscale, ch, g->semilog, 1);
- if(event->state & GDK_BUTTON1_MASK)
+ if(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
{
// got a vertex selected:
if(g->selected >= 0)
@@ -1794,7 +1795,7 @@ static gboolean dt_iop_tonecurve_motion_notify(GtkWidget *widget,
- to_lin(old_m_x / width - translate_mouse_x, g->loglogscale, ch, g->semilog, 0);
const float dy = to_lin(1 - g->mouse_y / height - translate_mouse_y, g->loglogscale, ch, g->semilog, 1)
- to_lin(1 - old_m_y / height - translate_mouse_y, g->loglogscale, ch, g->semilog, 1);
- return _move_point_internal(self, widget, dx, dy, event->state);
+ return _move_point_internal(self, widget, dx, dy, dt_gdk_event_get_state(event));
}
else if(nodes < DT_IOP_TONECURVE_MAXNODES && g->selected >= -1)
{
@@ -1841,10 +1842,10 @@ static gboolean dt_iop_tonecurve_button_press(GtkWidget *widget,
int nodes = p->tonecurve_nodes[ch];
dt_iop_tonecurve_node_t *tonecurve = p->tonecurve[ch];
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
- if(event->type == GDK_BUTTON_PRESS
- && dt_modifier_is(event->state, GDK_CONTROL_MASK)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS
+ && dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK)
&& nodes < DT_IOP_TONECURVE_MAXNODES
&& g->selected == -1)
{
@@ -1854,8 +1855,8 @@ static gboolean dt_iop_tonecurve_button_press(GtkWidget *widget,
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
int width = allocation.width - 2 * inset;
- g->mouse_x = event->x - inset;
- g->mouse_y = event->y - inset;
+ g->mouse_x = dt_gdk_event_get_x(event) - inset;
+ g->mouse_y = dt_gdk_event_get_y(event) - inset;
const float mx = CLAMP(g->mouse_x, 0, width) / (float)width;
const float linx = to_lin(mx, g->loglogscale, ch, g->semilog, 0);
@@ -1905,7 +1906,7 @@ static gboolean dt_iop_tonecurve_button_press(GtkWidget *widget,
}
return TRUE;
}
- else if(event->type == GDK_2BUTTON_PRESS)
+ else if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// reset current curve
// if autoscale_ab is on: allow only reset of L curve
@@ -1937,7 +1938,7 @@ static gboolean dt_iop_tonecurve_button_press(GtkWidget *widget,
return TRUE;
}
}
- else if(event->button == GDK_BUTTON_SECONDARY && g->selected >= 0)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY && g->selected >= 0)
{
if(g->selected == 0 || g->selected == nodes - 1)
{
diff --git a/src/iop/toneequal.c b/src/iop/toneequal.c
index 7b6440c4d88e..0dcfd2c7cfc5 100644
--- a/src/iop/toneequal.c
+++ b/src/iop/toneequal.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
/*** DOCUMENTATION
*
@@ -2959,8 +2960,8 @@ static gboolean area_enter_leave_notify(GtkWidget *widget,
dt_dev_add_history_item(darktable.develop, self, FALSE);
}
dt_iop_gui_enter_critical_section(self);
- g->area_x = (event->x - g->inset);
- g->area_y = (event->y - g->inset);
+ g->area_x = (dt_gdk_event_get_x(event) - g->inset);
+ g->area_y = (dt_gdk_event_get_y(event) - g->inset);
g->area_dragging = FALSE;
g->area_active_node = -1;
g->area_cursor_valid = (g->area_x > 0.0f
@@ -2985,7 +2986,7 @@ static gboolean area_button_press(GtkWidget *widget,
dt_iop_request_focus(self);
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
dt_iop_toneequalizer_params_t *p = self->params;
const dt_iop_toneequalizer_params_t *const d = self->default_params;
@@ -3009,7 +3010,7 @@ static gboolean area_button_press(GtkWidget *widget,
dt_dev_add_history_item(darktable.develop, self, TRUE);
return TRUE;
}
- else if(event->button == GDK_BUTTON_PRIMARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
if(self->enabled)
{
@@ -3045,7 +3046,7 @@ static gboolean area_motion_notify(GtkWidget *widget,
// vertical distance travelled since button_pressed event
dt_iop_gui_enter_critical_section(self);
// graph spans over 4 EV
- const float offset = (-event->y + g->area_y) / g->graph_height * 4.0f;
+ const float offset = (-dt_gdk_event_get_y(event) + g->area_y) / g->graph_height * 4.0f;
const float cursor_exposure = g->area_x / g->graph_width * 8.0f - 8.0f;
// Get the desired correction on exposure channels
@@ -3055,8 +3056,8 @@ static gboolean area_motion_notify(GtkWidget *widget,
}
dt_iop_gui_enter_critical_section(self);
- g->area_x = event->x - g->inset;
- g->area_y = event->y;
+ g->area_x = dt_gdk_event_get_x(event) - g->inset;
+ g->area_y = dt_gdk_event_get_y(event);
g->area_cursor_valid = (g->area_x > 0.0f
&& g->area_x < g->graph_width
&& g->area_y > 0.0f
@@ -3096,7 +3097,7 @@ static gboolean area_button_release(GtkWidget *widget,
// Give focus to module
dt_iop_request_focus(self);
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
const dt_iop_toneequalizer_params_t *p = self->params;
diff --git a/src/iop/zonesystem.c b/src/iop/zonesystem.c
index 8442484db941..3f2844a919a2 100644
--- a/src/iop/zonesystem.c
+++ b/src/iop/zonesystem.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include
#include
#include
@@ -591,7 +592,7 @@ static gboolean dt_iop_zonesystem_bar_button_press(GtkWidget *widget, GdkEventBu
if((g->mouse_x / width) > zonemap[k] + (zw / 2)) k++;
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
if(p->zone[k] == -1)
{
@@ -601,7 +602,7 @@ static gboolean dt_iop_zonesystem_bar_button_press(GtkWidget *widget, GdkEventBu
g->is_dragging = TRUE;
g->current_zone = k;
}
- else if(event->button == GDK_BUTTON_SECONDARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
/* clear the controlpoint */
p->zone[k] = -1;
@@ -615,7 +616,7 @@ static gboolean dt_iop_zonesystem_bar_button_release(GtkWidget *widget, GdkEvent
dt_iop_module_t *self)
{
dt_iop_zonesystem_gui_data_t *g = self->gui_data;
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
g->is_dragging = FALSE;
}
@@ -665,8 +666,8 @@ static gboolean dt_iop_zonesystem_bar_motion_notify(GtkWidget *widget, GdkEventM
_iop_zonesystem_calculate_zonemap(p, zonemap);
/* record mouse position within control */
- g->mouse_x = CLAMP(event->x - inset, 0, width);
- g->mouse_y = CLAMP(height - 1 - event->y + inset, 0, height);
+ g->mouse_x = CLAMP(dt_gdk_event_get_x(event) - inset, 0, width);
+ g->mouse_y = CLAMP(height - 1 - dt_gdk_event_get_y(event) + inset, 0, height);
if(g->is_dragging)
{
diff --git a/src/libs/collect.c b/src/libs/collect.c
index 4effcf23b906..9929fe95e555 100644
--- a/src/libs/collect.c
+++ b/src/libs/collect.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "libs/collect.h"
#include "bauhaus/bauhaus.h"
@@ -638,24 +639,24 @@ static gboolean view_onButtonPressed(GtkWidget *treeview,
/* Get tree path for row that was clicked */
GtkTreePath *path = NULL;
const gboolean get_path = gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeview),
- (gint)event->x, (gint)event->y,
+ (gint)dt_gdk_event_get_x(event), (gint)dt_gdk_event_get_y(event),
&path, NULL, NULL, NULL);
- if(event->type == GDK_DOUBLE_BUTTON_PRESS || d->singleclick)
+ if(dt_gdk_event_get_type(event) == GDK_DOUBLE_BUTTON_PRESS || d->singleclick)
{
- if(event->state == last_state && path)
+ if(dt_gdk_event_get_state(event) == last_state && path)
{
if(gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeview), path))
gtk_tree_view_collapse_row(GTK_TREE_VIEW(treeview), path);
else
gtk_tree_view_expand_row(GTK_TREE_VIEW(treeview), path, FALSE);
}
- last_state = event->state;
+ last_state = dt_gdk_event_get_state(event);
}
// case of a range selection
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
- if(get_path && dt_modifier_is(event->state, GDK_SHIFT_MASK)
+ if(get_path && dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK)
&& gtk_tree_selection_count_selected_rows(selection) > 0
&& (d->view_rule == DT_COLLECTION_PROP_DAY
|| d->view_rule == DT_COLLECTION_PROP_MONTH
@@ -692,9 +693,9 @@ static gboolean view_onButtonPressed(GtkWidget *treeview,
// case of a context-menu (folder/filmroll)
if(((d->view_rule == DT_COLLECTION_PROP_FOLDERS)
|| (d->view_rule == DT_COLLECTION_PROP_FILMROLL))
- && (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY)
- && !(dt_modifier_is(event->state, GDK_SHIFT_MASK)
- || dt_modifier_is(event->state, GDK_CONTROL_MASK)))
+ && (dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
+ && !(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK)
+ || dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK)))
{
row_activated_with_event(GTK_TREE_VIEW(treeview), path, NULL, event, d);
view_popup_menu(treeview, event, d);
@@ -704,13 +705,13 @@ static gboolean view_onButtonPressed(GtkWidget *treeview,
}
// case of a activation
- if((!d->singleclick && event->type == GDK_2BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY)
- || (d->singleclick && event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY)
- || (!d->singleclick && event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY
- && (dt_modifier_is(event->state, GDK_SHIFT_MASK)
- || dt_modifier_is(event->state, GDK_CONTROL_MASK)))
+ if((!d->singleclick && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
+ || (d->singleclick && dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
+ || (!d->singleclick && dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY
+ && (dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK)
+ || dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK)))
|| (d->view_rule == DT_COLLECTION_PROP_MONTH
- && event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY))
+ && dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY))
{
row_activated_with_event(GTK_TREE_VIEW(treeview), path, NULL, event, d);
@@ -2875,7 +2876,7 @@ static void row_activated_with_event(GtkTreeView *view,
if(text && strlen(text) > 0)
{
- if(dt_modifier_is(event->state, GDK_SHIFT_MASK | GDK_CONTROL_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK | GDK_CONTROL_MASK))
{
if(item == DT_COLLECTION_PROP_FILMROLL)
{
@@ -2927,7 +2928,7 @@ static void row_activated_with_event(GtkTreeView *view,
{
/* if a tag has children, ctrl-clicking on a parent node
* should display all images under this hierarchy. */
- if(dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
gchar *n_text = g_strconcat(text, "|%", NULL);
g_free(text);
@@ -2935,7 +2936,7 @@ static void row_activated_with_event(GtkTreeView *view,
}
/* if a tag has children, left-clicking on a parent node
* should display all images in and under this hierarchy. */
- else if(!dt_modifier_is(event->state, GDK_SHIFT_MASK))
+ else if(!dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK))
{
gchar *n_text = g_strconcat(text, "*", NULL);
g_free(text);
@@ -3387,7 +3388,7 @@ static gboolean popup_button_callback(GtkWidget *widget,
GdkEventButton *event,
dt_lib_collect_rule_t *d)
{
- if(event->button != 1)
+ if(dt_gdk_event_get_button(event) != 1)
return FALSE;
GtkWidget *menu = gtk_menu_new();
diff --git a/src/libs/colorpicker.c b/src/libs/colorpicker.c
index 607886dbf0b8..730540d90478 100644
--- a/src/libs/colorpicker.c
+++ b/src/libs/colorpicker.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "libs/colorpicker.h"
@@ -524,12 +525,12 @@ static gboolean _live_sample_button(GtkWidget *widget,
GdkEventButton *event,
dt_colorpicker_sample_t *sample)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
sample->locked = !sample->locked;
gtk_widget_queue_draw(widget);
}
- else if(event->button == GDK_BUTTON_SECONDARY)
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
// copy to active picker
dt_lib_module_t *self = darktable.lib->proxy.colorpicker.module;
diff --git a/src/libs/duplicate.c b/src/libs/duplicate.c
index 8a6cc3f01578..19992dc67b0e 100644
--- a/src/libs/duplicate.c
+++ b/src/libs/duplicate.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/collection.h"
#include "common/darktable.h"
@@ -165,14 +166,14 @@ static gboolean _lib_duplicate_thumb_press_callback(GtkWidget *widget,
dt_thumbnail_t *thumb = (dt_thumbnail_t *)g_object_get_data(G_OBJECT(widget), "thumb");
const dt_imgid_t imgid = thumb->imgid;
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
- if(event->type == GDK_BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS)
{
d->imgid = imgid;
dt_control_queue_redraw_center();
}
- else if(event->type == GDK_2BUTTON_PRESS)
+ else if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
// let's switch to the new image
DT_CONTROL_SIGNAL_RAISE(DT_SIGNAL_VIEWMANAGER_THUMBTABLE_ACTIVATE, imgid);
diff --git a/src/libs/export.c b/src/libs/export.c
index df5746fa488e..3e4558e52242 100644
--- a/src/libs/export.c
+++ b/src/libs/export.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/collection.h"
@@ -570,7 +571,7 @@ static gboolean _scale_mdlclick(GtkEntry *spin,
GdkEventButton *event,
dt_lib_export_t *d)
{
- if(event->button == GDK_BUTTON_MIDDLE)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_MIDDLE)
{
dt_conf_set_string(CONFIG_PREFIX "resizing_factor", "1");
g_signal_handlers_block_by_func(spin, _scale_changed, d);
@@ -588,7 +589,7 @@ static gboolean _widht_mdlclick(GtkEntry *spin,
GdkEventButton *event,
gpointer user_data)
{
- if(event->button == GDK_BUTTON_MIDDLE)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_MIDDLE)
{
dt_conf_set_int(CONFIG_PREFIX "width", 0);
g_signal_handlers_block_by_func(spin, _width_changed, user_data);
@@ -607,7 +608,7 @@ static gboolean _height_mdlclick(GtkEntry *spin,
GdkEventButton *event,
gpointer user_data)
{
- if(event->button == GDK_BUTTON_MIDDLE)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_MIDDLE)
{
dt_conf_set_int(CONFIG_PREFIX "height", 0);
g_signal_handlers_block_by_func(spin, _height_changed, user_data);
@@ -1188,7 +1189,7 @@ static void _apply_style_activate_callback(GtkMenuItem *menuitem,
const dt_stylemenu_data_t *menu_data)
{
GdkEvent *event = gtk_get_current_event();
- if(event && event->type == GDK_KEY_PRESS)
+ if(event && dt_gdk_event_get_type(event) == GDK_KEY_PRESS)
{
_update_style(menu_data);
}
@@ -1199,7 +1200,7 @@ static gboolean _apply_style_button_callback(GtkMenuItem *menuitem,
GdkEventButton *event,
const dt_stylemenu_data_t *menu_data)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
_update_style(menu_data);
}
diff --git a/src/libs/export_metadata.c b/src/libs/export_metadata.c
index 06e2d7053c70..3f768fdc4425 100644
--- a/src/libs/export_metadata.c
+++ b/src/libs/export_metadata.c
@@ -16,6 +16,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/darktable.h"
#include "dtgtk/button.h"
#include "gui/gtk.h"
@@ -131,7 +132,7 @@ static void _delete_tag_button_clicked(GtkButton *button, dt_lib_export_metadata
static gboolean _key_press_on_list(GtkWidget *widget, GdkEventKey *event, dt_lib_export_metadata_t *d)
{
- if(event->type == GDK_KEY_PRESS && event->keyval == GDK_KEY_Delete && !event->state)
+ if(dt_gdk_event_get_type(event) == GDK_KEY_PRESS && dt_gdk_event_get_keyval(event) == GDK_KEY_Delete && !dt_gdk_event_get_state(event))
{
_remove_tag_from_list(d);
return TRUE;
diff --git a/src/libs/geotagging.c b/src/libs/geotagging.c
index b86d78b2f7a0..e148be82e1cd 100644
--- a/src/libs/geotagging.c
+++ b/src/libs/geotagging.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/debug.h"
#include "common/file_location.h"
@@ -564,7 +565,7 @@ static void _refresh_display_all_tracks(GtkWidget *widget, dt_lib_module_t *self
static gboolean _click_for_entire_track(GtkEntry *spin, GdkEventButton *event, dt_lib_module_t *self)
{
- if(event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY && dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
_refresh_display_all_tracks(NULL, self);
}
@@ -1567,7 +1568,7 @@ static GtkWidget *_gui_init_datetime(gchar *text,
static gboolean _datetime_key_pressed(GtkWidget *entry, GdkEventKey *event, dt_lib_module_t *self)
{
dt_lib_geotagging_t *d = self->data;
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_Escape:
{
@@ -1656,7 +1657,7 @@ static void _timezone_save(dt_lib_module_t *self)
static gboolean _timezone_key_pressed(GtkWidget *entry, GdkEventKey *event, dt_lib_module_t *self)
{
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_Return:
case GDK_KEY_KP_Enter:
diff --git a/src/libs/histogram.c b/src/libs/histogram.c
index 2715469bfce0..3f128ea4fd79 100644
--- a/src/libs/histogram.c
+++ b/src/libs/histogram.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/darktable.h"
#include "common/color_picker.h"
@@ -350,7 +351,7 @@ static void _drawable_drag_update(GtkGestureDrag* gesture,
const gdouble ox = offset_x - s->last_offset_x;
const gdouble oy = offset_y - s->last_offset_y;
const double delta = dt_scopes_call(cur_mode, get_exposure_delta, ox, oy);
- dt_dev_exposure_handle_event(1, delta, event->motion.state,
+ dt_dev_exposure_handle_event(1, delta, dt_gdk_event_get_state(event),
s->highlight == DT_SCOPES_HIGHLIGHT_BLACK_POINT);
s->last_offset_x = offset_x;
s->last_offset_y = offset_y;
@@ -490,7 +491,7 @@ static void _eventbox_scroll_callback(GtkEventControllerScroll* self,
// FIXME: so long as we have event, test its flags -- and for GTK 4 we can
// use gtk_get_current_event() and get flags -- make a helper function to do
// this.
- if(dt_modifier_is(event->scroll.state,
+ if(dt_modifier_is(dt_gdk_event_get_state(event),
GDK_SHIFT_MASK | GDK_MOD1_MASK))
{
// bubble to adjusting the overall widget size
@@ -502,16 +503,16 @@ static void _eventbox_scroll_callback(GtkEventControllerScroll* self,
// FIXME: should handle smooth scrolling rather than discrete?
// FIXME: should scrolling of scope be handled in the drawable rather than
// the eventbox.
- dt_dev_exposure_handle_event(0, dy - dx, event->scroll.state,
+ dt_dev_exposure_handle_event(0, dy - dx, dt_gdk_event_get_state(event),
s->highlight == DT_SCOPES_HIGHLIGHT_BLACK_POINT);
}
else
{
int ebx, eby;
gtk_widget_translate_coordinates(gtk_get_event_widget(event), s->scope_draw,
- (int)event->scroll.x, (int)event->scroll.y, &ebx, &eby);
+ (int)dt_gdk_event_get_x(event), (int)dt_gdk_event_get_y(event), &ebx, &eby);
dt_scopes_call_if_exists(s->cur_mode, eventbox_scroll, ebx, eby,
- dx, dy, event->scroll.state);
+ dx, dy, dt_gdk_event_get_state(event));
}
}
gdk_event_free(event);
diff --git a/src/libs/import.c b/src/libs/import.c
index e90c4b8bed93..4979ff448411 100644
--- a/src/libs/import.c
+++ b/src/libs/import.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/collection.h"
#include "common/darktable.h"
@@ -562,13 +563,13 @@ static gboolean _files_button_press(GtkWidget *view,
dt_lib_module_t *self)
{
dt_lib_import_t *d = self->data;
- if((event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY))
+ if((dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY))
{
GtkTreePath *path = NULL;
GtkTreeViewColumn *column = NULL;
// Get tree path for row that was clicked
if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),
- (gint)event->x, (gint)event->y,
+ (gint)dt_gdk_event_get_x(event), (gint)dt_gdk_event_get_y(event),
&path, &column, NULL, NULL))
{
if(column == d->from.pixcol)
@@ -585,12 +586,12 @@ static gboolean _files_button_press(GtkWidget *view,
}
gtk_tree_path_free(path);
}
- else if((event->type == GDK_2BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY))
+ else if((dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY))
{
GtkTreePath *path = NULL;
// Get tree path for row that was clicked
if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),
- (gint)event->x, (gint)event->y,
+ (gint)dt_gdk_event_get_x(event), (gint)dt_gdk_event_get_y(event),
&path, NULL, NULL, NULL))
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
@@ -1270,7 +1271,7 @@ static gboolean _places_button_press(GtkWidget *view,
gboolean res = FALSE;
GtkTreePath *path = NULL;
if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),
- (gint)event->x, (gint)event->y, &path, NULL, NULL, NULL))
+ (gint)dt_gdk_event_get_x(event), (gint)dt_gdk_event_get_y(event), &path, NULL, NULL, NULL))
{
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
GtkTreeIter iter;
@@ -1279,7 +1280,7 @@ static gboolean _places_button_press(GtkWidget *view,
char *folder_name, *folder_path;
gtk_tree_model_get(model, &iter, 0, &folder_name, 1, &folder_path, -1);
- const int button_pressed = (event->type == GDK_BUTTON_PRESS) ? event->button : 0;
+ const int button_pressed = (dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS) ? dt_gdk_event_get_button(event) : 0;
// left-click: set as new root
if(button_pressed == GDK_BUTTON_PRIMARY)
@@ -1309,21 +1310,21 @@ static gboolean _folders_button_press(GtkWidget *view,
{
dt_lib_import_t *d = self->data;
gboolean res = FALSE;
- const int button_pressed = (event->type == GDK_BUTTON_PRESS) ? event->button : 0;
- const gboolean modifier = dt_modifier_is(event->state, GDK_SHIFT_MASK | GDK_CONTROL_MASK);
+ const int button_pressed = (dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS) ? dt_gdk_event_get_button(event) : 0;
+ const gboolean modifier = dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK | GDK_CONTROL_MASK);
if((button_pressed == GDK_BUTTON_PRIMARY) && !modifier)
{
GtkTreePath *path = NULL;
if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),
- event->x, event->y, &path, NULL, NULL, NULL))
+ dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), &path, NULL, NULL, NULL))
{
GdkRectangle rect;
gtk_tree_view_get_cell_area(GTK_TREE_VIEW(view), path, d->from.foldercol, &rect);
const gboolean blank = gtk_tree_view_is_blank_at_pos(GTK_TREE_VIEW(view),
- event->x, event->y,
+ dt_gdk_event_get_x(event), dt_gdk_event_get_y(event),
NULL, NULL, NULL, NULL);
// select and save new folder only if not click on expander
- if(blank || (event->x > rect.x))
+ if(blank || (dt_gdk_event_get_x(event) > rect.x))
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(d->from.folderview);
gtk_tree_selection_select_path(selection, path);
@@ -1342,11 +1343,11 @@ static gboolean _folders_button_press(GtkWidget *view,
gtk_tree_path_free(path);
}
- if(event->type == GDK_DOUBLE_BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_DOUBLE_BUTTON_PRESS)
{
GtkTreePath *path = NULL;
gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),
- event->x, event->y, &path, NULL, NULL, NULL);
+ dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), &path, NULL, NULL, NULL);
if(gtk_tree_view_row_expanded(d->from.folderview, path))
gtk_tree_view_collapse_row (d->from.folderview, path);
else
diff --git a/src/libs/lib.c b/src/libs/lib.c
index f0cf40a65b3b..7ef62090ab53 100644
--- a/src/libs/lib.c
+++ b/src/libs/lib.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "libs/lib.h"
#include "common/debug.h"
@@ -452,7 +453,7 @@ static gboolean _menuitem_button_preset(GtkMenuItem *menuitem,
GdkEventButton *event,
dt_lib_module_info_t *minfo)
{
- if(event->button == GDK_BUTTON_PRIMARY) return FALSE;
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY) return FALSE;
dt_shortcut_copy_lua((dt_action_t*)minfo->module,
g_object_get_data(G_OBJECT(menuitem), "dt-preset-name"));
@@ -1746,7 +1747,7 @@ gboolean dt_handle_dialog_enter(GtkWidget *widget,
GdkEventKey *event,
gpointer data)
{
- if(event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter)
+ if(dt_gdk_event_get_keyval(event) == GDK_KEY_Return || dt_gdk_event_get_keyval(event) == GDK_KEY_KP_Enter)
{
gtk_dialog_response(GTK_DIALOG(widget), GTK_RESPONSE_ACCEPT);
return TRUE;
diff --git a/src/libs/location.c b/src/libs/location.c
index 5be0ce9f8af0..19e312b0e5d2 100644
--- a/src/libs/location.c
+++ b/src/libs/location.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/darktable.h"
#include "common/geo.h"
@@ -159,7 +160,7 @@ static gboolean _event_box_enter_leave(GtkWidget *widget,
GdkEventCrossing *event,
gpointer user_data)
{
- if(event->type == GDK_ENTER_NOTIFY)
+ if(dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY)
gtk_widget_set_state_flags(widget, GTK_STATE_FLAG_PRELIGHT, FALSE);
else
gtk_widget_unset_state_flags(widget, GTK_STATE_FLAG_PRELIGHT);
diff --git a/src/libs/map_locations.c b/src/libs/map_locations.c
index 0d2c4222cb35..6abb4bd07ef3 100644
--- a/src/libs/map_locations.c
+++ b/src/libs/map_locations.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/collection.h"
#include "common/debug.h"
#include "common/map_locations.h"
@@ -842,15 +843,15 @@ static gboolean _click_on_view(GtkWidget *view, GdkEventButton *event, dt_lib_mo
return TRUE;
}
- const int button_pressed = (event->type == GDK_BUTTON_PRESS) ? event->button : 0;
- const gboolean ctrl_pressed = dt_modifier_is(event->state, GDK_CONTROL_MASK);
+ const int button_pressed = (dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS) ? dt_gdk_event_get_button(event) : 0;
+ const gboolean ctrl_pressed = dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
if(button_pressed == GDK_BUTTON_SECONDARY || button_pressed == GDK_BUTTON_PRIMARY)
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
GtkTreePath *path = NULL;
// Get tree path for row that was clicked
- if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view), (gint)event->x,
- (gint)event->y, &path, NULL, NULL, NULL))
+ if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view), (gint)dt_gdk_event_get_x(event),
+ (gint)dt_gdk_event_get_y(event), &path, NULL, NULL, NULL))
{
if(button_pressed == GDK_BUTTON_SECONDARY)
{
diff --git a/src/libs/masks.c b/src/libs/masks.c
index bdbb82415853..c72b9545c38c 100644
--- a/src/libs/masks.c
+++ b/src/libs/masks.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "develop/masks.h"
#include "bauhaus/bauhaus.h"
@@ -340,7 +341,7 @@ static gboolean _bt_add_shape(GtkWidget *widget, GdkEventButton *event, gpointer
{
DT_GUARD_GUI_UPDATE(FALSE);
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
#ifdef HAVE_AI
if(GPOINTER_TO_INT(shape) == DT_MASKS_OBJECT && !dt_masks_object_available())
@@ -351,7 +352,7 @@ static gboolean _bt_add_shape(GtkWidget *widget, GdkEventButton *event, gpointer
#endif
_tree_add_shape(NULL, shape);
- if(dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
darktable.develop->form_gui->creation_continuous = TRUE;
darktable.develop->form_gui->creation_continuous_module =
@@ -907,7 +908,7 @@ static int _tree_button_pressed(GtkWidget *treeview,
dt_iop_module_t *module = NULL;
gboolean on_row = FALSE;
if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeview),
- (gint)event->x, (gint)event->y, &mouse_path, NULL,
+ (gint)dt_gdk_event_get_x(event), (gint)dt_gdk_event_get_y(event), &mouse_path, NULL,
NULL, NULL))
{
on_row = TRUE;
@@ -918,7 +919,7 @@ static int _tree_button_pressed(GtkWidget *treeview,
}
}
/* single click with the right mouse button? */
- if(event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
// if click on a blank space, then deselect all
if(!on_row)
@@ -926,13 +927,13 @@ static int _tree_button_pressed(GtkWidget *treeview,
gtk_tree_selection_unselect_all(selection);
}
}
- else if(event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY)
+ else if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
// if we are already inside the selection, no change
if(on_row
&& !gtk_tree_selection_path_is_selected(selection, mouse_path))
{
- if(!dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ if(!dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
gtk_tree_selection_unselect_all(selection);
gtk_tree_selection_select_path(selection, mouse_path);
diff --git a/src/libs/metadata.c b/src/libs/metadata.c
index 6a71e8fa2ad8..5c22763252f8 100644
--- a/src/libs/metadata.c
+++ b/src/libs/metadata.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/metadata.h"
#include "common/collection.h"
@@ -425,18 +426,18 @@ static gboolean _key_pressed(GtkWidget *textview,
{
dt_lib_metadata_t *d = self->data;
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_Return:
case GDK_KEY_KP_Enter:
- if(!dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ if(!dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
gtk_button_clicked(GTK_BUTTON(d->apply_button));
return TRUE;
}
break;
case GDK_KEY_Escape:
- if(dt_modifier_is(event->state, 0))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), 0))
{
gtk_button_clicked(GTK_BUTTON(d->cancel_button));
return TRUE;
@@ -572,7 +573,7 @@ static gboolean _metadata_reset(GtkWidget *label,
GdkEventButton *event,
GtkWidget *widget)
{
- if(event->type == GDK_2BUTTON_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS)
{
g_object_set_data(G_OBJECT(widget), "tv_multiple", GINT_TO_POINTER(FALSE));
GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
diff --git a/src/libs/metadata_view.c b/src/libs/metadata_view.c
index 0b4a5a4ef34a..ed0c4ecb7cd7 100644
--- a/src/libs/metadata_view.c
+++ b/src/libs/metadata_view.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/collection.h"
#include "common/darktable.h"
@@ -1155,7 +1156,7 @@ static void _jump_to()
static gboolean _filmroll_clicked(GtkWidget *widget, GdkEventButton *event, gpointer null)
{
- if(event->type != GDK_2BUTTON_PRESS) return FALSE;
+ if(dt_gdk_event_get_type(event) != GDK_2BUTTON_PRESS) return FALSE;
_jump_to();
return TRUE;
}
diff --git a/src/libs/modulegroups.c b/src/libs/modulegroups.c
index bba427dd2a6e..ca199e82d4f5 100644
--- a/src/libs/modulegroups.c
+++ b/src/libs/modulegroups.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/darktable.h"
@@ -2661,7 +2662,7 @@ static gboolean _presets_pressed(GtkWidget *widget,
GdkEventButton *event,
dt_lib_module_t *self)
{
- if(dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
manage_presets(self);
return TRUE;
@@ -2673,7 +2674,7 @@ static gboolean _manage_direct_popup(GtkWidget *widget,
GdkEventButton *event,
dt_lib_module_t *self)
{
- if(event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
dt_lib_modulegroups_group_t *gr = g_object_get_data(G_OBJECT(widget), "group");
if(!g_strcmp0(gr->name, C_("modulegroup", "deprecated"))) return FALSE;
@@ -2688,7 +2689,7 @@ static gboolean _manage_direct_basic_popup(GtkWidget *widget,
GdkEventButton *event,
dt_lib_module_t *self)
{
- if(event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
_manage_basics_add_popup(widget, self, TRUE);
return TRUE;
@@ -2702,7 +2703,7 @@ static gboolean _manage_direct_module_popup(GtkWidget *widget,
{
dt_action_t *module = g_object_get_data(G_OBJECT(widget), "module");
- if(event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
int nba = 0; // nb of already present items
GtkWidget *pop = gtk_menu_new();
@@ -2733,7 +2734,7 @@ static gboolean _manage_direct_active_popup(GtkWidget *widget,
GdkEventButton *event,
dt_lib_module_t *self)
{
- if(event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
dt_lib_modulegroups_t *d = self->data;
GtkWidget *pop = gtk_menu_new();
diff --git a/src/libs/navigation.c b/src/libs/navigation.c
index 975fd476ffec..4a2ed36d6d43 100644
--- a/src/libs/navigation.c
+++ b/src/libs/navigation.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/darktable.h"
@@ -427,7 +428,7 @@ static gboolean _lib_navigation_motion_notify_callback(GtkWidget *widget,
{
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
- _lib_navigation_set_position(self, event->x, event->y,
+ _lib_navigation_set_position(self, dt_gdk_event_get_x(event), dt_gdk_event_get_y(event),
allocation.width, allocation.height);
return TRUE;
}
@@ -532,7 +533,7 @@ static void _lib_navigation_scroll_callback(GtkEventControllerScroll *controller
GdkDevice *device = gdk_event_get_source_device(event);
if(device
&& gdk_device_get_source(device) == GDK_SOURCE_TOUCHPAD
- && event->scroll.direction == GDK_SCROLL_SMOOTH)
+ && dt_gdk_event_get_scroll_direction(event) == GDK_SCROLL_SMOOTH)
{
dt_dev_zoom_move(&darktable.develop->full, DT_ZOOM_MOVE,
15.0, 0, dx, dy, TRUE);
@@ -542,7 +543,7 @@ static void _lib_navigation_scroll_callback(GtkEventControllerScroll *controller
const gboolean constrain = !dt_modifier_eq(controller, GDK_CONTROL_MASK);
gdouble x, y;
if(_lib_navigation_widget_to_center(GTK_EVENT_CONTROLLER(controller),
- event->scroll.x, event->scroll.y,
+ dt_gdk_event_get_x(event), dt_gdk_event_get_y(event),
&x, &y))
dt_dev_zoom_move(&darktable.develop->full, DT_ZOOM_SCROLL,
0.0f, dy < 0, x, y, constrain);
@@ -593,10 +594,10 @@ static gboolean _lib_navigation_button_press_callback(GtkWidget *widget,
dt_lib_navigation_t *d = self->data;
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
- if(event->type == GDK_BUTTON_PRESS && event->button.button != 2)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) != 2)
{
d->dragging = 1;
- _lib_navigation_set_position(self, event->button.x, event->button.y,
+ _lib_navigation_set_position(self, dt_gdk_event_get_x(event), dt_gdk_event_get_y(event),
allocation.width, allocation.height);
return TRUE;
@@ -606,8 +607,8 @@ static gboolean _lib_navigation_button_press_callback(GtkWidget *widget,
GtkWidget *center = dt_ui_center(darktable.gui->ui);
GtkAllocation center_alloc;
gtk_widget_get_allocation(center, ¢er_alloc);
- event->button.x *= (gdouble)center_alloc.width / allocation.width;
- event->button.y *= (gdouble)center_alloc.height / allocation.height;
+ event->scroll.x *= (gdouble)center_alloc.width / allocation.width;
+ event->scroll.y *= (gdouble)center_alloc.height / allocation.height;
return gtk_widget_event(center, event);
}
diff --git a/src/libs/neural_restore.c b/src/libs/neural_restore.c
index 6c2cf99c65f0..74939433b433 100644
--- a/src/libs/neural_restore.c
+++ b/src/libs/neural_restore.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
// neural restore — lighttable module for AI-based image restoration
//
@@ -3445,7 +3446,7 @@ static gboolean _pick_double_click(GtkWidget *widget,
GdkEventButton *event,
dt_lib_module_t *self)
{
- if(event->type != GDK_2BUTTON_PRESS) return FALSE;
+ if(dt_gdk_event_get_type(event) != GDK_2BUTTON_PRESS) return FALSE;
dt_lib_neural_restore_t *d = self->data;
d->patch_center[0] = 0.5f;
d->patch_center[1] = 0.5f;
diff --git a/src/libs/print_settings.c b/src/libs/print_settings.c
index 57c98c4da05a..b626fcdb65fa 100644
--- a/src/libs/print_settings.c
+++ b/src/libs/print_settings.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include
@@ -1211,7 +1212,7 @@ static void _apply_style_activate_callback(GtkMenuItem *menuitem,
const dt_stylemenu_data_t *menu_data)
{
GdkEvent *event = gtk_get_current_event();
- if(event && event->type == GDK_KEY_PRESS)
+ if(event && dt_gdk_event_get_type(event) == GDK_KEY_PRESS)
{
_update_style(menu_data);
}
@@ -1222,7 +1223,7 @@ static gboolean _apply_style_button_callback(GtkMenuItem *menuitem,
GdkEventButton *event,
const dt_stylemenu_data_t *menu_data)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
_update_style(menu_data);
}
diff --git a/src/libs/snapshots.c b/src/libs/snapshots.c
index aab03afdada8..feb48b837113 100644
--- a/src/libs/snapshots.c
+++ b/src/libs/snapshots.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/darktable.h"
#include "bauhaus/bauhaus.h"
@@ -560,7 +561,7 @@ static gboolean _lib_button_button_pressed_callback(GtkWidget *widget,
const int index = _look_for_widget(self, widget, FALSE);
- if(dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
gtk_widget_hide(d->snapshot[index].name);
gtk_widget_show(d->snapshot[index].entry);
diff --git a/src/libs/tagging.c b/src/libs/tagging.c
index 9b8e034fdfaf..55b56393ef2b 100644
--- a/src/libs/tagging.c
+++ b/src/libs/tagging.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/collection.h"
#include "common/selection.h"
@@ -1475,15 +1476,15 @@ static gboolean _click_on_view_attached(GtkWidget *view,
dt_lib_tagging_t *d = self->data;
_unselect_all_in_view(d->dictionary_view);
- if((event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY)
- || (event->type == GDK_2BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY)
- || (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY))
+ if((dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
+ || (dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
+ || (dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY))
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
GtkTreePath *path = NULL;
// Get tree path for row that was clicked
if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),
- (gint)event->x, (gint)event->y,
+ (gint)dt_gdk_event_get_x(event), (gint)dt_gdk_event_get_y(event),
&path, NULL, NULL, NULL))
{
gboolean valid_tag = FALSE;
@@ -1496,15 +1497,15 @@ static gboolean _click_on_view_attached(GtkWidget *view,
{
gtk_tree_selection_select_path(selection, path);
dt_lib_gui_queue_update(self);
- if(event->type == GDK_BUTTON_PRESS
- && event->button == GDK_BUTTON_SECONDARY)
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS
+ && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
{
_pop_menu_attached(view, event, self);
gtk_tree_path_free(path);
return TRUE;
}
- else if(event->type == GDK_2BUTTON_PRESS
- && event->button == GDK_BUTTON_PRIMARY)
+ else if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS
+ && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
_detach_selected_tag(d->attached_view, self);
gtk_tree_path_free(path);
@@ -1535,7 +1536,7 @@ static gboolean _attached_key_pressed(GtkWidget *view,
if(gtk_tree_selection_get_selected(selection, &model, &iter))
{
GtkTreePath *path = gtk_tree_model_get_path(model, &iter);
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_Delete:
case GDK_KEY_KP_Delete:
@@ -1547,13 +1548,13 @@ static gboolean _attached_key_pressed(GtkWidget *view,
}
gtk_tree_path_free(path);
}
- if(event->keyval == GDK_KEY_Tab)
+ if(dt_gdk_event_get_keyval(event) == GDK_KEY_Tab)
{
gtk_tree_selection_unselect_all(selection);
gtk_widget_grab_focus(GTK_WIDGET(d->entry));
return TRUE;
}
- else if(event->keyval == GDK_KEY_ISO_Left_Tab)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_ISO_Left_Tab)
{
gtk_tree_selection_unselect_all(selection);
return TRUE;
@@ -1607,7 +1608,7 @@ static gboolean _enter_key_pressed(GtkWidget *entry,
dt_lib_module_t *self)
{
dt_lib_tagging_t *d = self->data;
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_Return:
case GDK_KEY_KP_Enter:
@@ -2641,17 +2642,17 @@ static gboolean _click_on_view_dictionary(GtkWidget *view,
dt_lib_tagging_t *d = self->data;
_unselect_all_in_view(d->attached_view);
- const int button_pressed = (event->type == GDK_BUTTON_PRESS) ? event->button : 0;
- const gboolean shift_pressed = dt_modifier_is(event->state, GDK_SHIFT_MASK);
+ const int button_pressed = (dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS) ? dt_gdk_event_get_button(event) : 0;
+ const gboolean shift_pressed = dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK);
if((button_pressed == GDK_BUTTON_SECONDARY) // contextual menu
|| (d->tree_flag && button_pressed == GDK_BUTTON_PRIMARY) // expand & drag
- || (event->type == GDK_2BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY)) // attach
+ || (dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)) // attach
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
GtkTreePath *path = NULL;
// Get tree path for row that was clicked
if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),
- (gint)event->x, (gint)event->y,
+ (gint)dt_gdk_event_get_x(event), (gint)dt_gdk_event_get_y(event),
&path, NULL, NULL, NULL))
{
if(d->tree_flag
@@ -2690,8 +2691,8 @@ static gboolean _click_on_view_dictionary(GtkWidget *view,
gtk_tree_path_free(path);
return TRUE;
}
- else if(event->type == GDK_2BUTTON_PRESS
- && event->button == GDK_BUTTON_PRIMARY)
+ else if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS
+ && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
_attach_selected_tag(self, d);
gtk_tree_path_free(path);
@@ -2717,13 +2718,13 @@ static gboolean _dictionary_key_pressed(GtkWidget *view,
if(gtk_tree_selection_get_selected(selection, &model, &iter))
{
GtkTreePath *path = gtk_tree_model_get_path(model, &iter);
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_Return:
case GDK_KEY_KP_Enter:
{
_attach_selected_tag(self, d);
- if(dt_modifier_is(event->state, GDK_SHIFT_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK))
{
gtk_tree_selection_unselect_all(selection);
gtk_entry_set_text(GTK_ENTRY(d->entry), "");
@@ -2735,7 +2736,7 @@ static gboolean _dictionary_key_pressed(GtkWidget *view,
case GDK_KEY_Left:
if(path)
{
- if(dt_modifier_is(event->state, GDK_SHIFT_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK))
gtk_tree_view_collapse_all(GTK_TREE_VIEW(view));
else
gtk_tree_view_collapse_row(GTK_TREE_VIEW(view), path);
@@ -2746,7 +2747,7 @@ static gboolean _dictionary_key_pressed(GtkWidget *view,
if(path)
{
gtk_tree_view_expand_row(GTK_TREE_VIEW(view), path,
- dt_modifier_is(event->state, GDK_SHIFT_MASK));
+ dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK));
res = TRUE;
}
break;
@@ -2755,12 +2756,12 @@ static gboolean _dictionary_key_pressed(GtkWidget *view,
}
gtk_tree_path_free(path);
}
- if(event->keyval == GDK_KEY_Tab)
+ if(dt_gdk_event_get_keyval(event) == GDK_KEY_Tab)
{
gtk_tree_selection_unselect_all(selection);
res = TRUE;
}
- else if(event->keyval == GDK_KEY_ISO_Left_Tab)
+ else if(dt_gdk_event_get_keyval(event) == GDK_KEY_ISO_Left_Tab)
{
gtk_tree_selection_unselect_all(selection);
gtk_widget_grab_focus(GTK_WIDGET(d->entry));
@@ -3771,7 +3772,7 @@ static gboolean _lib_tagging_tag_key_press(GtkWidget *entry,
dt_lib_module_t *self)
{
dt_lib_tagging_t *d = self->data;
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_Escape:
g_list_free(d->floating_tag_imgs);
diff --git a/src/libs/tools/colorlabels.c b/src/libs/tools/colorlabels.c
index d20cb3a3d48e..2c4d86e062b9 100644
--- a/src/libs/tools/colorlabels.c
+++ b/src/libs/tools/colorlabels.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "bauhaus/bauhaus.h"
#include "common/colorlabels.h"
@@ -169,7 +170,7 @@ static gboolean _lib_colorlabels_key_press(GtkWidget *entry,
{
dt_lib_colorlabels_t *d = self->data;
- switch(event->keyval)
+ switch(dt_gdk_event_get_keyval(event))
{
case GDK_KEY_Escape:
gtk_widget_destroy(d->floating_window);
@@ -247,8 +248,8 @@ static void _lib_colorlabels_edit(dt_lib_module_t *self,
else
{
// Legacy/X11 path: keep undecorated popup GtkWindow
- const gint x = event->x_root;
- const gint y = event->y_root - DT_PIXEL_APPLY_DPI(50);
+ const gint x = dt_gdk_event_get_root_x(event);
+ const gint y = dt_gdk_event_get_root_y(event) - DT_PIXEL_APPLY_DPI(50);
d->floating_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
#ifdef GDK_WINDOWING_QUARTZ
@@ -275,8 +276,8 @@ static gboolean _lib_colorlabels_button_clicked_callback(GtkWidget *w,
const gint colorlabel = _get_colorlabel(self, w);
- if(event->type == GDK_BUTTON_PRESS
- && event->button == GDK_BUTTON_SECONDARY
+ if(dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS
+ && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY
&& colorlabel != 5) // The button to reset colorlabels needs no description
{
d->colorlabel = colorlabel;
diff --git a/src/libs/tools/global_toolbox.c b/src/libs/tools/global_toolbox.c
index 0bae4bdcc122..8efdbd715f0d 100644
--- a/src/libs/tools/global_toolbox.c
+++ b/src/libs/tools/global_toolbox.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/collection.h"
#include "common/darktable.h"
@@ -562,7 +563,7 @@ static void _main_do_event_help(GdkEvent *event, gpointer data)
gboolean handled = FALSE;
- switch(event->type)
+ switch(dt_gdk_event_get_type(event))
{
case GDK_BUTTON_PRESS:
{
@@ -597,7 +598,7 @@ static void _main_do_event_help(GdkEvent *event, gpointer data)
if(dt_gui_get_help_url(event_widget))
{
// TODO: find a better way to tell the user that the hovered widget has a help link
- const char *cursor = event->type == GDK_ENTER_NOTIFY ? "help" : "not-allowed";
+ const char *cursor = dt_gdk_event_get_type(event) == GDK_ENTER_NOTIFY ? "help" : "not-allowed";
dt_control_allow_change_cursor();
dt_control_set_temp_cursor(cursor);
dt_control_forbid_change_cursor();
@@ -686,7 +687,7 @@ static void _main_do_event_keymap(GdkEvent *event, gpointer data)
GtkWidget *event_widget = gtk_get_event_widget(event);
static guint click_time = 0;
- switch(event->type)
+ switch(dt_gdk_event_get_type(event))
{
case GDK_LEAVE_NOTIFY:
case GDK_ENTER_NOTIFY:
@@ -699,7 +700,7 @@ static void _main_do_event_keymap(GdkEvent *event, gpointer data)
_set_mapping_mode_cursor(event_widget);
break;
case GDK_BUTTON_PRESS:
- if(gdk_display_device_is_grabbed(gdk_window_get_display(event->button.window), event->button.device))
+ if(gdk_display_device_is_grabbed(gdk_window_get_display(dt_gdk_event_get_window(event)), dt_gdk_event_get_device(event)))
break;
GtkWidget *main_window = dt_ui_main_window(darktable.gui->ui);
@@ -715,13 +716,13 @@ static void _main_do_event_keymap(GdkEvent *event, gpointer data)
if(GTK_IS_ENTRY(event_widget))
break;
- if(event->button.button == GDK_BUTTON_SECONDARY)
- click_time = event->button.time;
- else if(event->button.button == GDK_BUTTON_MIDDLE)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
+ click_time = dt_gdk_event_get_time(event);
+ else if(dt_gdk_event_get_button(event) == GDK_BUTTON_MIDDLE)
dt_shortcut_dispatcher(event_widget, event, data);
- else if(event->button.button > 7)
+ else if(dt_gdk_event_get_button(event) > 7)
break;
- else if(dt_modifier_is(event->button.state, GDK_CONTROL_MASK))
+ else if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
if(darktable.develop)
{
@@ -742,10 +743,10 @@ static void _main_do_event_keymap(GdkEvent *event, gpointer data)
return;
case GDK_BUTTON_RELEASE:
- if(event->button.button != GDK_BUTTON_SECONDARY)
+ if(dt_gdk_event_get_button(event) != GDK_BUTTON_SECONDARY)
break;
- if(dt_gui_long_click(event->button.time, click_time))
+ if(dt_gui_long_click(dt_gdk_event_get_time(event), click_time))
dt_shortcut_copy_lua(NULL, NULL);
else
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(d->keymap_button), FALSE);
@@ -795,20 +796,20 @@ static gboolean _lib_keymap_button_press_release(GtkWidget *button, GdkEventButt
{
static guint start_time = 0;
- darktable.control->confirm_mapping = !dt_modifier_is(event->state, GDK_CONTROL_MASK);
+ darktable.control->confirm_mapping = !dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
int delay = 0;
g_object_get(gtk_settings_get_default(), "gtk-long-press-time", &delay, NULL);
- if((event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY) ||
- (event->type == GDK_BUTTON_RELEASE && event->time - start_time > delay))
+ if((dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY) ||
+ (dt_gdk_event_get_type(event) == GDK_BUTTON_RELEASE && dt_gdk_event_get_time(event) - start_time > delay))
{
_show_shortcuts_prefs(NULL);
return TRUE;
}
else
{
- start_time = event->time;
+ start_time = dt_gdk_event_get_time(event);
return FALSE;
}
}
diff --git a/src/libs/tools/lighttable.c b/src/libs/tools/lighttable.c
index d4f091d32a24..1ffcb167a351 100644
--- a/src/libs/tools/lighttable.c
+++ b/src/libs/tools/lighttable.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include
@@ -222,12 +223,12 @@ static gboolean _lib_lighttable_layout_btn_release(GtkWidget *w, GdkEventButton
// that means we want to activate the button
if(w == d->layout_preview)
{
- d->fullpreview_focus = dt_modifier_is(event->state, GDK_CONTROL_MASK);
+ d->fullpreview_focus = dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
new_layout = DT_LIGHTTABLE_LAYOUT_PREVIEW;
}
else if(w == d->layout_culling_fix)
{
- if(dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
d->culling_init_restriction = DT_LIGHTTABLE_CULLING_RESTRICTION_COLLECTION;
else
d->culling_init_restriction = DT_LIGHTTABLE_CULLING_RESTRICTION_AUTO;
diff --git a/src/libs/tools/log_history.c b/src/libs/tools/log_history.c
index b4b893bd3173..b4ba8dfc472b 100644
--- a/src/libs/tools/log_history.c
+++ b/src/libs/tools/log_history.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "control/signal.h"
#include "control/control.h"
@@ -140,7 +141,7 @@ static gboolean _label_button_press(GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
- if(event->button == GDK_BUTTON_SECONDARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY)
return TRUE;
return FALSE;
}
@@ -154,11 +155,11 @@ static gboolean _button_press_release(GtkWidget *button,
int delay = 0;
g_object_get(gtk_settings_get_default(), "gtk-long-press-time", &delay, NULL);
- if((event->type == GDK_BUTTON_PRESS
- && (event->button == GDK_BUTTON_PRIMARY
- || event->button == GDK_BUTTON_SECONDARY))
- || (event->type == GDK_BUTTON_RELEASE
- && event->time - start_time > delay))
+ if((dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS
+ && (dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY
+ || dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY))
+ || (dt_gdk_event_get_type(event) == GDK_BUTTON_RELEASE
+ && dt_gdk_event_get_time(event) - start_time > delay))
{
dt_lib_log_history_t *d = self->data;
if(gtk_widget_is_visible(d->popover))
@@ -174,7 +175,7 @@ static gboolean _button_press_release(GtkWidget *button,
}
else
{
- start_time = event->time;
+ start_time = dt_gdk_event_get_time(event);
return FALSE;
}
}
diff --git a/src/libs/tools/ratings.c b/src/libs/tools/ratings.c
index 80bf76e925cb..4349a696202b 100644
--- a/src/libs/tools/ratings.c
+++ b/src/libs/tools/ratings.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/ratings.h"
#include "common/collection.h"
@@ -184,8 +185,8 @@ static gboolean _lib_ratings_motion_notify_callback(GtkWidget *widget, GdkEventM
{
dt_lib_ratings_t *d = self->data;
- d->pointerx = event->x;
- d->pointery = event->y;
+ d->pointerx = dt_gdk_event_get_x(event);
+ d->pointery = dt_gdk_event_get_y(event);
gtk_widget_queue_draw(self->widget);
return TRUE;
}
diff --git a/src/views/darkroom.c b/src/views/darkroom.c
index 0ad5215b4af8..3a428747e6a1 100644
--- a/src/views/darkroom.c
+++ b/src/views/darkroom.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
/** this is the view for the darkroom module. */
#include "common/extra_optimizations.h"
@@ -1620,7 +1621,7 @@ static void _darkroom_ui_apply_style_activate_callback(GtkMenuItem *menuitem,
const dt_stylemenu_data_t *menu_data)
{
GdkEvent *event = gtk_get_current_event();
- if(event->type == GDK_KEY_PRESS)
+ if(dt_gdk_event_get_type(event) == GDK_KEY_PRESS)
dt_styles_apply_to_dev(menu_data->name, darktable.develop->image_storage.id);
gdk_event_free(event);
}
@@ -1630,7 +1631,7 @@ static gboolean _darkroom_ui_apply_style_button_callback
GdkEventButton *event,
const dt_stylemenu_data_t *menu_data)
{
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
dt_styles_apply_to_dev(menu_data->name, darktable.develop->image_storage.id);
else
dt_shortcut_copy_lua(NULL, menu_data->name);
@@ -2586,8 +2587,8 @@ static gboolean _quickbutton_press_release(GtkWidget *button,
int delay = 0;
g_object_get(gtk_settings_get_default(), "gtk-long-press-time", &delay, NULL);
- if((event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY) ||
- (event->type == GDK_BUTTON_RELEASE && event->time - start_time > delay))
+ if((dt_gdk_event_get_type(event) == GDK_BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_SECONDARY) ||
+ (dt_gdk_event_get_type(event) == GDK_BUTTON_RELEASE && dt_gdk_event_get_time(event) - start_time > delay))
{
gtk_popover_set_relative_to(GTK_POPOVER(popover), button);
@@ -2598,7 +2599,7 @@ static gboolean _quickbutton_press_release(GtkWidget *button,
}
else
{
- start_time = event->time;
+ start_time = dt_gdk_event_get_time(event);
return FALSE;
}
}
@@ -4574,9 +4575,9 @@ static gboolean _second_window_scrolled_callback(GtkWidget *widget,
dt_dev_viewport_t *port = pinned_dev ? &pinned_dev->preview2 : &dev->preview2;
const gboolean constrained =
- dev->constrain_zoom && !dt_modifier_is(event->state, GDK_CONTROL_MASK);
+ dev->constrain_zoom && !dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK);
dt_dev_zoom_move(port, DT_ZOOM_SCROLL, 0.0f, delta_y < 0,
- event->x, event->y, constrained);
+ dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), constrained);
}
return TRUE;
@@ -4595,24 +4596,24 @@ static gboolean _second_window_button_pressed_callback(GtkWidget *w,
dt_dev_viewport_t *port = pinned_dev ? &pinned_dev->preview2 : &dev->preview2;
// Handle double-click to reset zoom and center
- if(event->type == GDK_2BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_type(event) == GDK_2BUTTON_PRESS && dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
dt_dev_zoom_move(port, DT_ZOOM_FIT, 0.0f, 0,
- event->x, event->y, TRUE);
+ dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), TRUE);
return TRUE;
}
- if(event->button == GDK_BUTTON_PRIMARY)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY)
{
// store coordinates in logical pixels (as delivered by event)
- darktable.control->button_x = event->x;
- darktable.control->button_y = event->y;
+ darktable.control->button_x = dt_gdk_event_get_x(event);
+ darktable.control->button_y = dt_gdk_event_get_y(event);
_dt_second_window_change_cursor(dev, "grabbing");
return TRUE;
}
- if(event->button == GDK_BUTTON_MIDDLE)
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_MIDDLE)
{
dt_dev_zoom_move(port, DT_ZOOM_1, 0.0f, -2,
- event->x, event->y, !dt_modifier_is(event->state, GDK_CONTROL_MASK));
+ dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), !dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK));
return TRUE;
}
return FALSE;
@@ -4622,7 +4623,7 @@ static gboolean _second_window_button_released_callback(GtkWidget *w,
GdkEventButton *event,
dt_develop_t *dev)
{
- if(event->button == GDK_BUTTON_PRIMARY) _dt_second_window_change_cursor(dev, "default");
+ if(dt_gdk_event_get_button(event) == GDK_BUTTON_PRIMARY) _dt_second_window_change_cursor(dev, "default");
gtk_widget_queue_draw(w);
return TRUE;
@@ -4634,7 +4635,7 @@ static gboolean _second_window_mouse_moved_callback(GtkWidget *w,
{
if(dev->gui_leaving) return FALSE;
- if(event->state & GDK_BUTTON1_MASK)
+ if(dt_gdk_event_get_state(event) & GDK_BUTTON1_MASK)
{
dt_control_t *ctl = darktable.control;
@@ -4645,9 +4646,9 @@ static gboolean _second_window_mouse_moved_callback(GtkWidget *w,
dt_dev_viewport_t *port = pinned_dev ? &pinned_dev->preview2 : &dev->preview2;
dt_dev_zoom_move(port, DT_ZOOM_MOVE, -1.f, 0,
- event->x - ctl->button_x, event->y - ctl->button_y, TRUE);
- ctl->button_x = event->x;
- ctl->button_y = event->y;
+ dt_gdk_event_get_x(event) - ctl->button_x, dt_gdk_event_get_y(event) - ctl->button_y, TRUE);
+ ctl->button_x = dt_gdk_event_get_x(event);
+ ctl->button_y = dt_gdk_event_get_y(event);
return TRUE;
}
return FALSE;
diff --git a/src/views/map.c b/src/views/map.c
index 497bfb3ce24d..82413adf7109 100644
--- a/src/views/map.c
+++ b/src/views/map.c
@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
*/
+#include "common/gdk_event_utils.h"
#include "common/collection.h"
#include "common/darktable.h"
@@ -2008,10 +2009,10 @@ static gboolean _view_map_scroll_event(GtkWidget *w,
{
dt_map_t *lib = self->data;
// check if the click was on image(s) or just some random position
- dt_map_image_t *entry = _view_map_get_entry_at_pos(self, event->x, event->y);
+ dt_map_image_t *entry = _view_map_get_entry_at_pos(self, dt_gdk_event_get_x(event), dt_gdk_event_get_y(event));
if(entry)
{
- if(_display_next_image(self, entry, event->direction == GDK_SCROLL_DOWN))
+ if(_display_next_image(self, entry, dt_gdk_event_get_scroll_direction(event) == GDK_SCROLL_DOWN))
return TRUE;
}
@@ -2022,23 +2023,23 @@ static gboolean _view_map_scroll_event(GtkWidget *w,
{
if(dt_map_location_included(lon, lat, &lib->loc.main.data))
{
- if(dt_modifier_is(event->state, GDK_SHIFT_MASK))
+ if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_SHIFT_MASK))
{
- if(event->direction == GDK_SCROLL_DOWN)
+ if(dt_gdk_event_get_scroll_direction(event) == GDK_SCROLL_DOWN)
lib->loc.main.data.delta1 *= 1.1;
else
lib->loc.main.data.delta1 /= 1.1;
}
- else if(dt_modifier_is(event->state, GDK_CONTROL_MASK))
+ else if(dt_modifier_is(dt_gdk_event_get_state(event), GDK_CONTROL_MASK))
{
- if(event->direction == GDK_SCROLL_DOWN)
+ if(dt_gdk_event_get_scroll_direction(event) == GDK_SCROLL_DOWN)
lib->loc.main.data.delta2 *= 1.1;
else
lib->loc.main.data.delta2 /= 1.1;
}
else
{
- if(event->direction == GDK_SCROLL_DOWN)
+ if(dt_gdk_event_get_scroll_direction(event) == GDK_SCROLL_DOWN)
{
lib->loc.main.data.delta1 *= 1.1;
lib->loc.main.data.delta2 *= 1.1;
@@ -2057,13 +2058,13 @@ static gboolean _view_map_scroll_event(GtkWidget *w,
else // scroll on the map. try to keep the map where it is
{
_toast_log_lat_lon(lat, lon);
- return _zoom_and_center(event->x, event->y, event->direction, self);
+ return _zoom_and_center(dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), dt_gdk_event_get_scroll_direction(event), self);
}
}
else
{
_toast_log_lat_lon(lat, lon);
- return _zoom_and_center(event->x, event->y, event->direction, self);
+ return _zoom_and_center(dt_gdk_event_get_x(event), dt_gdk_event_get_y(event), dt_gdk_event_get_scroll_direction(event), self);
}
return FALSE;
}