aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/NativeWindow.cpp
blob: 3bde9ab8cbb4bc607d9dabb3e50482161c9b09bb (plain)
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(){

}
bgstack15