renderer: Mark latched buttons differently than locked

There are some hacks here in the form of an extra field "appears_locked_from", which can be used to hint that the user should see the button as locked. Without it, there's some confusion on user side regarding buttons that change states unprompted.
This commit is contained in:
Dorota Czaplejewicz
2020-12-04 15:27:43 +00:00
parent 676a2b60ac
commit 7b1755a489
6 changed files with 137 additions and 28 deletions

View File

@ -111,8 +111,8 @@ GtkStyleContext *
eek_get_style_context_for_button (EekRenderer *self,
const char *name,
const char *outline_name,
uint64_t pressed,
uint64_t locked)
const char *locked_class,
uint64_t pressed)
{
GtkStyleContext *ctx = self->button_context;
/* Set the name of the button on the widget path, using the name obtained
@ -127,8 +127,8 @@ eek_get_style_context_for_button (EekRenderer *self,
(pressed) or normal. */
gtk_style_context_set_state(ctx,
pressed ? GTK_STATE_FLAG_ACTIVE : GTK_STATE_FLAG_NORMAL);
if (locked) {
gtk_style_context_add_class(ctx, "locked");
if (locked_class) {
gtk_style_context_add_class(ctx, locked_class);
}
gtk_style_context_add_class(ctx, outline_name);
return ctx;
@ -137,12 +137,12 @@ eek_get_style_context_for_button (EekRenderer *self,
/// Interface for Rust.
void eek_put_style_context_for_button(GtkStyleContext *ctx,
const char *outline_name,
uint64_t locked) {
const char *locked_class) {
// Save and restore functions don't work if gtk_render_* was used in between
gtk_style_context_set_state(ctx, GTK_STATE_FLAG_NORMAL);
gtk_style_context_remove_class(ctx, outline_name);
if (locked) {
gtk_style_context_remove_class(ctx, "locked");
if (locked_class) {
gtk_style_context_remove_class(ctx, locked_class);
}
}