Implemented nickel_setting:lockscreen action
This commit is contained in:
1
res/doc
1
res/doc
@@ -37,6 +37,7 @@
|
|||||||
# kfmon - TODO
|
# kfmon - TODO
|
||||||
# nickel_setting - one of:
|
# nickel_setting - one of:
|
||||||
# invert - toggles FeatureSettings.InvertScreen (all versions)
|
# invert - toggles FeatureSettings.InvertScreen (all versions)
|
||||||
|
# lockscreen - toggles PowerSettings.UnlockEnabled (4.12.12111+)
|
||||||
# screenshots - toggles FeatureSettings.Screenshots (all versions)
|
# screenshots - toggles FeatureSettings.Screenshots (all versions)
|
||||||
# nickel_extras - the mimetype of the plugin, or one of:
|
# nickel_extras - the mimetype of the plugin, or one of:
|
||||||
# web_browser
|
# web_browser
|
||||||
|
|||||||
@@ -102,6 +102,29 @@ NM_ACTION_(nickel_setting) {
|
|||||||
} else if (!strcmp(arg, "screenshots")) {
|
} else if (!strcmp(arg, "screenshots")) {
|
||||||
NM_RETURN_ERR("not implemented yet");
|
NM_RETURN_ERR("not implemented yet");
|
||||||
}
|
}
|
||||||
|
} else if (!strcmp(arg, "lockscreen")) {
|
||||||
|
void *PowerSettings_vtable = dlsym(RTLD_DEFAULT, "_ZTV13PowerSettings");
|
||||||
|
NM_ASSERT(PowerSettings_vtable, "could not dlsym the vtable for PowerSettings");
|
||||||
|
vtable_ptr(settings) = vtable_target(PowerSettings_vtable);
|
||||||
|
|
||||||
|
if (!strcmp(arg, "lockscreen")) {
|
||||||
|
bool (*PowerSettings__getUnlockEnabled)(Settings*);
|
||||||
|
reinterpret_cast<void*&>(PowerSettings__getUnlockEnabled) = dlsym(RTLD_DEFAULT, "_ZN13PowerSettings16getUnlockEnabledEv");
|
||||||
|
NM_ASSERT(PowerSettings__getUnlockEnabled, "could not dlsym PowerSettings::getUnlockEnabled");
|
||||||
|
|
||||||
|
bool (*PowerSettings__setUnlockEnabled)(Settings*, bool);
|
||||||
|
reinterpret_cast<void*&>(PowerSettings__setUnlockEnabled) = dlsym(RTLD_DEFAULT, "_ZN13PowerSettings16setUnlockEnabledEb");
|
||||||
|
NM_ASSERT(PowerSettings__setUnlockEnabled, "could not dlsym PowerSettings::setUnlockEnabled");
|
||||||
|
|
||||||
|
v = PowerSettings__getUnlockEnabled(settings);
|
||||||
|
vtable_ptr(settings) = vtable_target(PowerSettings_vtable);
|
||||||
|
|
||||||
|
PowerSettings__setUnlockEnabled(settings, !v);
|
||||||
|
vtable_ptr(settings) = vtable_target(PowerSettings_vtable);
|
||||||
|
|
||||||
|
NM_ASSERT(PowerSettings__getUnlockEnabled(settings) == !v, "failed to set setting");
|
||||||
|
vtable_ptr(settings) = vtable_target(PowerSettings_vtable);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// TODO: more settings
|
// TODO: more settings
|
||||||
Settings_SettingsD(settings);
|
Settings_SettingsD(settings);
|
||||||
|
|||||||
Reference in New Issue
Block a user