1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
//===========================================
// Lumina-desktop source code
// Copyright (c) 2018, Ken Moore
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
#include "NativeWindow.h"
// === PUBLIC ===
NativeWindow::NativeWindow( NativeWindowObject *obj ) : QFrame(0, Qt::Window | Qt::FramelessWindowHint){
WIN = obj;
createFrame();
WIN->addFrameWinID(this->winId());
//Setup all the property connections
connect(WIN, SIGNAL(winImageChanged()), this, SLOT(syncWinImage()):
connect(WIN, SIGNAL(nameChanged()), this, SLOT(syncName()):
connect(WIN, SIGNAL(titleChanged()), this, SLOT(syncTitle()):
connect(WIN, SIGNAL(iconChanged()), this, SLOT(syncIcon()):
connect(WIN, SIGNAL(stickyChanged()), this, SLOT(syncSticky()):
connect(WIN, SIGNAL(visibilityChanged()), this, SLOT(syncVisibility()):
connect(WIN, SIGNAL(winTypeChanged()), this, SLOT(syncWinType()):
connect(WIN, SIGNAL(geomChanged()), this, SLOT(syncGeom()):
//Now Perform the initial property loads
syncWinImage();
syncName();
syncTitle();
syncIcon();
syncSticky();
syncVisibility();
syncWinType();
syncGeom();
}
NativeWindow::~NativeWindow(){
}
// === PRIVATE ===
void NativeWindow::createFrame(){
//Initialize the widgets
closeB = new QToolButton(this);
closeB->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
minB = new QToolButton(this);
minB->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
maxB = new QToolButton(this);
maxB->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
otherB = new QToolButton(this);
otherB->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
toolbarL = new QHBoxLayout(this);
vlayout = new QVBoxLayout(this);
vlayout.align
titleLabel = new QLabel(this);
titleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
//Now put the widgets in the right places
toolbarL->addWidget(otherB);
toolbarL->addWidget(titleLabel);
toolbarL->addWidget(minB);
toolbarL->addWidget(maxB);
toolbarL->addWidget(closeB);
vlayout->addLayout(toolbarL);
vlayout->addStretch();
this->setLayout(vlayout);
//
}
// === PRIVATE SLOTS ===
//Property Change slots
void NativeWindow::syncWinImage(){
//Do nothing at the moment (compositing disabled)
}
void NativeWindow::syncName(){
qDebug() << "Got Name Change:" << WIN->name();
}
void NativeWindow::syncTitle(){
titleLabel->setText(WIN->title());
}
void NativeWindow::syncIcon(){
//Do not use the "WIN->icon()" function, that is the URL format for QML
otherB->setIcon( QIcon(WIN->property(NativeWindowObject::Icon).value<QIcon>()) );
}
void NativeWindow::syncSticky(){
qDebug() << "Got Sticky Change:" << WIN->isSticky();
}
void NativeWindow::syncVisibility(){
this->setVisible(WIN->isVisible());
}
void NativeWindow::syncWinType(){
closeB->setVisible(WIN->showCloseButton());
maxB->setVisible(WIN->showMaxButton());
minB->setVisible(WIN->showMinButton());
titleLabel->setVisible(WIN->showTitlebar());
otherB->setVisible(WIN->showGenericButton());
}
void NativeWindow::syncGeom(){
}
|