Skip to content

Commit d6543f8

Browse files
committed
Improve Event Controllers
1 parent bb5df9b commit d6543f8

File tree

4 files changed

+40
-57
lines changed

4 files changed

+40
-57
lines changed

src/Event Controllers/main.blp

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Adw.StatusPage {
2323
}
2424

2525
Gtk.Button ctrl_button {
26-
label: _("Ctrl + Click to Activate");
26+
label: _("Ctrl Key");
2727
width-request: 200;
2828
halign: center;
2929
}

src/Event Controllers/main.js

+14-18
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,17 @@ const secondary_button = workbench.builder.get_object("secondary_button");
1515
stack_picture_1.file = Gio.File.new_for_uri(workbench.resolve("image1.png"));
1616
stack_picture_2.file = Gio.File.new_for_uri(workbench.resolve("image2.png"));
1717

18-
let ctrl_pressed = false;
19-
2018
// Key controller to detect when the Ctrl key is pressed and released
2119
const key_controller = new Gtk.EventControllerKey();
2220
window.add_controller(key_controller);
2321
key_controller.connect("key-pressed", (_self, keyval, _keycode, _state) => {
2422
if (keyval === Gdk.KEY_Control_L || keyval === Gdk.KEY_Control_R) {
25-
ctrl_pressed = true;
23+
ctrl_button.add_css_class("suggested-action");
2624
}
2725
});
2826

2927
key_controller.connect("key-released", (_self, keyval, _keycode, _state) => {
3028
if (keyval === Gdk.KEY_Control_L || keyval === Gdk.KEY_Control_R) {
31-
ctrl_pressed = false;
32-
}
33-
});
34-
35-
ctrl_button.connect("clicked", () => {
36-
if (ctrl_pressed) {
37-
ctrl_button.label = _("Click to Deactivate");
38-
ctrl_button.add_css_class("suggested-action");
39-
} else {
40-
ctrl_button.label = _("Ctrl + Click to Activate");
4129
ctrl_button.remove_css_class("suggested-action");
4230
}
4331
});
@@ -48,33 +36,41 @@ const gesture_click = new Gtk.GestureClick({ button: 0 });
4836
window.add_controller(gesture_click);
4937

