Skip to content

Commit 5d4a035

Browse files
danirabbitzeebok
andauthored
EditableLabel: Gtk4 Prep (#383)
Co-authored-by: Ryan Kornheisl <ryan@skarva.tech>
1 parent 9c57cd4 commit 5d4a035

File tree

1 file changed

+28
-49
lines changed

1 file changed

+28
-49
lines changed

src/Widgets/EditableLabel.vala

Lines changed: 28 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2016-2023 elementary, Inc. (https://elementary.io)
2+
* Copyright 2016-2024 elementary, Inc. (https://elementary.io)
33
* Copyright 2016 Corentin Noël <corentin@elementary.io>
44
* SPDX-License-Identifier: LGPL-2.1-or-later
55
*/
@@ -10,9 +10,11 @@ public class Tasks.Widgets.EditableLabel : Gtk.EventBox {
1010
private Gtk.Label title;
1111
private Gtk.Entry entry;
1212
private Gtk.Stack stack;
13-
private Gtk.Box box;
1413

15-
public string text { get; set; }
14+
private Gtk.EventControllerMotion motion_controller;
15+
private Gtk.GestureMultiPress click_gesture;
16+
17+
public string text { get; set; default = ""; }
1618

1719
public bool editing {
1820
get { return stack.visible_child == entry; }
@@ -27,7 +29,7 @@ public class Tasks.Widgets.EditableLabel : Gtk.EventBox {
2729
changed ();
2830
}
2931

30-
stack.set_visible_child (box);
32+
stack.set_visible_child (title);
3133
}
3234
}
3335
}
@@ -37,71 +39,47 @@ public class Tasks.Widgets.EditableLabel : Gtk.EventBox {
3739
}
3840

3941
construct {
40-
valign = Gtk.Align.CENTER;
41-
events |= Gdk.EventMask.ENTER_NOTIFY_MASK;
42-
events |= Gdk.EventMask.LEAVE_NOTIFY_MASK;
43-
events |= Gdk.EventMask.BUTTON_PRESS_MASK;
42+
valign = CENTER;
4443

4544
title = new Gtk.Label ("") {
46-
ellipsize = Pango.EllipsizeMode.END,
45+
ellipsize = END,
4746
xalign = 0
4847
};
4948

50-
var edit_button = new Gtk.Button () {
51-
image = new Gtk.Image.from_icon_name ("edit-symbolic", Gtk.IconSize.MENU),
52-
tooltip_text = _("Edit…")
53-
};
54-
edit_button.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT);
55-
56-
var button_revealer = new Gtk.Revealer () {
57-
valign = Gtk.Align.CENTER,
58-
transition_type = Gtk.RevealerTransitionType.CROSSFADE
59-
};
60-
button_revealer.add (edit_button);
61-
62-
box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 12) {
63-
valign = Gtk.Align.CENTER
64-
};
65-
box.add (title);
66-
box.add (button_revealer);
67-
6849
entry = new Gtk.Entry () {
6950
hexpand = true
7051
};
7152

7253
stack = new Gtk.Stack () {
7354
hhomogeneous = false,
74-
transition_type = Gtk.StackTransitionType.CROSSFADE
55+
transition_type = CROSSFADE
7556
};
76-
stack.add (box);
57+
stack.add (title);
7758
stack.add (entry);
7859

7960
add (stack);
8061

8162
bind_property ("text", title, "label");
8263

83-
enter_notify_event.connect ((event) => {
84-
if (event.detail != Gdk.NotifyType.INFERIOR) {
85-
button_revealer.reveal_child = true;
86-
}
87-
88-
return Gdk.EVENT_PROPAGATE;
89-
});
64+
motion_controller = new Gtk.EventControllerMotion (this) {
65+
propagation_phase = CAPTURE
66+
};
9067

91-
leave_notify_event.connect ((event) => {
92-
if (event.detail != Gdk.NotifyType.INFERIOR) {
93-
button_revealer.reveal_child = false;
94-
}
68+
click_gesture = new Gtk.GestureMultiPress (this);
9569

96-
return Gdk.EVENT_PROPAGATE;
70+
motion_controller.enter.connect (() => {
71+
get_window ().set_cursor (
72+
new Gdk.Cursor.from_name (Gdk.Display.get_default (), "text")
73+
);
9774
});
9875

99-
button_press_event.connect ((event) => {
100-
editing = true;
101-
return Gdk.EVENT_PROPAGATE;
76+
motion_controller.leave.connect (() => {
77+
get_window ().set_cursor (
78+
new Gdk.Cursor.from_name (Gdk.Display.get_default (), "default")
79+
);
10280
});
10381

104-
edit_button.clicked.connect (() => {
82+
click_gesture.released.connect (() => {
10583
editing = true;
10684
});
10785

@@ -111,15 +89,16 @@ public class Tasks.Widgets.EditableLabel : Gtk.EventBox {
11189
}
11290
});
11391

114-
grab_focus.connect (() => {
115-
editing = true;
116-
});
117-
11892
entry.focus_out_event.connect ((event) => {
11993
if (stack.visible_child == entry) {
12094
editing = false;
12195
}
96+
12297
return Gdk.EVENT_PROPAGATE;
12398
});
12499
}
100+
101+
public override void grab_focus () {
102+
editing = true;
103+
}
125104
}

0 commit comments

Comments
 (0)