mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
trayicon: 创建24depth的窗口进行包装
QWidget::createWindowcontainer没有很好的处理本进程使用XCreateWindow 创建的窗口。 QQ等32位窗口直接丢到windowcontianer也是无法正常工作(被销毁) 暂时全部使用24depth包装。 先不要合并,会导致背景有问题。
This commit is contained in:
parent
bcb0ce9edf
commit
2f1a6aa688
@ -4,7 +4,7 @@
|
||||
#
|
||||
#-------------------------------------------------
|
||||
|
||||
QT += core gui dbus
|
||||
QT += core gui dbus x11extras
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
|
@ -1,9 +1,25 @@
|
||||
#include <QApplication>
|
||||
|
||||
#include <QPainter>
|
||||
#include <QBitmap>
|
||||
|
||||
#include <QX11Info>
|
||||
|
||||
#include "dockconstants.h"
|
||||
|
||||
#include "trayicon.h"
|
||||
#include <X11/Xlib.h>
|
||||
QWindow* wrapper(WId w)
|
||||
{
|
||||
Display * dpy = QX11Info::display();
|
||||
//需要在TrayIcon销毁时候释放
|
||||
QWindow* fake = new QWindow();
|
||||
XReparentWindow(dpy, w, fake->winId(), 0, 0);
|
||||
XMapSubwindows(dpy, fake->winId());
|
||||
XFlush(dpy);
|
||||
|
||||
return QWindow::fromWinId(fake->winId());
|
||||
}
|
||||
|
||||
TrayIcon::TrayIcon(WId winId, QWidget *parent) :
|
||||
QWidget(parent)
|
||||
@ -11,14 +27,13 @@ TrayIcon::TrayIcon(WId winId, QWidget *parent) :
|
||||
initItemMask();
|
||||
resize(Dock::APPLET_CLASSIC_ICON_SIZE,
|
||||
Dock::APPLET_CLASSIC_ICON_SIZE);
|
||||
|
||||
m_win = QWindow::fromWinId(winId);
|
||||
|
||||
m_win = wrapper(winId);
|
||||
QWidget * winItem = QWidget::createWindowContainer(m_win, this);
|
||||
winItem->resize(size());
|
||||
}
|
||||
|
||||
|
||||
|
||||
void TrayIcon::initItemMask()
|
||||
{
|
||||
m_itemMask = QPixmap(Dock::APPLET_CLASSIC_ICON_SIZE,
|
||||
|
Loading…
x
Reference in New Issue
Block a user