[gnome-control-center/wip/hughsie/firmware-security-hide-vm: 6/6] firmware-security: Hide the panel when using a VM
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/wip/hughsie/firmware-security-hide-vm: 6/6] firmware-security: Hide the panel when using a VM
- Date: Thu, 21 Jul 2022 12:21:21 +0000 (UTC)
commit e11929e0c151cf87e80db71bc804b7d9a5af2dcb
Author: Richard Hughes <richard hughsie com>
Date: Tue Jul 19 17:40:49 2022 +0100
firmware-security: Hide the panel when using a VM
Fixes https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1972
.../firmware-security/cc-firmware-security-panel.c | 60 ++++++++++++++++++++++
.../firmware-security/cc-firmware-security-panel.h | 2 +
shell/cc-panel-loader.c | 3 +-
3 files changed, 64 insertions(+), 1 deletion(-)
---
diff --git a/panels/firmware-security/cc-firmware-security-panel.c
b/panels/firmware-security/cc-firmware-security-panel.c
index fa6facda3..d67933207 100644
--- a/panels/firmware-security/cc-firmware-security-panel.c
+++ b/panels/firmware-security/cc-firmware-security-panel.c
@@ -20,6 +20,8 @@
* SPDX-License-Identifier: GPL-2.0-or-later
*/
+#include "shell/cc-application.h"
+
#include "cc-firmware-security-panel.h"
#include "cc-firmware-security-resources.h"
#include "cc-firmware-security-dialog.h"
@@ -321,7 +323,11 @@ on_bus_done (GObject *source,
val = g_dbus_proxy_call_finish (G_DBUS_PROXY (source), res, &error);
if (val == NULL)
{
+ CcApplication *application = CC_APPLICATION (g_application_get_default ());
g_warning ("failed to get Security Attribute: %s", error->message);
+ cc_shell_model_set_panel_visibility (cc_application_get_model (application),
+ "firmware-security",
+ CC_PANEL_HIDDEN);
set_secure_boot_button_view (self);
return;
}
@@ -513,6 +519,60 @@ on_properties_bus_ready_cb (GObject *source_object,
self);
}
+static void
+update_panel_visibility (const gchar *chassis_type)
+{
+ CcApplication *application;
+ gboolean visible = TRUE;
+
+ /* there's no point showing this */
+ if (g_strcmp0 (chassis_type, "vm") == 0)
+ visible = FALSE;
+ application = CC_APPLICATION (g_application_get_default ());
+ cc_shell_model_set_panel_visibility (cc_application_get_model (application),
+ "firmware-security",
+ visible ? CC_PANEL_VISIBLE : CC_PANEL_HIDDEN);
+ g_debug ("Firmware Security panel visible: %s as chassis was %s",
+ visible ? "yes" : "no",
+ chassis_type);
+}
+
+void
+cc_firmware_security_panel_static_init_func (void)
+{
+ g_autoptr(GDBusConnection) connection = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GVariant) inner = NULL;
+ g_autoptr(GVariant) variant = NULL;
+
+ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (!connection)
+ {
+ g_warning ("system bus not available: %s", error->message);
+ return;
+ }
+ variant = g_dbus_connection_call_sync (connection,
+ "org.freedesktop.hostname1",
+ "/org/freedesktop/hostname1",
+ "org.freedesktop.DBus.Properties",
+ "Get",
+ g_variant_new ("(ss)",
+ "org.freedesktop.hostname1",
+ "Chassis"),
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+ if (!variant)
+ {
+ g_warning ("Cannot get org.freedesktop.hostname1.Chassis: %s", error->message);
+ return;
+ }
+ g_variant_get (variant, "(v)", &inner);
+ update_panel_visibility (g_variant_get_string (inner, NULL));
+}
+
static void
cc_firmware_security_panel_finalize (GObject *object)
{
diff --git a/panels/firmware-security/cc-firmware-security-panel.h
b/panels/firmware-security/cc-firmware-security-panel.h
index a4afb5dc3..1c7a02426 100644
--- a/panels/firmware-security/cc-firmware-security-panel.h
+++ b/panels/firmware-security/cc-firmware-security-panel.h
@@ -29,4 +29,6 @@ G_BEGIN_DECLS
#define CC_TYPE_FIRMWARE_SECURITY_PANEL (cc_firmware_security_panel_get_type ())
G_DECLARE_FINAL_TYPE (CcfirmwareSecurityPanel, cc_firmware_security_panel, CC, FIRMWARE_SECURITY_PANEL,
CcPanel)
+void cc_firmware_security_panel_static_init_func (void);
+
G_END_DECLS
diff --git a/shell/cc-panel-loader.c b/shell/cc-panel-loader.c
index 57b2d5bed..5fff89ba6 100644
--- a/shell/cc-panel-loader.c
+++ b/shell/cc-panel-loader.c
@@ -87,6 +87,7 @@ extern void cc_wacom_panel_static_init_func (void);
#ifdef BUILD_WWAN
extern void cc_wwan_panel_static_init_func (void);
#endif /* BUILD_WWAN */
+extern void cc_firmware_security_panel_static_init_func (void);
#define PANEL_TYPE(name, get_type, init_func) { name, get_type, init_func }
@@ -112,7 +113,7 @@ static CcPanelLoaderVtable default_panels[] =
PANEL_TYPE("info-overview", cc_info_overview_panel_get_type, NULL),
PANEL_TYPE("keyboard", cc_keyboard_panel_get_type, NULL),
PANEL_TYPE("location", cc_location_panel_get_type, NULL),
- PANEL_TYPE("firmware-security",cc_firmware_security_panel_get_type, NULL),
+ PANEL_TYPE("firmware-security",cc_firmware_security_panel_get_type,
cc_firmware_security_panel_static_init_func),
PANEL_TYPE("lock", cc_lock_panel_get_type, NULL),
PANEL_TYPE("microphone", cc_microphone_panel_get_type, NULL),
PANEL_TYPE("mouse", cc_mouse_panel_get_type, NULL),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]