[gnome-builder/wip/chergert/deviced] device-manager: remove devices from device menu



commit 640cb2f35f7b596faa192e7bd64571487e0b3d9f
Author: Christian Hergert <chergert redhat com>
Date:   Fri Feb 23 18:53:53 2018 -0800

    device-manager: remove devices from device menu
    
    When we learn a device is removed, we need to remove it from the menu
    which is connected to our device button.

 src/libide/devices/ide-device-manager.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)
---
diff --git a/src/libide/devices/ide-device-manager.c b/src/libide/devices/ide-device-manager.c
index 07b99e518..dc0bc6175 100644
--- a/src/libide/devices/ide-device-manager.c
+++ b/src/libide/devices/ide-device-manager.c
@@ -113,12 +113,34 @@ ide_device_manager_provider_device_removed_cb (IdeDeviceManager  *self,
                                                IdeDevice         *device,
                                                IdeDeviceProvider *provider)
 {
+  const gchar *device_id;
+  GMenu *menu;
+  guint n_items;
+
   IDE_ENTRY;
 
   g_assert (IDE_IS_DEVICE_MANAGER (self));
   g_assert (IDE_IS_DEVICE (device));
   g_assert (IDE_IS_DEVICE_PROVIDER (provider));
 
+  device_id = ide_device_get_id (device);
+
+  menu = dzl_application_get_menu_by_id (DZL_APPLICATION (IDE_APPLICATION_DEFAULT),
+                                         "ide-device-manager-menu-section");
+  n_items = g_menu_model_get_n_items (G_MENU_MODEL (menu));
+
+  for (guint i = 0; i < n_items; i++)
+    {
+      g_autofree gchar *id = NULL;
+
+      if (g_menu_model_get_item_attribute (G_MENU_MODEL (menu), i, "id", "s", &id) &&
+          g_strcmp0 (id, device_id) == 0)
+        {
+          g_menu_remove (menu, i);
+          break;
+        }
+    }
+
   for (guint i = 0; i < self->devices->len; i++)
     {
       IdeDevice *element = g_ptr_array_index (self->devices, i);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]