fix(power):Change poweroff action from key press to release

- 修改关机动作从按键按下时变为释放时触发

 Related #11422
This commit is contained in:
meizhigang 2023-08-21 15:32:21 +08:00
parent 9e6215319c
commit e9a73f38c2
2 changed files with 139 additions and 1 deletions

View File

@ -0,0 +1,134 @@
From ca64260a4385ec5dd31e9481bb6f3f9b567a9e02 Mon Sep 17 00:00:00 2001
From: meizhigang <meizhigang@kylinsec.com.cn>
Date: Mon, 21 Aug 2023 10:53:20 +0800
Subject: [PATCH] fix(power):Change poweroff action from key press to release
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 修改关机动作从按键按下时变为释放时触发
Related #11422
---
include/power-i.h | 4 ++--
plugins/power/event/power-event-button.cpp | 13 ++++++++++---
plugins/power/event/power-event-control.cpp | 2 +-
plugins/power/power-manager.cpp | 6 +++---
plugins/power/power-utils.cpp | 4 ++--
5 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/include/power-i.h b/include/power-i.h
index 895c93e..ace2ec6 100644
--- a/include/power-i.h
+++ b/include/power-i.h
@@ -67,8 +67,8 @@ extern "C"
enum PowerEvent
{
- // 按下关机键
- POWER_EVENT_PRESSED_POWEROFF = 0,
+ // 释放关机键
+ POWER_EVENT_RELEASE_POWEROFF = 0,
// 按下睡眠键
POWER_EVENT_PRESSED_SLEEP,
// 按下挂起键
diff --git a/plugins/power/event/power-event-button.cpp b/plugins/power/event/power-event-button.cpp
index 082397b..4fe7747 100644
--- a/plugins/power/event/power-event-button.cpp
+++ b/plugins/power/event/power-event-button.cpp
@@ -48,7 +48,7 @@ void PowerEventButton::init()
auto login1 = PowerWrapperManager::get_instance()->get_default_login1();
this->login1_inhibit_fd_ = login1->inhibit("handle-power-key:handle-suspend-key:handle-lid-switch");
- this->register_button(XF86XK_PowerOff, PowerEvent::POWER_EVENT_PRESSED_POWEROFF);
+ this->register_button(XF86XK_PowerOff, PowerEvent::POWER_EVENT_RELEASE_POWEROFF);
this->register_button(XF86XK_Suspend, PowerEvent::POWER_EVENT_PRESSED_SUSPEND);
this->register_button(XF86XK_Sleep, PowerEvent::POWER_EVENT_PRESSED_SLEEP);
this->register_button(XF86XK_Hibernate, PowerEvent::POWER_EVENT_PRESSED_HIBERNATE);
@@ -136,7 +136,14 @@ GdkFilterReturn PowerEventButton::window_event(GdkXEvent *gdk_event, GdkEvent *e
auto button = (PowerEventButton *)data;
XEvent *xevent = (XEvent *)gdk_event;
- RETURN_VAL_IF_TRUE(xevent->type != KeyPress, GDK_FILTER_CONTINUE);
+ if (xevent->xkey.keycode == XKeysymToKeycode(button->xdisplay_, XF86XK_PowerOff))
+ {
+ RETURN_VAL_IF_TRUE(xevent->type != KeyRelease, GDK_FILTER_CONTINUE);
+ }
+ else
+ {
+ RETURN_VAL_IF_TRUE(xevent->type != KeyPress, GDK_FILTER_CONTINUE);
+ }
auto keycode = xevent->xkey.keycode;
auto keycode_str = fmt::format("0x{:x}", keycode);
@@ -148,7 +155,7 @@ GdkFilterReturn PowerEventButton::window_event(GdkXEvent *gdk_event, GdkEvent *e
return GDK_FILTER_CONTINUE;
}
- KLOG_DEBUG("Receipt keycode signal: %s.", keycode_str.c_str());
+ KLOG_DEBUG("Receipt keycode signal: %s, event type: %d.", keycode_str.c_str(), xevent->type);
button->emit_button_signal(iter->second);
return GDK_FILTER_REMOVE;
diff --git a/plugins/power/event/power-event-control.cpp b/plugins/power/event/power-event-control.cpp
index d852c80..c3c0345 100644
--- a/plugins/power/event/power-event-control.cpp
+++ b/plugins/power/event/power-event-control.cpp
@@ -157,7 +157,7 @@ void PowerEventControl::on_button_changed(PowerEvent evnet)
switch (evnet)
{
- case POWER_EVENT_PRESSED_POWEROFF:
+ case POWER_EVENT_RELEASE_POWEROFF:
{
action = PowerAction(this->power_settings_->get_enum(POWER_SCHEMA_BUTTON_POWER_ACTION));
PowerSave::get_instance()->do_save(action, error);
diff --git a/plugins/power/power-manager.cpp b/plugins/power/power-manager.cpp
index cf5d8d5..e1f90d2 100644
--- a/plugins/power/power-manager.cpp
+++ b/plugins/power/power-manager.cpp
@@ -188,7 +188,7 @@ void PowerManager::SetEventAction(gint32 event,
switch (event)
{
- case PowerEvent::POWER_EVENT_PRESSED_POWEROFF:
+ case PowerEvent::POWER_EVENT_RELEASE_POWEROFF:
result = this->power_settings_->set_enum(POWER_SCHEMA_BUTTON_POWER_ACTION, action);
break;
case PowerEvent::POWER_EVENT_PRESSED_SLEEP:
@@ -225,7 +225,7 @@ void PowerManager::GetEventAction(gint32 event,
switch (event)
{
- case PowerEvent::POWER_EVENT_PRESSED_POWEROFF:
+ case PowerEvent::POWER_EVENT_RELEASE_POWEROFF:
action = this->power_settings_->get_enum(POWER_SCHEMA_BUTTON_POWER_ACTION);
break;
case PowerEvent::POWER_EVENT_PRESSED_SLEEP:
@@ -428,7 +428,7 @@ void PowerManager::on_settings_changed(const Glib::ustring& key)
this->EventActionChanged_signal.emit(PowerEvent::POWER_EVENT_PRESSED_HIBERNATE);
break;
case CONNECT(POWER_SCHEMA_BUTTON_POWER_ACTION, _hash):
- this->EventActionChanged_signal.emit(PowerEvent::POWER_EVENT_PRESSED_POWEROFF);
+ this->EventActionChanged_signal.emit(PowerEvent::POWER_EVENT_RELEASE_POWEROFF);
break;
case CONNECT(POWER_SCHEMA_LID_CLOSED_ACTION, _hash):
this->EventActionChanged_signal.emit(PowerEvent::POWER_EVENT_LID_CLOSED);
diff --git a/plugins/power/power-utils.cpp b/plugins/power/power-utils.cpp
index f04670e..a55b6df 100644
--- a/plugins/power/power-utils.cpp
+++ b/plugins/power/power-utils.cpp
@@ -77,8 +77,8 @@ std::string PowerUtils::event_enum2str(uint32_t event)
{
switch (event)
{
- case PowerEvent::POWER_EVENT_PRESSED_POWEROFF:
- return "power off pressed";
+ case PowerEvent::POWER_EVENT_RELEASE_POWEROFF:
+ return "power off release";
case PowerEvent::POWER_EVENT_PRESSED_SLEEP:
return "sleep pressed";
case PowerEvent::POWER_EVENT_PRESSED_SUSPEND:
--
2.27.0

View File

@ -1,6 +1,6 @@
Name: kiran-cc-daemon
Version: 2.5.1
Release: 20
Release: 21
Summary: DBus daemon for Kiran Desktop
License: MulanPSL-2.0
@ -24,6 +24,7 @@ Patch0015: 0001-fix-display-Fix-nvidia-display-while-no-enabled-moni.patch
Patch0016: 0001-fix-xsettings-Fix-the-problem-that-variable-serial-i.patch
Patch0017: 0001-fix-accounts-Fix-user-icon-file-display-while-change.patch
Patch0018: 0001-fix-keybindings-Remove-power-and-logout-invalid-key-.patch
Patch0019: 0001-fix-power-Change-poweroff-action-from-key-press-to-r.patch
BuildRequires: cmake >= 3.2
BuildRequires: pkgconfig(glibmm-2.4)
@ -193,6 +194,9 @@ glib-compile-schemas /usr/share/glib-2.0/schemas &> /dev/nulls || :
%{_libdir}/pkgconfig/kiran-cc-daemon.pc
%changelog
* Mon Aug 21 2023 meizhigang <meizhigang@kylinsec.com.cn> - 2.5.1-21
- KYOS-B: Change poweroff action from key press to release (#11422)
* Fri Aug 18 2023 meizhigang <meizhigang@kylinsec.com.cn> - 2.5.1-20
- KYOS-B: Remove power and logout invalid key from normal desktop (#11242)