Add config option to select UPower device based on device model.
This commit is contained in:
parent
912d0e83f3
commit
6413f25b8d
|
@ -45,6 +45,7 @@ class UPower final : public AIconLabel {
|
||||||
|
|
||||||
// Technical variables
|
// Technical variables
|
||||||
std::string nativePath_;
|
std::string nativePath_;
|
||||||
|
std::string model_;
|
||||||
std::string lastStatus_;
|
std::string lastStatus_;
|
||||||
Glib::ustring label_markup_;
|
Glib::ustring label_markup_;
|
||||||
std::mutex mutex_;
|
std::mutex mutex_;
|
||||||
|
|
|
@ -17,6 +17,12 @@ compatible devices in the tooltip.
|
||||||
The battery to monitor. Refer to the https://upower.freedesktop.org/docs/UpDevice.html#UpDevice--native-path ++
|
The battery to monitor. Refer to the https://upower.freedesktop.org/docs/UpDevice.html#UpDevice--native-path ++
|
||||||
Can be obtained using `upower --dump`
|
Can be obtained using `upower --dump`
|
||||||
|
|
||||||
|
*model*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: ++
|
||||||
|
The battery to monitor, based on the model. (this option is ignored if *native-path* is given). ++
|
||||||
|
Can be obtained using `upower --dump`
|
||||||
|
|
||||||
*icon-size*: ++
|
*icon-size*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
default: 20 ++
|
default: 20 ++
|
||||||
|
|
|
@ -29,6 +29,8 @@ UPower::UPower(const std::string &id, const Json::Value &config)
|
||||||
if (!showIcon_) box_.remove(image_);
|
if (!showIcon_) box_.remove(image_);
|
||||||
// Device user wants
|
// Device user wants
|
||||||
if (config_["native-path"].isString()) nativePath_ = config_["native-path"].asString();
|
if (config_["native-path"].isString()) nativePath_ = config_["native-path"].asString();
|
||||||
|
// Device model user wants
|
||||||
|
if (config_["model"].isString()) model_ = config_["model"].asString();
|
||||||
|
|
||||||
// Hide If Empty
|
// Hide If Empty
|
||||||
if (config_["hide-if-empty"].isBool()) hideIfEmpty_ = config_["hide-if-empty"].asBool();
|
if (config_["hide-if-empty"].isBool()) hideIfEmpty_ = config_["hide-if-empty"].asBool();
|
||||||
|
@ -356,13 +358,13 @@ void UPower::resetDevices() {
|
||||||
void UPower::setDisplayDevice() {
|
void UPower::setDisplayDevice() {
|
||||||
std::lock_guard<std::mutex> guard{mutex_};
|
std::lock_guard<std::mutex> guard{mutex_};
|
||||||
|
|
||||||
if (nativePath_.empty()) {
|
if (nativePath_.empty() && model_.empty()) {
|
||||||
// Unref current upDevice
|
// Unref current upDevice
|
||||||
if (upDevice_.upDevice != NULL) g_object_unref(upDevice_.upDevice);
|
if (upDevice_.upDevice != NULL) g_object_unref(upDevice_.upDevice);
|
||||||
|
|
||||||
upDevice_.upDevice = up_client_get_display_device(upClient_);
|
upDevice_.upDevice = up_client_get_display_device(upClient_);
|
||||||
getUpDeviceInfo(upDevice_);
|
getUpDeviceInfo(upDevice_);
|
||||||
} else {
|
} else if (!nativePath_.empty()) {
|
||||||
g_ptr_array_foreach(
|
g_ptr_array_foreach(
|
||||||
up_client_get_devices2(upClient_),
|
up_client_get_devices2(upClient_),
|
||||||
[](gpointer data, gpointer user_data) {
|
[](gpointer data, gpointer user_data) {
|
||||||
|
@ -379,6 +381,23 @@ void UPower::setDisplayDevice() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
this);
|
this);
|
||||||
|
} else { // if `nativePath_` is empty, but `model_` is not.
|
||||||
|
g_ptr_array_foreach(
|
||||||
|
up_client_get_devices2(upClient_),
|
||||||
|
[](gpointer data, gpointer user_data) {
|
||||||
|
upDevice_output upDevice;
|
||||||
|
auto thisPtr {static_cast<UPower *>(user_data)};
|
||||||
|
upDevice.upDevice = static_cast<UpDevice *>(data);
|
||||||
|
thisPtr->getUpDeviceInfo(upDevice);
|
||||||
|
if (upDevice.model == nullptr) return;
|
||||||
|
if (0 == std::strcmp(upDevice.model, thisPtr->model_.c_str())) {
|
||||||
|
// Unref current upDevice
|
||||||
|
if (thisPtr->upDevice_.upDevice != NULL) g_object_unref(thisPtr->upDevice_.upDevice);
|
||||||
|
// Reassign new upDevice
|
||||||
|
thisPtr->upDevice_ = upDevice;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
this);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (upDevice_.upDevice != NULL)
|
if (upDevice_.upDevice != NULL)
|
||||||
|
|
Loading…
Reference in New Issue