Помогите с powermanagement! [Решено]

Изображение пользователя severga.

Уважаемые форумчане-кодеры!
Я тут затеял поизучать создание виджетов и решил несколько штучек сделать для себя. Но столкнулся с проблемой.
Хочу переделать немного стандартный виджет lockout, добавив в него немного функционала - еще одну кнопку (гашение экрана) и пару пунктов меню, отключающих и снова включающих подавление гашения экрана.
С кнопкой вроде справился. А вот как работает служба для источника PowerDevil в движке powermanagement, я, откровенно, не могу понять, она то срабатывает, то не срабатывает. Может быть, я что-то не учитываю?
Вот код, который я использую (добавил в стандартный QML):
......
    PlasmaCore.DataSource {
        id: dataEngine
        engine: "powermanagement"
        connectedSources: ["PowerDevil"]
    }

    Component.onCompleted: {
        plasmoid.aspectRatioMode = IgnoreAspectRatio;
        plasmoid.addEventListener('ConfigChanged', configChanged);
        // далее - мой код...
plasmoid.setAction("bspm", "Suppress Screen Power Management", "help-hint");
plasmoid.setAction("sspm", "Stop Suppressing Screen Power Management");
plasmoid.setActionSeparator("separator");
    }
   
    function action_bspm() {
var service = dataEngine.serviceForSource("PowerDevil");
var operation = service.operationDescription("beginSuppressingScreenPowerManagement");
service.startOperationCall(operation);
    }

    function action_sspm() {
var service = dataEngine.serviceForSource("PowerDevil");
var operation = service.operationDescription("stopSuppressingScreenPowerManagement");
service.startOperationCall(operation);
    }
......

0
severga - 6 Август, 2017 - 14:52
Изображение пользователя severga.

Уф! Вроде сам доковырял методом научного тыка!
Вот, пользуйтесь, если кому нужно будет:
......
Flow {
    id: lockout
    property int minimumWidth
    property int minimumHeight

    property int minButtonSize: 16

    property bool show_black: true
    property bool show_lock: true
    property bool show_switchUser: false
    property bool show_leave: true
    property bool show_suspend: false
    property bool show_hibernate: false
    property int visibleButtons: 3
    property int orientation: Qt.Horizontal
    property int cookie: 0
    property bool suppressVisible: true

    flow: orientation==Qt.Vertical ? Flow.TopToBottom : Flow.LeftToRight

    onWidthChanged: checkLayout();
    onHeightChanged: checkLayout();

    PlasmaCore.DataSource {
        id: dataEngine
        engine: "powermanagement"
        connectedSources: ["PowerDevil"]
    }

    Component.onCompleted: {
        plasmoid.aspectRatioMode = IgnoreAspectRatio;
        plasmoid.addEventListener('ConfigChanged', configChanged);
        updateMenu();
    }
   
    function updateMenu() {
        if (suppressVisible) {
            plasmoid.removeAction("sspm");
            plasmoid.removeAction("separator");
            plasmoid.setAction("bspm", "Suppress Display Off", "help-hint");
            plasmoid.setActionSeparator("separator");
        } else {
            plasmoid.removeAction("bspm");
            plasmoid.removeAction("separator");
            plasmoid.setAction("sspm", "Stop Suppressing Display Off", "preferences-system-power-management");
            plasmoid.setActionSeparator("separator");
        }
    }
   
    function getJobResult(job) {
        cookie = job.result;
    }
   
    function action_bspm() {
        var service = dataEngine.serviceForSource("PowerDevil");
        var operation = service.operationDescription("beginSuppressingScreenPowerManagement");
        var serviceJob = service.startOperationCall(operation);
        serviceJob.finished.connect(getJobResult);
suppressVisible = false;
updateMenu();
    }

    function action_sspm() {
        var service = dataEngine.serviceForSource("PowerDevil");
        var operation = service.operationDescription("stopSuppressingScreenPowerManagement");
        operation.cookie = cookie;
        service.startOperationCall(operation);
suppressVisible = true;
        updateMenu();
    }
......

0
kot040188 - 6 Август, 2017 - 15:59
Изображение пользователя kot040188.

Было бы гораздо замечательнее, если бы вы готовые виджеты выложили куда-нибудь…

0
severga - 6 Август, 2017 - 19:27
Изображение пользователя severga.

Будет сделано! :))
Заодно потестите... ;)
Вы мне только объясните, как мне правильно оформить виджет, если я за основу взял стандартный "lockout", автор которого Виранч Мехта...

0
kot040188 - 6 Август, 2017 - 19:36
Изображение пользователя kot040188.

Ну я не знаю, я не автор… В идеале хорошо бы выложить сюда https://store.kde.org/

0
severga - 6 Август, 2017 - 20:16
Изображение пользователя severga.

Вот:
Запись в блоге

Туда пока рано: боюсь, заплюют. :)))

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры