Bug #2442 » 0002-Avoid-replacing-the-event-controllers-as-this-can-be.patch
| client/gui-gtk-4.0/citydlg.c | ||
|---|---|---|
|
} else {
|
||
|
for (i = m; i < n; i++) {
|
||
|
GtkWidget *cmd, *pix;
|
||
|
GtkGesture *gesture;
|
||
|
struct unit_node node;
|
||
|
cmd = gtk_button_new();
|
||
| ... | ... | |
|
gtk_box_append(GTK_BOX(pdialog->overview.supported_unit_table),
|
||
|
cmd);
|
||
|
node.left = NULL;
|
||
|
node.middle = NULL;
|
||
|
node.right = NULL;
|
||
|
/* Set up the event controllers for the three mouse buttons */
|
||
|
node.left = GTK_EVENT_CONTROLLER(gtk_gesture_click_new());
|
||
|
gesture = gtk_gesture_click_new();
|
||
|
gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 2);
|
||
|
node.middle = GTK_EVENT_CONTROLLER(gesture);
|
||
|
gesture = gtk_gesture_click_new();
|
||
|
gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 3);
|
||
|
node.right = GTK_EVENT_CONTROLLER(gesture);
|
||
|
gtk_widget_add_controller(cmd, node.left);
|
||
|
gtk_widget_add_controller(cmd, node.middle);
|
||
|
gtk_widget_add_controller(cmd, node.right);
|
||
|
unit_node_vector_append(nodes, node);
|
||
|
}
|
||
| ... | ... | |
|
pnode = unit_node_vector_get(nodes, i);
|
||
|
if (pnode) {
|
||
|
GtkWidget *cmd, *pix;
|
||
|
GtkGesture *gesture;
|
||
|
GtkEventController *controller;
|
||
|
cmd = pnode->cmd;
|
||
|
pix = pnode->pix;
|
||
| ... | ... | |
|
put_unit_picture_city_overlays(punit, GTK_PICTURE(pix), pnode->height,
|
||
|
punit->upkeep, happy_cost);
|
||
|
if (pnode->left != NULL) {
|
||
|
gtk_widget_remove_controller(cmd, pnode->left);
|
||
|
gtk_widget_remove_controller(cmd, pnode->middle);
|
||
|
gtk_widget_remove_controller(cmd, pnode->right);
|
||
|
}
|
||
|
gtk_event_controller_reset(pnode->left);
|
||
|
gtk_event_controller_reset(pnode->middle);
|
||
|
gtk_event_controller_reset(pnode->right);
|
||
|
gtk_widget_set_tooltip_text(cmd, unit_description(punit));
|
||
|
controller = GTK_EVENT_CONTROLLER(gtk_gesture_click_new());
|
||
|
g_signal_connect(controller, "pressed",
|
||
|
g_signal_connect(pnode->left, "pressed",
|
||
|
G_CALLBACK(supported_unit_callback),
|
||
|
GINT_TO_POINTER(punit->id));
|
||
|
gtk_widget_add_controller(cmd, controller);
|
||
|
pnode->left = controller;
|
||
|
gesture = gtk_gesture_click_new();
|
||
|
gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 2);
|
||
|
controller = GTK_EVENT_CONTROLLER(gesture);
|
||
|
g_signal_connect(controller, "released",
|
||
|
g_signal_connect(pnode->middle, "released",
|
||
|
G_CALLBACK(middle_supported_unit_release),
|
||
|
GINT_TO_POINTER(punit->id));
|
||
|
gtk_widget_add_controller(cmd, controller);
|
||
|
pnode->middle = controller;
|
||
|
gesture = gtk_gesture_click_new();
|
||
|
gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 3);
|
||
|
controller = GTK_EVENT_CONTROLLER(gesture);
|
||
|
g_signal_connect(controller, "released",
|
||
|
g_signal_connect(pnode->right, "released",
|
||
|
G_CALLBACK(right_unit_release),
|
||
|
GINT_TO_POINTER(punit->id));
|
||
|
gtk_widget_add_controller(cmd, controller);
|
||
|
pnode->right = controller;
|
||
|
if (city_owner(pdialog->pcity) != client.conn.playing) {
|
||
|
gtk_widget_set_sensitive(cmd, FALSE);
|
||
| ... | ... | |
|
} else {
|
||
|
for (i = m; i < n; i++) {
|
||
|
GtkWidget *cmd, *pix;
|
||
|
GtkGesture *gesture;
|
||
|
struct unit_node node;
|
||
|
cmd = gtk_button_new();
|
||
| ... | ... | |
|
gtk_box_append(GTK_BOX(pdialog->overview.present_unit_table),
|
||
|
cmd);
|
||
|
node.left = NULL;
|
||
|
node.middle = NULL;
|
||
|
node.right = NULL;
|
||
|
/* Set up the event controllers for the three mouse buttons */
|
||
|
node.left = GTK_EVENT_CONTROLLER(gtk_gesture_click_new());
|
||
|
gesture = gtk_gesture_click_new();
|
||
|
gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 2);
|
||
|
node.middle = GTK_EVENT_CONTROLLER(gesture);
|
||
|
gesture = gtk_gesture_click_new();
|
||
|
gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 3);
|
||
|
node.right = GTK_EVENT_CONTROLLER(gesture);
|
||
|
gtk_widget_add_controller(cmd, node.left);
|
||
|
gtk_widget_add_controller(cmd, node.middle);
|
||
|
gtk_widget_add_controller(cmd, node.right);
|
||
|
unit_node_vector_append(nodes, node);
|
||
|
}
|
||
| ... | ... | |
|
pnode = unit_node_vector_get(nodes, i);
|
||
|
if (pnode) {
|
||
|
GtkWidget *cmd, *pix;
|
||
|
GtkEventController *controller;
|
||
|
GtkGesture *gesture;
|
||
|
cmd = pnode->cmd;
|
||
|
pix = pnode->pix;
|
||
|
put_unit_picture(punit, GTK_PICTURE(pix), pnode->height);
|
||
|
if (pnode->left != NULL) {
|
||
|
gtk_widget_remove_controller(cmd, pnode->left);
|
||
|
gtk_widget_remove_controller(cmd, pnode->middle);
|
||
|
gtk_widget_remove_controller(cmd, pnode->right);
|
||
|
}
|
||
|
gtk_event_controller_reset(pnode->left);
|
||
|
gtk_event_controller_reset(pnode->middle);
|
||
|
gtk_event_controller_reset(pnode->right);
|
||
|
gtk_widget_set_tooltip_text(cmd, unit_description(punit));
|
||
|
controller = GTK_EVENT_CONTROLLER(gtk_gesture_click_new());
|
||
|
g_signal_connect(controller, "pressed",
|
||
|
g_signal_connect(pnode->left, "pressed",
|
||
|
G_CALLBACK(present_unit_callback),
|
||
|
GINT_TO_POINTER(punit->id));
|
||
|
gtk_widget_add_controller(cmd, controller);
|
||
|
pnode->left = controller;
|
||
|
gesture = gtk_gesture_click_new();
|
||
|
gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 2);
|
||
|
controller = GTK_EVENT_CONTROLLER(gesture);
|
||
|
g_signal_connect(controller, "released",
|
||
|
g_signal_connect(pnode->middle, "released",
|
||
|
G_CALLBACK(middle_present_unit_release),
|
||
|
GINT_TO_POINTER(punit->id));
|
||
|
gtk_widget_add_controller(cmd, controller);
|
||
|
pnode->middle = controller;
|
||
|
gesture = gtk_gesture_click_new();
|
||
|
gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 3);
|
||
|
controller = GTK_EVENT_CONTROLLER(gesture);
|
||
|
g_signal_connect(controller, "released",
|
||
|
g_signal_connect(pnode->right, "released",
|
||
|
G_CALLBACK(right_unit_release),
|
||
|
GINT_TO_POINTER(punit->id));
|
||
|
gtk_widget_add_controller(cmd, controller);
|
||
|
pnode->right = controller;
|
||
|
if (city_owner(pdialog->pcity) != client.conn.playing) {
|
||
|
gtk_widget_set_sensitive(cmd, FALSE);
|
||