@@ -407,15 +407,18 @@ void MainWindow::initAttributes()
407407 // Qt::WindowStaysOnTopHint: 通知窗口系统该窗口应位于所有其他窗口之上。请注意,在 X11 上的某些窗口管理器上,您还必须传递
408408 // Qt::X11BypassWindowManagerHint 以使此标志正常工作。 Qt::X11BypassWindowManagerHint : 完全绕过窗口管理器。
409409 if (Utils::isWaylandMode || Utils::isTreelandMode) {
410- // 1070焦点策略管理比1060严格,作为全屏窗口的截图录屏设置了无焦点属性后,窗管不会在设置为获取焦点
411- // 因此在1070截图录屏截图录屏需要获取焦点,不然应用内快捷键无法响应。
412- if (DSysInfo::minorVersion ().toInt () >= 1070 ) {
410+ // V20(1070+)/V25社区版 焦点策略更严格:全屏窗口设置了无焦点属性后,窗管不会再设置为获取焦点,
411+ // 因此截图录屏需要获取焦点,不然应用内快捷键无法响应。
412+ const int minor = DSysInfo::minorVersion ().toInt ();
413+ const bool isNewFocusPolicy = minor >= 1070
414+ || DSysInfo::uosEditionType () == DSysInfo::UosCommunity;
415+ if (isNewFocusPolicy) {
413416 setWindowFlags (Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
414417 } else {
415418 setWindowFlags (Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::WindowDoesNotAcceptFocus);
416419 }
417420 if (this ->windowHandle ()) {
418- if (DSysInfo::minorVersion (). toInt () >= 1070 ) {
421+ if (isNewFocusPolicy ) {
419422 this ->windowHandle ()->setProperty (" _d_dwayland_window-type" , " override" );
420423 } else {
421424 this ->windowHandle ()->setProperty (" _d_dwayland_window-type" , " onScreenDisplay" ); // 窗管层级在1060和1070有所区别,兼容适配bug254705-275661
@@ -2646,8 +2649,11 @@ void MainWindow::save2Clipboard(const QPixmap &pix)
26462649 quality = 60 ;
26472650 }
26482651 if (Utils::is3rdInterfaceStart == false ) {
2649- if (DSysInfo::minorVersion ().toInt () >= 1070 ) {
2650- // check if save to clipboard finished
2652+ const int minor = DSysInfo::minorVersion ().toInt ();
2653+ const bool hasClipboardDaemon = minor >= 1070
2654+ || DSysInfo::uosEditionType () == DSysInfo::UosCommunity;
2655+ if (hasClipboardDaemon) {
2656+ // 连接 dde-clipboard-daemon 的 dataComing 信号,用于确认数据已被剪贴板服务接管
26512657 const QString ClipboardSignal = QStringLiteral (" dataComing" );
26522658 qCInfo (dsrApp) << " Connecting the clipboard feedback signal..."
26532659 << " \n ClipboardService: " << CLIPBOARD_NAME << " \n ClipboardPath: " << CLIPBOARD_PATH
@@ -2719,13 +2725,15 @@ void MainWindow::save2Clipboard(const QPixmap &pix)
27192725 qCDebug (dsrApp) << " Whether the data passed to the clipboard is empty? " << t_imageData->imageData ().isNull ();
27202726 }
27212727
2722- if (DSysInfo::minorVersion (). toInt () >= 1070 ) {
2728+ if (hasClipboardDaemon ) {
27232729 if (!Utils::isWaylandMode) {
27242730 this ->hide (); // 隐藏主界面
27252731 }
2726- // 根据图片大小动态计算等待时间,如果数据还没有传递到剪切板,则退出程序
2732+ // 等待 dde-clipboard-daemon 通过 dataComing 信号确认已接管数据
2733+ // 超时后仍退出,避免无限阻塞
27272734 int waitSeconds = getWaitTimeByImageSize (pix);
27282735 time_t endTime = time (nullptr ) + waitSeconds;
2736+ m_isSaveClipboard = false ;
27292737 qCInfo (dsrApp) << " Start Wait" << waitSeconds << " s for data to be saved to the clipboard..." << endTime;
27302738 time_t lastTime = 0 ;
27312739 while (1 ) {
@@ -6366,7 +6374,7 @@ void MainWindow::onLockScreenEvent(QDBusMessage msg)
63666374void MainWindow::onSaveClipboardComing (const QByteArray &msg)
63676375{
63686376 Q_UNUSED (msg);
6369- qCInfo (dsrApp) << " Received data transfer to the clipboard complete signal! " ;
6377+ qCWarning (dsrApp) << " Received dataComing signal from clipboard daemon " ;
63706378 emit saveClipboardComing ();
63716379 m_isSaveClipboard = true ;
63726380}
0 commit comments