diff --git a/display1/event_log.go b/display1/event_log.go index 502b31ffa..fa3b003af 100644 --- a/display1/event_log.go +++ b/display1/event_log.go @@ -13,7 +13,7 @@ import ( ) // Event ID for display screen (10-digit number) -const EventTidDisplayScreen = 1000600015 +const EventTidDisplayScreen = 1000610004 // Debounce delay for display screen events const displayEventDebounceDelay = 1 * time.Second diff --git a/gesture1/event_log.go b/gesture1/event_log.go new file mode 100644 index 000000000..b49d6f1bc --- /dev/null +++ b/gesture1/event_log.go @@ -0,0 +1,74 @@ +// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: GPL-3.0-or-later + +package gesture1 + +import ( + "os/exec" + "strings" + "sync" + + "github.com/linuxdeepin/dde-daemon/session/eventlog" +) + +const ( + eventTidKWinMultiTaskView = 1000300000 + eventTidKWinSplitScreen = 1000300004 + + eventLaunchTypeTouchPad = "3" + eventLaunchTypeTouchScreen = "4" +) + +var ( + kwinVersionOnce sync.Once + kwinVersion string +) + +func logMultiTaskViewEvent(launchType string) { + data := &eventlog.EventLogData{ + Tid: eventTidKWinMultiTaskView, + Target: "kwin_multitask_view", + Message: map[string]string{ + "launch_type": launchType, + "kwin_version": getKWinVersion(), + }, + } + if eventlog.WriteEventLog(data) { + logger.Debug("EventLog: kwin multitask view launch type:", launchType) + } +} + +func logSplitScreenEvent() { + data := &eventlog.EventLogData{ + Tid: eventTidKWinSplitScreen, + Target: "kwin_split_screen", + Message: map[string]string{ + "launch_type": eventLaunchTypeTouchPad, + "kwin_version": getKWinVersion(), + }, + } + if eventlog.WriteEventLog(data) { + logger.Debug("EventLog: kwin split screen") + } +} + +func getKWinVersion() string { + kwinVersionOnce.Do(func() { + kwinVersion = packageVersion("kwin-x11") + }) + return kwinVersion +} + +func packageVersion(packageName string) string { + packageName = strings.TrimSpace(packageName) + if packageName == "" || strings.ContainsAny(packageName, "/ \t\n\r") { + return "" + } + + out, err := exec.Command("dpkg-query", "-W", "-f=${Version}", packageName).Output() + if err != nil { + return "" + } + return strings.TrimSpace(string(out)) +} diff --git a/gesture1/gesture_action.go b/gesture1/gesture_action.go index f42b7acba..26e35ea99 100644 --- a/gesture1/gesture_action.go +++ b/gesture1/gesture_action.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2018 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -85,7 +85,11 @@ func (m *Manager) doHandle4Or5FingersSwipeUp() error { if !isShowMultiTask { if !isShowDesktop { - return m.toggleShowMultiTasking() + if err := m.toggleShowMultiTasking(); err != nil { + return err + } + logMultiTaskViewEvent(eventLaunchTypeTouchPad) + return nil } return m.toggleShowDesktop() } @@ -145,11 +149,19 @@ func (m *Manager) doReverseSwitchWorkspace() error { } func (m *Manager) doTileActiveWindowLeft() error { - return m.wm.TileActiveWindow(0, wmTileDirectionLeft) + if err := m.wm.TileActiveWindow(0, wmTileDirectionLeft); err != nil { + return err + } + logSplitScreenEvent() + return nil } func (m *Manager) doTileActiveWindowRight() error { - return m.wm.TileActiveWindow(0, wmTileDirectionRight) + if err := m.wm.TileActiveWindow(0, wmTileDirectionRight); err != nil { + return err + } + logSplitScreenEvent() + return nil } func (m *Manager) doMoveActiveWindow() error { @@ -184,17 +196,24 @@ func (m *Manager) doXdotoolsMouseUp() error { return nil } -func (m *Manager) doShowMultiTasking() error { +func (m *Manager) showMultiTaskingWithLaunchType(launchType string) error { isShowMultiTask, err := m.wm.GetMultiTaskingStatus(0) if err != nil { return err } if !isShowMultiTask { - return m.toggleShowMultiTasking() + if err := m.toggleShowMultiTasking(); err != nil { + return err + } + logMultiTaskViewEvent(launchType) } return nil } +func (m *Manager) doShowMultiTasking() error { + return m.showMultiTaskingWithLaunchType(eventLaunchTypeTouchPad) +} + func (m *Manager) doHideMultiTasking() error { isShowMultiTask, err := m.wm.GetMultiTaskingStatus(0) if err != nil { diff --git a/gesture1/manager.go b/gesture1/manager.go index 8fc6423fc..ee0d27404 100644 --- a/gesture1/manager.go +++ b/gesture1/manager.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -619,7 +619,7 @@ func (m *Manager) handleTouchEdgeMoveStopLeave(context *touchEventContext, edge if (1-p.Y)*float64(context.screenHeight) > float64(dockPly) { logger.Debug("show muti task") - return doActionByName("ShowMultiTask") + return m.showMultiTaskingWithLaunchType(eventLaunchTypeTouchScreen) } } } diff --git a/inputdevices1/event_log.go b/inputdevices1/event_log.go index 87f51e6c7..e9ee6fe8b 100644 --- a/inputdevices1/event_log.go +++ b/inputdevices1/event_log.go @@ -13,7 +13,7 @@ import ( // Event IDs for input devices (10-digit numbers) const ( // Combined event ID for natural scroll settings on startup - EventTidNaturalScroll = 1000600013 // 自然滚动设置(触控板和鼠标合并) + EventTidNaturalScroll = 1000610009 // 自然滚动设置(触控板和鼠标合并) ) // LogNaturalScroll logs natural scroll state for both touchpad and mouse in one event