5038
gesture_click.connect("pressed", (_self, _n_press, _x, _y) => {
51-
switch (gesture_click.get_current_button()) {
39+
let css_class = "suggested-action";
40+
if (_self.get_current_event_state() & Gdk.ModifierType.CONTROL_MASK) {
41+
css_class = "destructive-action";
42+
}
43+
44+
switch (_self.get_current_button()) {
5245
case Gdk.BUTTON_PRIMARY:
53-
primary_button.add_css_class("suggested-action");
46+
primary_button.add_css_class(css_class);
5447
break;
5548

5649
case Gdk.BUTTON_MIDDLE:
57-
middle_button.add_css_class("suggested-action");
50+
middle_button.add_css_class(css_class);
5851
break;
5952

6053
case Gdk.BUTTON_SECONDARY:
61-
secondary_button.add_css_class("suggested-action");
54+
secondary_button.add_css_class(css_class);
6255
break;
6356
}
6457
});
6558

6659
gesture_click.connect("released", (_self, _n_press, _x, _y) => {
67-
switch (gesture_click.get_current_button()) {
60+
switch (_self.get_current_button()) {
6861
case Gdk.BUTTON_PRIMARY:
6962
primary_button.remove_css_class("suggested-action");
63+
primary_button.remove_css_class("destructive-action");
7064
break;
7165

7266
case Gdk.BUTTON_MIDDLE:
7367
middle_button.remove_css_class("suggested-action");
68+
middle_button.remove_css_class("destructive-action");
7469
break;
7570

7671
case Gdk.BUTTON_SECONDARY:
7772
secondary_button.remove_css_class("suggested-action");
73+
secondary_button.remove_css_class("destructive-action");
7874
break;
7975
}
8076
});

src/Event Controllers/main.py

+14-22
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
gi.require_version("Gdk", "4.0")
55

66
from gi.repository import Gdk, Gio, Gtk
7-
from gettext import gettext as _
87
import workbench
98

109
window = workbench.window
@@ -19,52 +18,47 @@
1918
stack_picture_1.set_file(Gio.File.new_for_uri(workbench.resolve("image1.png")))
2019
stack_picture_2.set_file(Gio.File.new_for_uri(workbench.resolve("image2.png")))
2120

22-
ctrl_pressed = False
23-
2421

2522
def on_key_pressed(_self, keyval, _keycode, _state):
2623
if keyval == Gdk.KEY_Control_L or keyval == Gdk.KEY_Control_R:
27-
global ctrl_pressed
28-
ctrl_pressed = True
24+
ctrl_button.add_css_class("suggested-action")
2925

3026

3127
def on_key_released(_self, keyval, _keycode, _state):
3228
if keyval == Gdk.KEY_Control_L or keyval == Gdk.KEY_Control_R:
33-
global ctrl_pressed
34-
ctrl_pressed = False
35-
36-
37-
def on_clicked(_self):
38-
if ctrl_pressed:
39-
ctrl_button.set_label(_("Click to Deactivate"))
40-
ctrl_button.add_css_class("suggested-action")
41-
else:
42-
ctrl_button.set_label(_("Ctrl + Click to Activate"))
4329
ctrl_button.remove_css_class("suggested-action")
4430

4531

4632
def on_pressed(_self, _n_press, _x, _y):
47-
match gesture_click.get_current_button():
33+
if _self.get_current_event_state() & Gdk.ModifierType.CONTROL_MASK:
34+
css_class = "destructive-action"
35+
else:
36+
css_class = "suggested-action"
37+
38+
match _self.get_current_button():
4839
case Gdk.BUTTON_PRIMARY:
49-
primary_button.add_css_class("suggested-action")
40+
primary_button.add_css_class(css_class)
5041

5142
case Gdk.BUTTON_MIDDLE:
52-
middle_button.add_css_class("suggested-action")
43+
middle_button.add_css_class(css_class)
5344

5445
case Gdk.BUTTON_SECONDARY:
55-
secondary_button.add_css_class("suggested-action")
46+
secondary_button.add_css_class(css_class)
5647

5748

5849
def on_released(_self, _n_press, _x, _y):
59-
match gesture_click.get_current_button():
50+
match _self.get_current_button():
6051
case Gdk.BUTTON_PRIMARY:
6152
primary_button.remove_css_class("suggested-action")
53+
primary_button.remove_css_class("destructive-action")
6254

6355
case Gdk.BUTTON_MIDDLE:
6456
middle_button.remove_css_class("suggested-action")
57+
middle_button.remove_css_class("destructive-action")
6558

6659
case Gdk.BUTTON_SECONDARY:
6760
secondary_button.remove_css_class("suggested-action")
61+
secondary_button.remove_css_class("destructive-action")
6862

6963

7064
def on_swipe(_self, vel_x, _vel_y):
@@ -80,8 +74,6 @@ def on_swipe(_self, vel_x, _vel_y):
8074
key_controller.connect("key-pressed", on_key_pressed)
8175
key_controller.connect("key-released", on_key_released)
8276

83-
ctrl_button.connect("clicked", on_clicked)
84-
8577
# Detect pointer button press and release events
8678
gesture_click = Gtk.GestureClick(button=0)
8779
window.add_controller(gesture_click)

src/Event Controllers/main.vala

+11-16
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#! /usr/bin/env -S vala workbench.vala --pkg libadwaita-1
22

3-
private bool ctrl_pressed = false;
4-
53
public void main () {
64
Gtk.Window window = workbench.window;
75

@@ -23,23 +21,13 @@ public void main () {
2321

2422
key_controller.key_pressed.connect ((keyval, keycode, state) => {
2523
if (keyval == Gdk.Key.Control_L || keyval == Gdk.Key.Control_R) {
26-
ctrl_pressed = true;
24+
ctrl_button.add_css_class ("suggested-action");
2725
}
2826
return true;
2927
});
3028

3129
key_controller.key_released.connect ((keyval, keycode, state) => {
3230
if (keyval == Gdk.Key.Control_L || keyval == Gdk.Key.Control_R) {
33-
ctrl_pressed = false;
34-
}
35-
});
36-
37-
ctrl_button.clicked.connect (() => {
38-
if (ctrl_pressed) {
39-
ctrl_button.label = "Click to Deactivate";
40-
ctrl_button.add_css_class ("suggested-action");
41-
} else {
42-
ctrl_button.label = "Ctrl + Click to Activate";
4331
ctrl_button.remove_css_class ("suggested-action");
4432
}
4533
});
@@ -50,15 +38,19 @@ public void main () {
5038
((Gtk.Widget) window).add_controller (gesture_click);
5139

5240
gesture_click.pressed.connect ((gesture, n_press, x, y) => {
41+
var css_class = "suggested-action";
42+
if ((gesture.get_current_event_state () & Gdk.ModifierType.CONTROL_MASK) > 0) {
43+
css_class = "destructive-action";
44+
}
5345
switch (gesture.get_current_button ()) {
5446
case Gdk.BUTTON_PRIMARY:
55-
primary_button.add_css_class ("suggested-action");
47+
primary_button.add_css_class (css_class);
5648
break;
5749
case Gdk.BUTTON_MIDDLE:
58-
middle_button.add_css_class ("suggested-action");
50+
middle_button.add_css_class (css_class);
5951
break;
6052
case Gdk.BUTTON_SECONDARY:
61-
secondary_button.add_css_class ("suggested-action");
53+
secondary_button.add_css_class (css_class);
6254
break;
6355
}
6456
});
@@ -67,12 +59,15 @@ public void main () {
6759
switch (gesture.get_current_button ()) {
6860
case Gdk.BUTTON_PRIMARY:
6961
primary_button.remove_css_class ("suggested-action");
62+
primary_button.remove_css_class ("destructive-action");
7063
break;
7164
case Gdk.BUTTON_MIDDLE:
7265
middle_button.remove_css_class ("suggested-action");
66+
middle_button.remove_css_class ("destructive-action");
7367
break;
7468
case Gdk.BUTTON_SECONDARY:
7569
secondary_button.remove_css_class ("suggested-action");
70+
secondary_button.remove_css_class ("destructive-action");
7671
break;
7772
}
7873
});

0 commit comments

Comments
 (0)