Fix dial to display focus indication
Partial cherry-pick from 5dc3ab Sebastian Kaminski "dial ... shows focus indication". Use has_focus() rather than has_visible_focus() as I found has_visible_focus() to be unreliable.
This commit is contained in:
@@ -335,6 +335,12 @@ static void gtk_dial_class_init(GtkDialClass *klass)
|
|||||||
GTK_SCROLL_STEP_RIGHT);
|
GTK_SCROLL_STEP_RIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void gtk_dial_focus_change_cb(
|
||||||
|
GtkEventControllerFocus *controller, GtkDial *dial
|
||||||
|
) {
|
||||||
|
gtk_widget_queue_draw(GTK_WIDGET(dial));
|
||||||
|
}
|
||||||
|
|
||||||
static void gtk_dial_init(GtkDial *dial)
|
static void gtk_dial_init(GtkDial *dial)
|
||||||
{
|
{
|
||||||
// gtk_dial_set_style(dial, "#cdc7c2", "white", "#3584e4");
|
// gtk_dial_set_style(dial, "#cdc7c2", "white", "#3584e4");
|
||||||
@@ -371,6 +377,11 @@ static void gtk_dial_init(GtkDial *dial)
|
|||||||
g_signal_connect (dial->scroll_controller, "scroll",
|
g_signal_connect (dial->scroll_controller, "scroll",
|
||||||
G_CALLBACK (gtk_dial_scroll_controller_scroll), dial);
|
G_CALLBACK (gtk_dial_scroll_controller_scroll), dial);
|
||||||
gtk_widget_add_controller (GTK_WIDGET (dial), dial->scroll_controller);
|
gtk_widget_add_controller (GTK_WIDGET (dial), dial->scroll_controller);
|
||||||
|
|
||||||
|
GtkEventController *controller = gtk_event_controller_focus_new ();
|
||||||
|
g_signal_connect (controller, "enter", G_CALLBACK (gtk_dial_focus_change_cb), dial);
|
||||||
|
g_signal_connect (controller, "leave", G_CALLBACK (gtk_dial_focus_change_cb), dial);
|
||||||
|
gtk_widget_add_controller (GTK_WIDGET (dial), controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dial_measure(GtkWidget *widget,
|
static void dial_measure(GtkWidget *widget,
|
||||||
@@ -398,7 +409,7 @@ static void dial_snapshot(GtkWidget *widget, GtkSnapshot *snapshot)
|
|||||||
cairo_t *cr = gtk_snapshot_append_cairo(snapshot, &GRAPHENE_RECT_INIT(0, 0, p.w, p.h) );
|
cairo_t *cr = gtk_snapshot_append_cairo(snapshot, &GRAPHENE_RECT_INIT(0, 0, p.w, p.h) );
|
||||||
|
|
||||||
// draw border
|
// draw border
|
||||||
cairo_set_line_width(cr, 2);
|
cairo_set_line_width(cr, gtk_widget_has_focus(widget) ? 5 : 2);
|
||||||
gdk_cairo_set_source_rgba(cr, &dial->colors.trough_border);
|
gdk_cairo_set_source_rgba(cr, &dial->colors.trough_border);
|
||||||
cairo_arc(cr, p.cx, p.cy, p.radius-p.thickness, RAD_START, RAD_END/*8*M_PI/5*/);
|
cairo_arc(cr, p.cx, p.cy, p.radius-p.thickness, RAD_START, RAD_END/*8*M_PI/5*/);
|
||||||
cairo_line_to(cr, V1x*(p.radius-p.thickness) + p.cx, V1y*(p.radius-p.thickness) + p.cy);
|
cairo_line_to(cr, V1x*(p.radius-p.thickness) + p.cx, V1y*(p.radius-p.thickness) + p.cy);
|
||||||
|
|||||||
Reference in New Issue
Block a user