diff --git a/SOURCES/0001-wacom-Change-button-order-for-3-button-styli.patch b/SOURCES/0001-wacom-Change-button-order-for-3-button-styli.patch new file mode 100644 index 0000000..df1d64e --- /dev/null +++ b/SOURCES/0001-wacom-Change-button-order-for-3-button-styli.patch @@ -0,0 +1,125 @@ +From a8a267677fc0794f312560251617a646ba52fa2f Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Wed, 13 May 2026 17:57:39 +0200 +Subject: [PATCH] wacom: Change button order for 3-button styli + +The order is scrambled, relative to how they are assigned by +the compositor/Xorg. +--- + panels/wacom/cc-wacom-stylus-page.c | 67 ++++++++++++++++++++--------- + 1 file changed, 47 insertions(+), 20 deletions(-) + +diff --git a/panels/wacom/cc-wacom-stylus-page.c b/panels/wacom/cc-wacom-stylus-page.c +index 2fc6c5a..6727b1d 100644 +--- a/panels/wacom/cc-wacom-stylus-page.c ++++ b/panels/wacom/cc-wacom-stylus-page.c +@@ -157,16 +157,16 @@ button_changed_cb (CcWacomStylusPage *page) + { + GtkTreeIter iter; + GtkListStore *liststore; +- gint mapping_b2, +- mapping_b3, +- mapping_b4; ++ gint mapping_bottombutton, ++ mapping_topbutton, ++ mapping_thirdbutton; + + if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (WID ("combo-bottombutton")), &iter)) + return; + + liststore = GTK_LIST_STORE (WID ("liststore-buttons")); + gtk_tree_model_get (GTK_TREE_MODEL (liststore), &iter, +- BUTTONNUMBER_COLUMN, &mapping_b2, ++ BUTTONNUMBER_COLUMN, &mapping_bottombutton, + -1); + + if (cc_wacom_tool_get_num_buttons (page->stylus) > 1) { +@@ -174,10 +174,10 @@ button_changed_cb (CcWacomStylusPage *page) + return; + + gtk_tree_model_get (GTK_TREE_MODEL (liststore), &iter, +- BUTTONNUMBER_COLUMN, &mapping_b3, ++ BUTTONNUMBER_COLUMN, &mapping_topbutton, + -1); + } else { +- mapping_b3 = 0; ++ mapping_topbutton = 0; + } + + if (cc_wacom_tool_get_num_buttons (page->stylus) > 2) { +@@ -185,15 +185,27 @@ button_changed_cb (CcWacomStylusPage *page) + return; + + gtk_tree_model_get (GTK_TREE_MODEL (liststore), &iter, +- BUTTONNUMBER_COLUMN, &mapping_b4, ++ BUTTONNUMBER_COLUMN, &mapping_thirdbutton, + -1); + } else { +- mapping_b4 = 0; ++ mapping_thirdbutton = 0; + } + +- g_settings_set_enum (page->stylus_settings, "button-action", mapping_b2); +- g_settings_set_enum (page->stylus_settings, "secondary-button-action", mapping_b3); +- g_settings_set_enum (page->stylus_settings, "tertiary-button-action", mapping_b4); ++ if (cc_wacom_tool_get_num_buttons (page->stylus) >= 3) { ++ if (g_getenv ("GCC_ALTERNATIVE_STYLUS_MAPPING") == NULL) { ++ g_settings_set_enum (page->stylus_settings, "tertiary-button-action", mapping_topbutton); ++ g_settings_set_enum (page->stylus_settings, "secondary-button-action", mapping_bottombutton); ++ g_settings_set_enum (page->stylus_settings, "button-action", mapping_thirdbutton); ++ } else { ++ g_settings_set_enum (page->stylus_settings, "button-action", mapping_topbutton); ++ g_settings_set_enum (page->stylus_settings, "secondary-button-action", mapping_bottombutton); ++ g_settings_set_enum (page->stylus_settings, "tertiary-button-action", mapping_thirdbutton); ++ } ++ } else { ++ g_settings_set_enum (page->stylus_settings, "secondary-button-action", mapping_topbutton); ++ g_settings_set_enum (page->stylus_settings, "button-action", mapping_bottombutton); ++ g_settings_set_enum (page->stylus_settings, "tertiary-button-action", mapping_thirdbutton); ++ } + } + + static void +@@ -465,15 +477,30 @@ cc_wacom_stylus_page_new (CcWacomTool *stylus) + + update_stylus_ui (page, layout); + +- if (num_buttons >= 3) +- set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-thirdbutton")), +- page->stylus_settings, "tertiary-button-action"); +- if (num_buttons >= 2) +- set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-topbutton")), +- page->stylus_settings, "secondary-button-action"); +- if (num_buttons >= 1) +- set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-bottombutton")), +- page->stylus_settings, "button-action"); ++ if (num_buttons >= 3) { ++ if (g_getenv ("GCC_ALTERNATIVE_STYLUS_MAPPING") == NULL) { ++ set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-topbutton")), ++ page->stylus_settings, "tertiary-button-action"); ++ set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-bottombutton")), ++ page->stylus_settings, "secondary-button-action"); ++ set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-thirdbutton")), ++ page->stylus_settings, "button-action"); ++ } else { ++ set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-topbutton")), ++ page->stylus_settings, "button-action"); ++ set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-bottombutton")), ++ page->stylus_settings, "secondary-button-action"); ++ set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-thirdbutton")), ++ page->stylus_settings, "tertiary-button-action"); ++ } ++ } else { ++ if (num_buttons >= 2) ++ set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-topbutton")), ++ page->stylus_settings, "secondary-button-action"); ++ if (num_buttons >= 1) ++ set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-bottombutton")), ++ page->stylus_settings, "button-action"); ++ } + set_feel_from_gsettings (GTK_ADJUSTMENT (WID ("adjustment-tip-feel")), + page->stylus_settings, "pressure-curve"); + +-- +2.54.0 + diff --git a/SOURCES/info-overview-backport-nvidia-card-name-fixes.patch b/SOURCES/info-overview-backport-nvidia-card-name-fixes.patch new file mode 100644 index 0000000..a1599c4 --- /dev/null +++ b/SOURCES/info-overview-backport-nvidia-card-name-fixes.patch @@ -0,0 +1,125 @@ +From 7f8ee8ea0ca441ea4c280d48ef8e015daca44bbf Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Tue, 14 Apr 2026 11:23:47 +0200 +Subject: [PATCH] info-overview: Backport NVIDIA GPU name fixes for + print-renderer + +When SwitcherooControl runs the print-renderer helper with DRI_PRIME, the +NVIDIA proprietary GL stack may not honor that selection; the helper can +then report a bogus GL_RENDERER and About falls back to a generic udev +name (e.g. "NVIDIA Corporation"). + +gnome-control-center-print-renderer (after querying GL_RENDERER), checks +GL_VERSION for NVIDIA and invalidates the result when DRI_PRIME is set +but __GLX_VENDOR_LIBRARY_NAME is not "nvidia", so we fall back to +Switcheroo's device Name instead of a wrong renderer string. + +When spawning the helper, we should pass DISPLAY, WAYLAND_DISPLAY, and +XDG_RUNTIME_DIR from the running process instead of relying on full +inherited environment in all cases. + +Upstream: +- 098adb5a75c78177d2958eb47e30c889eb613470 ("about: fix multiple GPU name +display with NVIDIA GPU on Desktop PC", #3375) +- 82bd9c71931cea251f06835b5d9bec7164468788 ("about: fix NVIDIA GPU name +display if get_renderer_from_switcheroo failed", #3474) +- 2b111f062e27137db59af698d37f2f02645b2fe2 ("system-details-window: +Don't inherit env vars from parent") + +Adapted for GTK3 (gdk_window_create_gl_context). + +https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/3375 +https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/3474 + +Resolves: RHEL-111572 +--- + panels/info-overview/cc-info-overview-panel.c | 12 +++++++-- + .../gnome-control-center-print-renderer.c | 26 +++++++++++++++++++ + 2 files changed, 36 insertions(+), 2 deletions(-) + +diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c +index 8c5f92e64..ff9f64c15 100644 +--- a/panels/info-overview/cc-info-overview-panel.c ++++ b/panels/info-overview/cc-info-overview-panel.c +@@ -258,14 +258,22 @@ get_renderer_from_helper (const char **env) + g_auto(GStrv) envp = NULL; + g_autofree char *renderer = NULL; + g_autoptr(GError) error = NULL; ++ /* Environment variables that are needed to run the helper on X11 and Wayland */ ++ static const char *env_vars[] = { "DISPLAY", "WAYLAND_DISPLAY", "XDG_RUNTIME_DIR" }; ++ guint i; ++ ++ for (i = 0; i < G_N_ELEMENTS (env_vars); i++) ++ { ++ const char *value = g_getenv (env_vars[i]); ++ if (value) ++ envp = g_environ_setenv (envp, env_vars[i], value, TRUE); ++ } + + g_debug ("About to launch '%s'", argv[0]); + + if (env != NULL) + { +- guint i; + g_debug ("With environment:"); +- envp = g_get_environ (); + for (i = 0; env != NULL && env[i] != NULL; i = i + 2) + { + g_debug (" %s = %s", env[i], env[i+1]); +diff --git a/panels/info-overview/gnome-control-center-print-renderer.c b/panels/info-overview/gnome-control-center-print-renderer.c +index 3e83703c3..141601b46 100644 +--- a/panels/info-overview/gnome-control-center-print-renderer.c ++++ b/panels/info-overview/gnome-control-center-print-renderer.c +@@ -22,6 +22,8 @@ + * Matthias Clasen + */ + ++#include ++ + #include + #include + +@@ -31,6 +33,7 @@ get_gtk_gles_renderer (void) + GtkWidget *win; + GdkGLContext *context; + char *renderer = NULL; ++ g_autofree char *gl_version = NULL; + + win = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_realize (win); +@@ -39,9 +42,32 @@ get_gtk_gles_renderer (void) + return NULL; + gdk_gl_context_make_current (context); + renderer = g_strdup ((char *) glGetString (GL_RENDERER)); ++ gl_version = g_strdup ((char *) glGetString (GL_VERSION)); + gdk_gl_context_clear_current (); + g_object_unref (context); + ++ if (gl_version && strstr (gl_version, "NVIDIA") != NULL) ++ { ++ const char *glvnd_libname = g_getenv ("__GLX_VENDOR_LIBRARY_NAME"); ++ const char *dri_prime = g_getenv ("DRI_PRIME"); ++ if (g_strcmp0 (glvnd_libname, "nvidia") != 0 && dri_prime != NULL) ++ { ++ /* This helper is launched with parameters from a ++ * non-NVIDIA GPU, but is running using a NVIDIA ++ * library. As such, DRI_PRIME envvar from switcheroo ++ * does not actually take effect, and the GPU name is ++ * invalid. ++ * ++ * If there is no DRI_PRIME envvar neither, assuming ++ * we failed to use switcheroo to get GPU names, and ++ * this is called with basic envvars listed in ++ * cc-info-overview-panel.c:get_renderer_from_helper() ++ */ ++ g_free (renderer); ++ return NULL; ++ } ++ } ++ + return renderer; + } + +-- +2.52.0 + diff --git a/SOURCES/network-drop-WEP-support.patch b/SOURCES/network-drop-WEP-support.patch new file mode 100644 index 0000000..ad78410 --- /dev/null +++ b/SOURCES/network-drop-WEP-support.patch @@ -0,0 +1,492 @@ +From 5c3b92d3cee5ccf17645a0d963bfb0ad2cfed7c0 Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Tue, 31 Mar 2026 13:59:18 +0200 +Subject: [PATCH] network: Drop WEP support + +wpa_supplicant, libnma, NM, and friends have dropped WEP support. +WEP connections in GNOME Settings won't actually work anyway. + +See also +https://gitlab.gnome.org/GNOME/libnma/-/merge_requests/33 +https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1139 +https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1138 +https://gitlab.gnome.org/GNOME/network-manager-applet/-/merge_requests/112 +https://gitlab.gnome.org/GNOME/network-manager-applet/-/merge_requests/113 +https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1340 + +(cherry picked from commit 087222d73481692c532e88eeeed4f292edcc01cf) +--- + panels/network/cc-wifi-connection-row.c | 18 +-- + panels/network/cc-wifi-hotspot-dialog.c | 118 +++++------------- + panels/network/cc-wifi-panel.c | 15 +-- + .../connection-editor/ce-page-details.c | 8 -- + .../connection-editor/ce-page-security.c | 63 +--------- + panels/network/net-device-wifi.c | 9 +- + 6 files changed, 41 insertions(+), 190 deletions(-) + +diff --git a/panels/network/cc-wifi-connection-row.c b/panels/network/cc-wifi-connection-row.c +index cee92db61..17bd0440f 100644 +--- a/panels/network/cc-wifi-connection-row.c ++++ b/panels/network/cc-wifi-connection-row.c +@@ -56,7 +56,6 @@ typedef enum + { + NM_AP_SEC_UNKNOWN, + NM_AP_SEC_NONE, +- NM_AP_SEC_WEP, + NM_AP_SEC_WPA, + NM_AP_SEC_WPA2, + NM_AP_SEC_SAE, +@@ -87,12 +86,6 @@ get_access_point_security (NMAccessPoint *ap) + { + type = NM_AP_SEC_NONE; + } +- else if ((flags & NM_802_11_AP_FLAGS_PRIVACY) && +- wpa_flags == NM_802_11_AP_SEC_NONE && +- rsn_flags == NM_802_11_AP_SEC_NONE) +- { +- type = NM_AP_SEC_WEP; +- } + else if (!(flags & NM_802_11_AP_FLAGS_PRIVACY) && + wpa_flags != NM_802_11_AP_SEC_NONE && + rsn_flags != NM_802_11_AP_SEC_NONE) +@@ -135,10 +128,6 @@ get_connection_security (NMConnection *con) + + if (!key_mgmt) + return NM_AP_SEC_NONE; +- else if (g_str_equal (key_mgmt, "none")) +- return NM_AP_SEC_WEP; +- else if (g_str_equal (key_mgmt, "ieee8021x")) +- return NM_AP_SEC_WEP; + else if (g_str_equal (key_mgmt, "wpa-eap")) + return NM_AP_SEC_WPA2; + else if (strncmp (key_mgmt, "wpa-", 4) == 0) +@@ -262,12 +251,7 @@ update_ui (CcWifiConnectionRow *self) + const gchar *icon_path; + + gtk_widget_set_child_visible (GTK_WIDGET (self->encrypted_icon), TRUE); +- if (security == NM_AP_SEC_WEP) +- { +- icon_path = "/org/gnome/control-center/network/warning-small-symbolic.svg"; +- gtk_widget_set_tooltip_text (GTK_WIDGET (self->encrypted_icon), _("Insecure network (WEP)")); +- } +- else if (security == NM_AP_SEC_WPA) ++ if (security == NM_AP_SEC_WPA) + { + icon_path = "/org/gnome/control-center/network/lock-small-symbolic.svg"; + gtk_widget_set_tooltip_text (GTK_WIDGET (self->encrypted_icon), _("Secure network (WPA)")); +diff --git a/panels/network/cc-wifi-hotspot-dialog.c b/panels/network/cc-wifi-hotspot-dialog.c +index 4d1ef2478..136cb9dfe 100644 +--- a/panels/network/cc-wifi-hotspot-dialog.c ++++ b/panels/network/cc-wifi-hotspot-dialog.c +@@ -53,7 +53,6 @@ struct _CcWifiHotspotDialog + NMDeviceWifi *device; + NMConnection *connection; + gchar *host_name; +- gboolean wpa_supported; /* WPA/WPA2 supported */ + }; + + G_DEFINE_TYPE (CcWifiHotspotDialog, cc_wifi_hotspot_dialog, GTK_TYPE_MESSAGE_DIALOG) +@@ -79,28 +78,6 @@ get_random_wpa_key (void) + return key; + } + +-static gchar * +-get_random_wep_key (void) +-{ +- const gchar *hexdigits = "0123456789abcdef"; +- gchar *key; +- gint i; +- +- key = g_malloc (12 * sizeof (key)); +- +- /* generate a 10-digit hex WEP key */ +- for (i = 0; i < 10; i++) +- { +- gint digit; +- digit = g_random_int_range (0, 16); +- key[i] = hexdigits[digit]; +- } +- +- key[i] = '\0'; +- +- return key; +-} +- + static void + wifi_hotspot_dialog_update_main_label (CcWifiHotspotDialog *self) + { +@@ -167,10 +144,7 @@ get_secrets_cb (GObject *source_object, + } + + security_setting = nm_connection_get_setting_wireless_security (self->connection); +- if (self->wpa_supported) +- key = nm_setting_wireless_security_get_psk (security_setting); +- else +- key = nm_setting_wireless_security_get_wep_key (security_setting, 0); ++ key = nm_setting_wireless_security_get_psk (security_setting); + + if (key) + gtk_entry_set_text (self->password_entry, key); +@@ -227,16 +201,14 @@ hotspot_password_is_valid (CcWifiHotspotDialog *self, + if (!password || !*password) + return TRUE; + +- if (self->wpa_supported) +- return nm_utils_wpa_psk_valid (password); +- else +- return nm_utils_wep_key_valid (password, NM_WEP_KEY_TYPE_KEY); ++ return nm_utils_wpa_psk_valid (password); + } + + static void + hotspot_entry_changed_cb (CcWifiHotspotDialog *self) + { + const gchar *ssid, *password, *error_label; ++ g_autofree gchar *password_err_allocated = NULL; + gboolean valid_ssid, valid_password; + + g_assert (CC_IS_WIFI_HOTSPOT_DIALOG (self)); +@@ -262,7 +234,17 @@ hotspot_entry_changed_cb (CcWifiHotspotDialog *self) + } + else + { +- error_label = _("Must have a minimum of 8 characters"); ++ if (strlen (password) < 8) ++ error_label = _("Must have a minimum of 8 characters"); ++ else ++ { ++ /* 63 is the maximum WPA-PSK passphrase length (IEEE 802.11 / WPA spec). */ ++ guint max_chars = 63; ++ ++ password_err_allocated = g_strdup_printf (ngettext ("Must have a maximum of %d character", ++ "Must have a maximum of %d characters", max_chars), max_chars); ++ error_label = password_err_allocated; ++ } + widget_set_error (GTK_WIDGET(self->password_entry)); + } + +@@ -278,10 +260,7 @@ generate_password_clicked_cb (CcWifiHotspotDialog *self) + + g_assert (CC_IS_WIFI_HOTSPOT_DIALOG (self)); + +- if (self->wpa_supported) +- key = get_random_wpa_key (); +- else +- key = get_random_wep_key (); ++ key = get_random_wpa_key (); + + gtk_entry_set_text (self->password_entry, key); + } +@@ -316,10 +295,13 @@ static void + hotspot_update_wireless_security_settings (CcWifiHotspotDialog *self) + { + NMSettingWirelessSecurity *setting; +- const gchar *value, *key_type; ++ const gchar *value; ++ NMDeviceWifiCapabilities caps; + + g_assert (CC_IS_WIFI_HOTSPOT_DIALOG (self)); + ++ caps = nm_device_wifi_get_capabilities (self->device); ++ + if (nm_connection_get_setting_wireless_security (self->connection) == NULL) + nm_connection_add_setting (self->connection, nm_setting_wireless_security_new ()); + +@@ -329,51 +311,29 @@ hotspot_update_wireless_security_settings (CcWifiHotspotDialog *self) + nm_setting_wireless_security_clear_groups (setting); + value = gtk_entry_get_text (self->password_entry); + +- if (self->wpa_supported) +- key_type = "psk"; +- else +- key_type = "wep-key0"; +- +- if (self->wpa_supported) +- g_object_set (setting, "key-mgmt", "wpa-psk", NULL); +- else +- g_object_set (setting, +- "key-mgmt", "none", +- "wep-key-type", NM_WEP_KEY_TYPE_KEY, +- NULL); ++ g_object_set (setting, "key-mgmt", "wpa-psk", NULL); + + if (!value || !*value) + { + g_autofree gchar *key = NULL; + +- if (self->wpa_supported) +- key = get_random_wpa_key (); +- else +- key = get_random_wep_key (); +- +- g_object_set (setting, key_type, key, NULL); ++ key = get_random_wpa_key (); ++ g_object_set (setting, "psk", key, NULL); + } + else +- g_object_set (setting, key_type, value, NULL); ++ g_object_set (setting, "psk", value, NULL); + +- if (self->wpa_supported) ++ if (caps & NM_WIFI_DEVICE_CAP_RSN) + { +- NMDeviceWifiCapabilities caps; +- +- caps = nm_device_wifi_get_capabilities (self->device); +- +- if (caps & NM_WIFI_DEVICE_CAP_RSN) +- { +- nm_setting_wireless_security_add_proto (setting, "rsn"); +- nm_setting_wireless_security_add_pairwise (setting, "ccmp"); +- nm_setting_wireless_security_add_group (setting, "ccmp"); +- } +- else if (caps & NM_WIFI_DEVICE_CAP_WPA) +- { +- nm_setting_wireless_security_add_proto (setting, "wpa"); +- nm_setting_wireless_security_add_pairwise (setting, "tkip"); +- nm_setting_wireless_security_add_group (setting, "tkip"); +- } ++ nm_setting_wireless_security_add_proto (setting, "rsn"); ++ nm_setting_wireless_security_add_pairwise (setting, "ccmp"); ++ nm_setting_wireless_security_add_group (setting, "ccmp"); ++ } ++ else if (caps & NM_WIFI_DEVICE_CAP_WPA) ++ { ++ nm_setting_wireless_security_add_proto (setting, "wpa"); ++ nm_setting_wireless_security_add_pairwise (setting, "tkip"); ++ nm_setting_wireless_security_add_group (setting, "tkip"); + } + } + +@@ -510,18 +470,6 @@ cc_wifi_hotspot_dialog_set_device (CcWifiHotspotDialog *self, + + g_set_object (&self->device, device); + +- if (device) +- { +- NMDeviceWifiCapabilities caps; +- +- caps = nm_device_wifi_get_capabilities (device); +- self->wpa_supported = FALSE; +- +- if (caps & NM_WIFI_DEVICE_CAP_AP) +- if (caps & (NM_WIFI_DEVICE_CAP_RSN | NM_WIFI_DEVICE_CAP_WPA)) +- self->wpa_supported = TRUE; +- } +- + wifi_hotspot_dialog_update_main_label (self); + } + +diff --git a/panels/network/cc-wifi-panel.c b/panels/network/cc-wifi-panel.c +index 9ca6e6ee5..d2a20ea9a 100644 +--- a/panels/network/cc-wifi-panel.c ++++ b/panels/network/cc-wifi-panel.c +@@ -194,10 +194,6 @@ get_connection_security_type (NMConnection *c) + + key_mgmt = nm_setting_wireless_security_get_key_mgmt (setting); + +- /* No IEEE 802.1x */ +- if (g_strcmp0 (key_mgmt, "none") == 0) +- return "WEP"; +- + if (g_strcmp0 (key_mgmt, "wpa-none") == 0 || + g_strcmp0 (key_mgmt, "wpa-psk") == 0) + return "WPA"; +@@ -212,7 +208,6 @@ get_wifi_password (NMConnection *c) + g_autoptr(GVariant) secrets = NULL; + g_autoptr(GError) error = NULL; + const gchar *sec_type, *password; +- gint wep_index; + + g_assert (NM_IS_REMOTE_CONNECTION (c)); + +@@ -235,15 +230,7 @@ get_wifi_password (NMConnection *c) + return NULL; + } + +- if (g_str_equal (sec_type, "WEP")) +- { +- wep_index = nm_setting_wireless_security_get_wep_tx_keyidx (setting); +- password = nm_setting_wireless_security_get_wep_key (setting, wep_index); +- } +- else +- { +- password = nm_setting_wireless_security_get_psk (setting); +- } ++ password = nm_setting_wireless_security_get_psk (setting); + + return escape_string (password, FALSE); + } +diff --git a/panels/network/connection-editor/ce-page-details.c b/panels/network/connection-editor/ce-page-details.c +index 27433efe2..c068bcea0 100644 +--- a/panels/network/connection-editor/ce-page-details.c ++++ b/panels/network/connection-editor/ce-page-details.c +@@ -80,20 +80,12 @@ static gchar * + get_ap_security_string (NMAccessPoint *ap) + { + NM80211ApSecurityFlags wpa_flags, rsn_flags; +- NM80211ApFlags flags; + GString *str; + +- flags = nm_access_point_get_flags (ap); + wpa_flags = nm_access_point_get_wpa_flags (ap); + rsn_flags = nm_access_point_get_rsn_flags (ap); + + str = g_string_new (""); +- if ((flags & NM_802_11_AP_FLAGS_PRIVACY) && +- (wpa_flags == NM_802_11_AP_SEC_NONE) && +- (rsn_flags == NM_802_11_AP_SEC_NONE)) { +- /* TRANSLATORS: this WEP WiFi security */ +- g_string_append_printf (str, "%s, ", _("WEP")); +- } + if (wpa_flags != NM_802_11_AP_SEC_NONE) { + /* TRANSLATORS: this WPA WiFi security */ + g_string_append_printf (str, "%s, ", _("WPA")); +diff --git a/panels/network/connection-editor/ce-page-security.c b/panels/network/connection-editor/ce-page-security.c +index 696971579..0f8bfc865 100644 +--- a/panels/network/connection-editor/ce-page-security.c ++++ b/panels/network/connection-editor/ce-page-security.c +@@ -28,10 +28,8 @@ + #include "ce-page.h" + #include "ce-page-security.h" + #include "wireless-security.h" +-#include "ws-dynamic-wep.h" + #include "ws-leap.h" + #include "ws-sae.h" +-#include "ws-wep-key.h" + #include "ws-wpa-eap.h" + #include "ws-wpa-psk.h" + +@@ -82,14 +80,10 @@ get_default_type_for_security (NMSettingWirelessSecurity *sec) + key_mgmt = nm_setting_wireless_security_get_key_mgmt (sec); + auth_alg = nm_setting_wireless_security_get_auth_alg (sec); + +- /* No IEEE 802.1x */ +- if (!strcmp (key_mgmt, "none")) +- return NMU_SEC_STATIC_WEP; +- + if (!strcmp (key_mgmt, "ieee8021x")) { + if (auth_alg && !strcmp (auth_alg, "leap")) + return NMU_SEC_LEAP; +- return NMU_SEC_DYNAMIC_WEP; ++ return NMU_SEC_INVALID; + } + + #if NM_CHECK_VERSION(1,24,0) +@@ -245,9 +239,7 @@ finish_setup (CEPageSecurity *self) + + self->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + +- dev_caps = NM_WIFI_DEVICE_CAP_CIPHER_WEP40 +- | NM_WIFI_DEVICE_CAP_CIPHER_WEP104 +- | NM_WIFI_DEVICE_CAP_CIPHER_TKIP ++ dev_caps = NM_WIFI_DEVICE_CAP_CIPHER_TKIP + | NM_WIFI_DEVICE_CAP_CIPHER_CCMP + | NM_WIFI_DEVICE_CAP_WPA + | NM_WIFI_DEVICE_CAP_RSN; +@@ -285,38 +277,6 @@ finish_setup (CEPageSecurity *self) + } + #endif + +- if (nm_utils_security_valid (NMU_SEC_STATIC_WEP, dev_caps, FALSE, is_adhoc, 0, 0, 0)) { +- WirelessSecurityWEPKey *ws_wep; +- NMWepKeyType wep_type = NM_WEP_KEY_TYPE_KEY; +- +- if (default_type == NMU_SEC_STATIC_WEP) { +- sws = nm_connection_get_setting_wireless_security (self->connection); +- if (sws) +- wep_type = nm_setting_wireless_security_get_wep_key_type (sws); +- if (wep_type == NM_WEP_KEY_TYPE_UNKNOWN) +- wep_type = NM_WEP_KEY_TYPE_KEY; +- } +- +- ws_wep = ws_wep_key_new (self->connection, NM_WEP_KEY_TYPE_KEY); +- if (ws_wep) { +- add_security_item (self, WIRELESS_SECURITY (ws_wep), sec_model, +- &iter, _("WEP 40/128-bit Key (Hex or ASCII)"), +- TRUE); +- if ((active < 0) && (default_type == NMU_SEC_STATIC_WEP) && (wep_type == NM_WEP_KEY_TYPE_KEY)) +- active = item; +- item++; +- } +- +- ws_wep = ws_wep_key_new (self->connection, NM_WEP_KEY_TYPE_PASSPHRASE); +- if (ws_wep) { +- add_security_item (self, WIRELESS_SECURITY (ws_wep), sec_model, +- &iter, _("WEP 128-bit Passphrase"), TRUE); +- if ((active < 0) && (default_type == NMU_SEC_STATIC_WEP) && (wep_type == NM_WEP_KEY_TYPE_PASSPHRASE)) +- active = item; +- item++; +- } +- } +- + if (nm_utils_security_valid (NMU_SEC_LEAP, dev_caps, FALSE, is_adhoc, 0, 0, 0)) { + WirelessSecurityLEAP *ws_leap; + +@@ -330,19 +290,6 @@ finish_setup (CEPageSecurity *self) + } + } + +- if (nm_utils_security_valid (NMU_SEC_DYNAMIC_WEP, dev_caps, FALSE, is_adhoc, 0, 0, 0)) { +- WirelessSecurityDynamicWEP *ws_dynamic_wep; +- +- ws_dynamic_wep = ws_dynamic_wep_new (self->connection); +- if (ws_dynamic_wep) { +- add_security_item (self, WIRELESS_SECURITY (ws_dynamic_wep), sec_model, +- &iter, _("Dynamic WEP (802.1x)"), FALSE); +- if ((active < 0) && (default_type == NMU_SEC_DYNAMIC_WEP)) +- active = item; +- item++; +- } +- } +- + if (nm_utils_security_valid (NMU_SEC_WPA_PSK, dev_caps, FALSE, is_adhoc, 0, 0, 0) || + nm_utils_security_valid (NMU_SEC_WPA2_PSK, dev_caps, FALSE, is_adhoc, 0, 0, 0)) { + WirelessSecurityWPAPSK *ws_wpa_psk; +@@ -533,8 +480,7 @@ ce_page_security_new (NMConnection *connection) + if (sws) + default_type = get_default_type_for_security (sws); + +- if (default_type == NMU_SEC_STATIC_WEP || +- default_type == NMU_SEC_LEAP || ++ if (default_type == NMU_SEC_LEAP || + default_type == NMU_SEC_WPA_PSK || + #if NM_CHECK_VERSION(1,20,6) + default_type == NMU_SEC_SAE || +@@ -546,8 +492,7 @@ ce_page_security_new (NMConnection *connection) + self->security_setting = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME; + } + +- if (default_type == NMU_SEC_DYNAMIC_WEP || +- default_type == NMU_SEC_WPA_ENTERPRISE || ++ if (default_type == NMU_SEC_WPA_ENTERPRISE || + default_type == NMU_SEC_WPA2_ENTERPRISE) { + self->security_setting = NM_SETTING_802_1X_SETTING_NAME; + } +diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c +index 69fe2e122..7c0174da4 100644 +--- a/panels/network/net-device-wifi.c ++++ b/panels/network/net-device-wifi.c +@@ -218,17 +218,12 @@ device_get_hotspot_security_details (NetDeviceWifi *self, + tmp_security = C_("Wifi security", "None"); + + /* Key management values: +- * "none" = WEP + * "wpa-none" = WPAv1 Ad-Hoc mode (not supported in NM >= 0.9.4) + * "wpa-psk" = WPAv2 Ad-Hoc mode (eg IBSS RSN) and AP-mode WPA v1 and v2 + */ + key_mgmt = nm_setting_wireless_security_get_key_mgmt (sws); +- if (strcmp (key_mgmt, "none") == 0) { +- tmp_secret = nm_setting_wireless_security_get_wep_key (sws, 0); +- tmp_security = _("WEP"); +- } +- else if (strcmp (key_mgmt, "wpa-none") == 0 || +- strcmp (key_mgmt, "wpa-psk") == 0) { ++ if (strcmp (key_mgmt, "wpa-none") == 0 || ++ strcmp (key_mgmt, "wpa-psk") == 0) { + tmp_secret = nm_setting_wireless_security_get_psk (sws); + tmp_security = _("WPA"); + } else { +-- +2.52.0 + diff --git a/SOURCES/network-set-iface-name-explicitly.patch b/SOURCES/network-set-iface-name-explicitly.patch new file mode 100644 index 0000000..77e9115 --- /dev/null +++ b/SOURCES/network-set-iface-name-explicitly.patch @@ -0,0 +1,45 @@ +From 63a68ddea03b5e228560c947fb4574fa42156ff1 Mon Sep 17 00:00:00 2001 +From: Luciano da Silva Ribas +Date: Thu, 22 Sep 2022 23:00:24 -0300 +Subject: [PATCH] network: Fixed Network profiles shown on wrong device + +Added missing interface name during network profile creation. + +Fixes #353 + +Fixed issues from code review + +(cherry picked from commit ee53bfd8b6bbbd018fdd7a2b1ea33e5a44a1b43b) +and +(cherry picked from commit 3182b7019fa7f59a68b51835117cd60e78e6815a) +--- + panels/network/net-device-ethernet.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/panels/network/net-device-ethernet.c b/panels/network/net-device-ethernet.c +index f7cd6ae6b..856595b1d 100644 +--- a/panels/network/net-device-ethernet.c ++++ b/panels/network/net-device-ethernet.c +@@ -404,6 +404,7 @@ add_profile_button_clicked_cb (NetDeviceEthernet *self) + g_autofree gchar *id = NULL; + NetConnectionEditor *editor; + const GPtrArray *connections; ++ const char *iface; + + connection = nm_simple_connection_new (); + sc = NM_SETTING_CONNECTION (nm_setting_connection_new ()); +@@ -421,6 +422,11 @@ add_profile_button_clicked_cb (NetDeviceEthernet *self) + NM_SETTING_CONNECTION_AUTOCONNECT, TRUE, + NULL); + ++ iface = nm_device_get_iface (self->device); ++ g_object_set (sc, ++ NM_SETTING_CONNECTION_INTERFACE_NAME, iface, ++ NULL); ++ + nm_connection_add_setting (connection, nm_setting_wired_new ()); + + editor = net_connection_editor_new (connection, self->device, NULL, self->client); +-- +2.34.1 + diff --git a/SOURCES/region-set-system-wide-locale-from-user.patch b/SOURCES/region-set-system-wide-locale-from-user.patch new file mode 100644 index 0000000..482cd59 --- /dev/null +++ b/SOURCES/region-set-system-wide-locale-from-user.patch @@ -0,0 +1,78 @@ +From bce5fcfafabc3cad27a450b01b262fb211f9b4fb Mon Sep 17 00:00:00 2001 +From: Chris Williams +Date: Tue, 21 Jan 2025 15:02:07 -0500 +Subject: [PATCH] region: Always set all variables when setting system locale + +localed's SetLocale method only sets the specified locale variables, so +when self->system_region is set to NULL, we must explicitly set each +variable to the configured system language to reset the system region +and not leave the previous values. + +Without this change, when the login section is visible, changing the +system language doesn't reset the system region, which is inconsistent +with the user section. More significantly, in the login_auto_apply case, +setting the user language resets the user region but not the system +region. The user needs to reselect the region from the Formats chooser +in order to update the system region. + +(cherry picked from commit abdecd6ede98b8249f8819783f1b663c7e9286cf) +--- + panels/region/cc-region-panel.c | 37 ++++++++++++++++++--------------- + 1 file changed, 20 insertions(+), 17 deletions(-) + +diff --git a/panels/region/cc-region-panel.c b/panels/region/cc-region-panel.c +index 3c8f03d34..7732a2f68 100644 +--- a/panels/region/cc-region-panel.c ++++ b/panels/region/cc-region-panel.c +@@ -622,28 +622,31 @@ set_localed_locale (CcRegionPanel *self) + { + g_autoptr(GVariantBuilder) b = NULL; + g_autofree gchar *lang_value = NULL; ++ g_autofree gchar *time_value = NULL; ++ g_autofree gchar *numeric_value = NULL; ++ g_autofree gchar *monetary_value = NULL; ++ g_autofree gchar *measurement_value = NULL; ++ g_autofree gchar *paper_value = NULL; ++ const gchar *region = self->system_region; ++ ++ if (region == NULL) ++ region = self->system_language; + + b = g_variant_builder_new (G_VARIANT_TYPE ("as")); + lang_value = g_strconcat ("LANG=", self->system_language, NULL); + g_variant_builder_add (b, "s", lang_value); + +- if (self->system_region != NULL) { +- g_autofree gchar *time_value = NULL; +- g_autofree gchar *numeric_value = NULL; +- g_autofree gchar *monetary_value = NULL; +- g_autofree gchar *measurement_value = NULL; +- g_autofree gchar *paper_value = NULL; +- time_value = g_strconcat ("LC_TIME=", self->system_region, NULL); +- g_variant_builder_add (b, "s", time_value); +- numeric_value = g_strconcat ("LC_NUMERIC=", self->system_region, NULL); +- g_variant_builder_add (b, "s", numeric_value); +- monetary_value = g_strconcat ("LC_MONETARY=", self->system_region, NULL); +- g_variant_builder_add (b, "s", monetary_value); +- measurement_value = g_strconcat ("LC_MEASUREMENT=", self->system_region, NULL); +- g_variant_builder_add (b, "s", measurement_value); +- paper_value = g_strconcat ("LC_PAPER=", self->system_region, NULL); +- g_variant_builder_add (b, "s", paper_value); +- } ++ time_value = g_strconcat ("LC_TIME=", region, NULL); ++ g_variant_builder_add (b, "s", time_value); ++ numeric_value = g_strconcat ("LC_NUMERIC=", region, NULL); ++ g_variant_builder_add (b, "s", numeric_value); ++ monetary_value = g_strconcat ("LC_MONETARY=", region, NULL); ++ g_variant_builder_add (b, "s", monetary_value); ++ measurement_value = g_strconcat ("LC_MEASUREMENT=", region, NULL); ++ g_variant_builder_add (b, "s", measurement_value); ++ paper_value = g_strconcat ("LC_PAPER=", region, NULL); ++ g_variant_builder_add (b, "s", paper_value); ++ + g_dbus_proxy_call (self->localed, + "SetLocale", + g_variant_new ("(asb)", b, TRUE), +-- +2.52.0 + diff --git a/SOURCES/users-allow-fingerprint-auth-for-enterprise-users.patch b/SOURCES/users-allow-fingerprint-auth-for-enterprise-users.patch new file mode 100644 index 0000000..1a88823 --- /dev/null +++ b/SOURCES/users-allow-fingerprint-auth-for-enterprise-users.patch @@ -0,0 +1,43 @@ +From 57b9f2ec29a5088a8b3dc6f81a28843f79045a35 Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Wed, 3 Jun 2026 10:24:12 +0200 +Subject: [PATCH] users: Allow fingerprint management for remote users + +fprtind seems to work just fine for enterprise login too. +--- + panels/user-accounts/cc-fingerprint-manager.c | 3 +-- + panels/user-accounts/cc-user-panel.c | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/panels/user-accounts/cc-fingerprint-manager.c b/panels/user-accounts/cc-fingerprint-manager.c +index 07a50e7b9..781cf9690 100644 +--- a/panels/user-accounts/cc-fingerprint-manager.c ++++ b/panels/user-accounts/cc-fingerprint-manager.c +@@ -554,8 +554,7 @@ cc_fingerprint_manager_update_state (CcFingerprintManager *self, + + g_return_if_fail (priv->current_task == NULL); + +- if (act_user_get_uid (priv->user) != getuid () || +- !act_user_is_local_account (priv->user)) ++ if (act_user_get_uid (priv->user) != getuid ()) + { + set_state (self, CC_FINGERPRINT_STATE_NONE); + return; +diff --git a/panels/user-accounts/cc-user-panel.c b/panels/user-accounts/cc-user-panel.c +index cf3b0e24a..a542ef134 100644 +--- a/panels/user-accounts/cc-user-panel.c ++++ b/panels/user-accounts/cc-user-panel.c +@@ -893,9 +893,8 @@ show_user (ActUser *user, CcUserPanel *self) + + gtk_label_set_label (self->language_button_label, name); + +- /* Fingerprint: show when self, local, enabled, and possible */ ++ /* Fingerprint: show when self, enabled, and possible */ + show = (act_user_get_uid (user) == getuid() && +- act_user_is_local_account (user) && + (self->login_screen_settings && + g_settings_get_boolean (self->login_screen_settings, + "enable-fingerprint-authentication"))); +-- +2.34.1 + diff --git a/SOURCES/wifi-allow-passwd-reveal-for-ws-sae.patch b/SOURCES/wifi-allow-passwd-reveal-for-ws-sae.patch new file mode 100644 index 0000000..5f026b6 --- /dev/null +++ b/SOURCES/wifi-allow-passwd-reveal-for-ws-sae.patch @@ -0,0 +1,28 @@ +From 12985de631047866deaab04a70333689dac11e59 Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Fri, 10 Apr 2026 09:56:51 +0200 +Subject: [PATCH] Reveal password for WS-SAE connections + +https://redhat.atlassian.net/browse/RHEL-4232 +--- + panels/network/wireless-security/ws-sae.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/panels/network/wireless-security/ws-sae.c b/panels/network/wireless-security/ws-sae.c +index 89017ad6a..cfcb0ca4b 100644 +--- a/panels/network/wireless-security/ws-sae.c ++++ b/panels/network/wireless-security/ws-sae.c +@@ -212,8 +212,8 @@ ws_sae_new (NMConnection *connection) + (HelperSecretFunc) nm_setting_wireless_security_get_psk); + } + +- g_signal_connect (self->show_password_check, "toggled", +- G_CALLBACK (show_toggled_cb), self); ++ g_signal_connect_swapped (self->show_password_check, "toggled", ++ G_CALLBACK (show_toggled_cb), self); + + /* Hide WPA/RSN for now since this can be autodetected by NM and the + * supplicant when connecting to the AP. +-- +2.52.0 + diff --git a/SPECS/gnome-control-center.spec b/SPECS/gnome-control-center.spec index 12f22b7..5b5094f 100644 --- a/SPECS/gnome-control-center.spec +++ b/SPECS/gnome-control-center.spec @@ -14,7 +14,7 @@ Name: gnome-control-center Version: 40.0 -Release: 44%{?dist} +Release: 51%{?dist} Summary: Utilities to configure the GNOME desktop License: GPLv2+ and CC-BY-SA @@ -89,6 +89,27 @@ Patch26: subscription-manager-translations.patch # https://issues.redhat.com/browse/RHEL-4088 Patch27: 0001-calibrator-Avoid-clearing-background.patch +# https://issues.redhat.com/browse/RHEL-135180 +Patch28: region-set-system-wide-locale-from-user.patch + +# https://redhat.atlassian.net/browse/RHEL-111572 +Patch29: info-overview-backport-nvidia-card-name-fixes.patch + +# https://redhat.atlassian.net/browse/RHEL-166751 +Patch30: network-drop-WEP-support.patch + +# https://redhat.atlassian.net/browse/RHEL-4232 +Patch31: wifi-allow-passwd-reveal-for-ws-sae.patch + +# https://redhat.atlassian.net/browse/RHEL-173845 +Patch32: users-allow-fingerprint-auth-for-enterprise-users.patch + +# https://redhat.atlassian.net/browse/RHEL-146566 +Patch33: 0001-wacom-Change-button-order-for-3-button-styli.patch + +# https://issues.redhat.com/browse/RHEL-121793 +Patch34: network-set-iface-name-explicitly.patch + BuildRequires: chrpath BuildRequires: cups-devel BuildRequires: desktop-file-utils @@ -278,6 +299,34 @@ chrpath --delete $RPM_BUILD_ROOT%{_bindir}/gnome-control-center %dir %{_datadir}/gnome/wm-properties %changelog +* Mon Aug 10 2026 Felipe Borges - 40.0-51 +- Set network interface names explicitly + Resolves: RHEL-121793 + +* Wed May 13 2026 Carlos Garnacho - 40.0-50 +- Change button order for 3-button styli + Resolves: RHEL-146566 + +* Wed Jun 03 2026 Felipe Borges - 40.0-49 +- Allow fingerprint management for enterprise users + Resolves: RHEL-173845 + +* Mon Apr 27 2026 Felipe Borges - 40.0.48 +- Fix Wi-Fi password reveal not working for WS-SAE security + Resolves: RHEL-4232 + +* Mon Apr 20 2026 Felipe Borges - 40.0-47 +- Drop WEP support + Resolves: RHEL-166751 + +* Tue Apr 14 2026 Felipe Borges - 40.0-46 +- Backport NVIDIA graphics card display name fixes + Resolves: RHEL-111572 + +* Tue Feb 10 2026 Felipe Borges - 40.0-45 +- Fix system locale not getting set from within user settings + Resolves: RHEL-135180 + * Mon Dec 22 2025 Carlos Garnacho - 40.0-44 - Fix graphical artifact in Wacom calibration UI Resolves: RHEL-4088