Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
GNOME
gtk
Commits
bd722499
Commit
bd722499
authored
Apr 08, 2014
by
Carlos Garnacho
Browse files
colorswatch: Replace GtkPressAndHold
GtkGestureLongPress and GtkGestureMultiPress are both used to replace it.
parent
d5cb4841
Changes
1
Hide whitespace changes
Inline
Side-by-side
gtk/gtkcolorswatch.c
View file @
bd722499
...
...
@@ -28,7 +28,6 @@
#include "gtkmenu.h"
#include "gtkmenuitem.h"
#include "gtkmenushell.h"
#include "gtkpressandholdprivate.h"
#include "gtkprivate.h"
#include "gtkintl.h"
#include "a11y/gtkcolorswatchaccessibleprivate.h"
...
...
@@ -46,7 +45,8 @@ struct _GtkColorSwatchPrivate
GdkWindow
*
event_window
;
GtkPressAndHold
*
press_and_hold
;
GtkGesture
*
long_press_gesture
;
GtkGesture
*
multipress_gesture
;
};
enum
...
...
@@ -65,6 +65,16 @@ enum
static
guint
signals
[
LAST_SIGNAL
];
static
void
hold_action
(
GtkGestureLongPress
*
gesture
,
gdouble
x
,
gdouble
y
,
GtkColorSwatch
*
swatch
);
static
void
tap_action
(
GtkGestureMultiPress
*
gesture
,
gint
n_press
,
gdouble
x
,
gdouble
y
,
GtkColorSwatch
*
swatch
);
G_DEFINE_TYPE_WITH_PRIVATE
(
GtkColorSwatch
,
gtk_color_swatch
,
GTK_TYPE_WIDGET
)
static
void
...
...
@@ -76,6 +86,18 @@ gtk_color_swatch_init (GtkColorSwatch *swatch)
gtk_widget_set_can_focus
(
GTK_WIDGET
(
swatch
),
TRUE
);
gtk_widget_set_has_window
(
GTK_WIDGET
(
swatch
),
FALSE
);
swatch
->
priv
->
long_press_gesture
=
gtk_gesture_long_press_new
(
GTK_WIDGET
(
swatch
));
g_signal_connect
(
swatch
->
priv
->
long_press_gesture
,
"pressed"
,
G_CALLBACK
(
hold_action
),
swatch
);
gtk_widget_add_controller
(
GTK_WIDGET
(
swatch
),
GTK_EVENT_CONTROLLER
(
swatch
->
priv
->
long_press_gesture
));
swatch
->
priv
->
multipress_gesture
=
gtk_gesture_multi_press_new
(
GTK_WIDGET
(
swatch
));
g_signal_connect
(
swatch
->
priv
->
multipress_gesture
,
"pressed"
,
G_CALLBACK
(
tap_action
),
swatch
);
gtk_widget_add_controller
(
GTK_WIDGET
(
swatch
),
GTK_EVENT_CONTROLLER
(
swatch
->
priv
->
multipress_gesture
));
}
#define INTENSITY(r, g, b) ((r) * 0.30 + (g) * 0.59 + (b) * 0.11)
...
...
@@ -527,53 +549,24 @@ swatch_button_release (GtkWidget *widget,
}
static
void
hold_action
(
Gtk
PressAndHold
*
pah
,
g
int
x
,
g
int
y
,
GtkColorSwatch
*
swatch
)
hold_action
(
Gtk
GestureLongPress
*
gesture
,
g
double
x
,
g
double
y
,
GtkColorSwatch
*
swatch
)
{
emit_customize
(
swatch
);
gtk_gesture_set_state
(
GTK_GESTURE
(
gesture
),
GTK_EVENT_SEQUENCE_CLAIMED
);
}
static
void
tap_action
(
GtkPressAndHold
*
pah
,
gint
x
,
gint
y
,
GtkColorSwatch
*
swatch
)
{
swatch_primary_action
(
swatch
);
}
static
gboolean
swatch_touch
(
GtkWidget
*
widget
,
GdkEventTouch
*
event
)
tap_action
(
GtkGestureMultiPress
*
gesture
,
gint
n_press
,
gdouble
x
,
gdouble
y
,
GtkColorSwatch
*
swatch
)
{
GtkColorSwatch
*
swatch
=
GTK_COLOR_SWATCH
(
widget
);
if
(
!
swatch
->
priv
->
press_and_hold
)
{
gint
drag_threshold
;
g_object_get
(
gtk_widget_get_settings
(
widget
),
"gtk-dnd-drag-threshold"
,
&
drag_threshold
,
NULL
);
swatch
->
priv
->
press_and_hold
=
gtk_press_and_hold_new
();
g_object_set
(
swatch
->
priv
->
press_and_hold
,
"drag-threshold"
,
drag_threshold
,
"hold-time"
,
1000
,
NULL
);
g_signal_connect
(
swatch
->
priv
->
press_and_hold
,
"hold"
,
G_CALLBACK
(
hold_action
),
swatch
);
g_signal_connect
(
swatch
->
priv
->
press_and_hold
,
"tap"
,
G_CALLBACK
(
tap_action
),
swatch
);
}
gtk_press_and_hold_process_event
(
swatch
->
priv
->
press_and_hold
,
(
GdkEvent
*
)
event
);
return
TRUE
;
if
(
n_press
==
1
)
swatch_primary_action
(
swatch
);
}
static
void
...
...
@@ -727,7 +720,14 @@ swatch_finalize (GObject *object)
GtkColorSwatch
*
swatch
=
GTK_COLOR_SWATCH
(
object
);
g_free
(
swatch
->
priv
->
icon
);
g_clear_object
(
&
swatch
->
priv
->
press_and_hold
);
gtk_widget_remove_controller
(
GTK_WIDGET
(
object
),
GTK_EVENT_CONTROLLER
(
swatch
->
priv
->
long_press_gesture
));
g_object_unref
(
swatch
->
priv
->
long_press_gesture
);
gtk_widget_remove_controller
(
GTK_WIDGET
(
object
),
GTK_EVENT_CONTROLLER
(
swatch
->
priv
->
multipress_gesture
));
g_object_unref
(
swatch
->
priv
->
multipress_gesture
);
G_OBJECT_CLASS
(
gtk_color_swatch_parent_class
)
->
finalize
(
object
);
}
...
...
@@ -759,7 +759,6 @@ gtk_color_swatch_class_init (GtkColorSwatchClass *class)
widget_class
->
map
=
swatch_map
;
widget_class
->
unmap
=
swatch_unmap
;
widget_class
->
size_allocate
=
swatch_size_allocate
;
widget_class
->
touch_event
=
swatch_touch
;
signals
[
ACTIVATE
]
=
g_signal_new
(
"activate"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment