void Popup::onDeviceRemoved(QString const & udi) { MenuDiskItem* item = nullptr; const int size = layout()->count() - 1; for (int i = size; 0 <= i; --i) { QWidget *w = layout()->itemAt(i)->widget(); if (w == mPlaceholder) continue; MenuDiskItem *it = static_cast<MenuDiskItem *>(w); if (udi == it->deviceUdi()) { item = it; break; } } if (item != nullptr) { layout()->removeWidget(item); item->deleteLater(); --mDisplayCount; if (mDisplayCount == 0) mPlaceholder->show(); } }
void MountButton::onDbusDeviceChangesMessage(QDBusObjectPath device) { QString path = device.path(); QDBusInterface iface("org.freedesktop.UDisks", path, "org.freedesktop.UDisks.Device", QDBusConnection::systemBus()); //qDebug() << "Device name: " << iface.property("DeviceFile"); //qDebug() << "Is mounted: " << iface.property("DeviceIsMounted"); QString dev_name = iface.property("DeviceFile").toString(); bool is_mounted = iface.property("DeviceIsMounted").toBool(); StorageItem *item = _sm.getDevice(dev_name); if (item == NULL) { return; } bool old_state = item->isMounted(); item->setMountStatus(is_mounted); MenuDiskItem *mdi = mPopup.itemByDevice(dev_name); if (mdi) { mdi->setMountStatus(is_mounted); } if (item->isMounted() != old_state) { if (item->isMounted()) { switch (mDevAction) { case DevActionInfo: showMessage(tr("The device <b><nobr>\"%1\"</nobr></b> is mounted to %2").arg(dev_name).arg(item->getMountPoint())); break; case DevActionMenu: showMenu(); break; default: break; } } else { if (mDevAction == DevActionInfo) showMessage(tr("The device <b><nobr>\"%1\"</nobr></b> is unmounted<br>\nNow you can eject USB Flash or CD/DVD Disk.").arg(dev_name)); } } }
void Popup::deleteItem(const DiskInfo &info) { MenuDiskItem* item = itemByDevice(info.device_name); if (item) { mCount--; layout()->removeWidget(item); item->deleteLater(); } if (!mCount) hide(); }
void Popup::addItem(Solid::Device device) { MenuDiskItem *item = new MenuDiskItem(device, this); connect(item, &MenuDiskItem::invalid, this, &Popup::onDeviceRemoved); item->setVisible(true); layout()->addWidget(item); mDisplayCount++; if (mDisplayCount != 0) mPlaceholder->hide(); if (isVisible()) realign(); }