aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core/lumina-desktop-unified/src-WM
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/core/lumina-desktop-unified/src-WM')
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-WM/DEPENDENCIES17
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-WM/GlobalDefines.h74
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-WM/LWindow.cpp474
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-WM/LWindow.h114
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.cpp186
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.h40
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-WM/WMSession.cpp62
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-WM/WMSession.h42
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-WM/lumina-wm.pro107
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-WM/main.cpp56
10 files changed, 0 insertions, 1172 deletions
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/DEPENDENCIES b/src-qt5/core/lumina-desktop-unified/src-WM/DEPENDENCIES
deleted file mode 100644
index fa0ce486..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-WM/DEPENDENCIES
+++ /dev/null
@@ -1,17 +0,0 @@
-Most dependencies required to build Lumina are listed in the
-DEPENDENCIES file in the directory above this one. The following
-are dependencies specific to Lumina's window manager.
-
-
-FreeBSD/TrueOS
-=======================
-
-
-
-
-Linux (Debian/Ubuntu)
-=======================
-
-libxcb-screensaver0-dev
-
-
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/GlobalDefines.h b/src-qt5/core/lumina-desktop-unified/src-WM/GlobalDefines.h
deleted file mode 100644
index 3ec278ac..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-WM/GlobalDefines.h
+++ /dev/null
@@ -1,74 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// Global defines and enumerations for the window manager
-//===========================================
-#ifndef _LUMINA_WINDOW_MANAGER_GLOBAL_DEFINES_H
-#define _LUMINA_WINDOW_MANAGER_GLOBAL_DEFINES_H
-
-//Qt includes
-#include <QObject>
-#include <QFrame>
-#include <QLabel>
-#include <QToolButton>
-#include <QMenu>
-#include <QHBoxLayout>
-#include <QMouseEvent>
-#include <QAction>
-#include <QPoint>
-#include <QFile>
-#include <QDir>
-#include <QString>
-#include <QTextStream>
-#include <QUrl>
-#include <QDebug>
-#include <QStringList>
-#include <QAbstractNativeEventFilter>
-#include <QList>
-#include <QX11Info>
-#include <QCoreApplication>
-#include <QPropertyAnimation>
-#include <QAnimationGroup>
-#include <QParallelAnimationGroup>
-#include <QWindow>
-#include <QWidget>
-#include <QBackingStore>
-#include <QPaintEvent>
-#include <QPainter>
-#include <QSettings>
-#include <QHostInfo>
-#include <QDesktopWidget>
-#include <QStyleOption>
-#include <QThread>
-
-// libLumina includes
-#include <LuminaX11.h>
-#include <LuminaXDG.h>
-#include <LuminaOS.h>
-#include <LuminaThemes.h>
-#include <LuminaUtils.h>
-#include <LuminaSingleApplication.h>
-
-//XCB Includes
-#include <xcb/xcb.h>
-#include <xcb/xproto.h>
-#include <xcb/damage.h>
-#include <xcb/xcb_atom.h>
-#include <xcb/xcb_aux.h> //included in libxcb-util.so
-
-#define ANIMTIME 80 //animation time in milliseconds
-//Global flags/structures
-namespace LWM{
- //Flags/enumerations
- enum WindowAction{MoveResize, Show, Hide, TryClose, Closed, WA_NONE};
-
- //Data structures
- extern LXCB *SYSTEM;
-};
-
-
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.cpp b/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.cpp
deleted file mode 100644
index 84ff2ffd..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.cpp
+++ /dev/null
@@ -1,474 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LWindow.h"
-
-LWindowFrame::LWindowFrame(WId client, QWidget *parent) : QFrame(parent, Qt::X11BypassWindowManagerHint){
- activeState = LWindowFrame::Normal;
- CID = client;
- lastAction = LWM::WA_NONE;
- Closing = false;
- //qDebug() << "New Window:" << CID << "Frame:" << this->winId();
- this->setMouseTracking(true); //need this to determine mouse location when not clicked
- this->setObjectName("LWindowFrame");
- this->setStyleSheet("LWindowFrame#LWindowFrame{ border: 2px solid white; border-radius:3px; } QWidget#TitleBar{background: grey; } QLabel{ color: black; }");
- InitWindow(); //initially create all the child widgets
- //LWM::SYSTEM->setupEventsForFrame(this->winId());
- updateAppearance(); //this loads the appearance based on window/theme settings
- //QApplication::processEvents();
- //Now set the frame size on this window
- SyncSize();
- SyncText();
- this->show();
-}
-
-LWindowFrame::~LWindowFrame(){
-}
-
-// =================
-// PRIVATE
-// =================
-void LWindowFrame::InitWindow(){
- anim = new QPropertyAnimation(this); //For simple window animations
- anim->setTargetObject(this);
- anim->setDuration(ANIMTIME); //In milliseconds
- connect(anim, SIGNAL(finished()), this, SLOT(finishedAnimation()) );
- titleBar = new QLabel(this); //This is the "container" for all the title buttons/widgets
- titleBar->setObjectName("TitleBar");
- titleBar->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
- titleBar->setFocusPolicy(Qt::NoFocus);
- titleBar->setCursor(Qt::ArrowCursor);
- title = new QLabel(this); //Shows the window title/text
- title->setObjectName("Title");
- title->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
- title->setCursor(Qt::ArrowCursor);
- title->setFocusPolicy(Qt::NoFocus);
- icon = new QLabel(this); //Contains the window icon
- icon->setObjectName("Icon");
- icon->setCursor(Qt::ArrowCursor);
- icon->setFocusPolicy(Qt::NoFocus);
- minB = new QToolButton(this); //Minimize Button
- minB->setObjectName("Minimize");
- minB->setCursor(Qt::ArrowCursor);
- minB->setFocusPolicy(Qt::NoFocus);
- connect(minB, SIGNAL(clicked()), this, SLOT(minClicked()) );
- maxB = new QToolButton(this); //Maximize Button
- maxB->setObjectName("Maximize");
- maxB->setCursor(Qt::ArrowCursor);
- maxB->setFocusPolicy(Qt::NoFocus);
- connect(maxB, SIGNAL(clicked()), this, SLOT(maxClicked()) );
- closeB = new QToolButton(this);
- closeB->setObjectName("Close");
- closeB->setCursor(Qt::ArrowCursor);
- closeB->setFocusPolicy(Qt::NoFocus);
- connect(closeB, SIGNAL(clicked()), this, SLOT(closeClicked()) );
- otherB = new QToolButton(this); //Button to place any other actions
- otherB->setObjectName("Options");
- otherB->setCursor(Qt::ArrowCursor);
- otherB->setPopupMode(QToolButton::InstantPopup);
- otherB->setStyleSheet("QToolButton::menu-indicator{ image: none; }");
- otherB->setFocusPolicy(Qt::NoFocus);
- otherM = new QMenu(this); //menu of "other" actions for the window
- otherB->setMenu(otherM);
- connect(otherM, SIGNAL(triggered(QAction*)), this, SLOT(otherClicked(QAction*)) );
- //Now assemble the titlebar
- QHBoxLayout *HL = new QHBoxLayout(this);
- HL->setContentsMargins(0,0,0,0);
- HL->addWidget(otherB);
- HL->addWidget(icon);
- HL->addWidget(title);
- HL->addWidget(minB);
- HL->addWidget(maxB);
- HL->addWidget(closeB);
- titleBar->setLayout(HL);
- QVBoxLayout *VL = new QVBoxLayout(this);
- this->setLayout(VL);
- //The WinWidget container appears shifted right/down by 1 pixel for some reason
- // Adjust the margins to account for this variation
- VL->setContentsMargins(1,1,2,2);
- VL->setSpacing(0);
- //Have the window take the same initial size of the client window
- QRect geom = LWM::SYSTEM->WM_Window_Geom(CID);
- qDebug() << " - Load Size Hints" << "initial size:" << geom.size();
- icccm_size_hints SH = LWM::SYSTEM->WM_ICCCM_GetNormalHints(CID);
- qDebug() << " - - Got Normal Hints";
- if(!SH.isValid()){ SH = LWM::SYSTEM->WM_ICCCM_GetSizeHints(CID); }
- qDebug() << " - - Start resizing...";
- if(SH.base_width>geom.width() && SH.base_height>geom.height()){ this->resize(SH.base_width, SH.base_height); }
- else if(SH.min_width>geom.width() && SH.min_height>geom.height()){ this->resize(SH.min_width, SH.min_height); }
- else if(SH.width>geom.width() && SH.height>geom.height()){ this->resize(SH.width, SH.height); }
- else if(geom.isNull()){ this->resize(100,80); }
- else{ this->resize( geom.size() ); }
- qDebug() << " - done";
-
- //Now embed the native window into the frame
- WIN = QWindow::fromWinId(CID);
- WinWidget = QWidget::createWindowContainer( WIN, this);
- WinWidget->setCursor(Qt::ArrowCursor); //this is just a fallback - the window itself will adjust it
- //WINBACK = new QBackingStore(WIN); //create a data backup for the widget
-
- //Now assemble te initial layout for the window (all while still invisible)
- /*VL->addWidget(titleBar);
- VL->addWidget(WinWidget);
- VL->setStretch(1,1);*/
-}
-
-LWindowFrame::ModState LWindowFrame::getStateAtPoint(QPoint pt, bool setoffset){
- //Note: pt should be in widget-relative coordinates, not global
- if(!this->layout()->geometry().contains(pt)){
- //above the frame itself - need to figure out which quadrant it is in (8-directions)
- if(pt.y() < 3){
- //One of the top options
- if(pt.x() < 3){
- if(setoffset){ offset.setX(pt.x()); offset.setY(pt.y()); } //difference from top-left corner
- return ResizeTopLeft;
- }else if(pt.x() > (this->width()-3)){
- if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(pt.y()); } //difference from top-right corner
- return ResizeTopRight;
- }else{
- if(setoffset){ offset.setX(0); offset.setY(pt.y()); } //difference from top edge (X does not matter)
- return ResizeTop;
- }
- }else if(pt.y() > (this->height()-3) ){
- //One of the bottom options
- if(pt.x() < 3){
- if(setoffset){ offset.setX(pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-left corner
- return ResizeBottomLeft;
- }else if(pt.x() > (this->width()-3)){
- if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-right corner
- return ResizeBottomRight;
- }else{
- if(setoffset){ offset.setX(0); offset.setY(this->height() - pt.y()); } //difference from bottom edge (X does not matter)
- return ResizeBottom;
- }
- }else{
- //One of the side options
- if(pt.x() < 3){
- if(setoffset){ offset.setX(pt.x()); offset.setY(0); } //difference from left edge (Y does not matter)
- return ResizeLeft;
- }else if(pt.x() > (this->width()-3) ){
- if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(0); } //difference from right edge (Y does not matter)
- return ResizeRight;
- }else{
- return Normal;
- }
- }
- }
- return Normal;
-}
-
-void LWindowFrame::setMouseCursor(ModState state, bool override){
- Qt::CursorShape shape;
- switch(state){
- case Normal:
- shape = Qt::ArrowCursor;
- break;
- case Move:
- shape = Qt::SizeAllCursor;
- break;
- case ResizeTop:
- shape = Qt::SizeVerCursor;
- break;
- case ResizeTopRight:
- shape = Qt::SizeBDiagCursor;
- break;
- case ResizeRight:
- shape = Qt::SizeHorCursor;
- break;
- case ResizeBottomRight:
- shape = Qt::SizeFDiagCursor;
- break;
- case ResizeBottom:
- shape = Qt::SizeVerCursor;
- break;
- case ResizeBottomLeft:
- shape = Qt::SizeBDiagCursor;
- break;
- case ResizeLeft:
- shape = Qt::SizeHorCursor;
- break;
- case ResizeTopLeft:
- shape = Qt::SizeFDiagCursor;
- break;
- }
- if(override){
- QApplication::setOverrideCursor(QCursor(shape));
- }else{
- this->setCursor(shape);
- }
-}
-
-// ==========================
-// WINDOW INTERACTIONS
-//==========================
-void LWindowFrame::SyncSize(bool fromwin){
- //sync the window/frame geometries (generally only done before embedding the client window)
- int frame = this->frameWidth();
- int TH = titleBar->height();
- //Now load the information about the window and adjust the frame to match
- if(fromwin){ lastGeom = LWM::SYSTEM->WM_Window_Geom(CID); }
- else{ lastGeom = this->geometry(); }
- qDebug() << "Initial Size:" << lastGeom << frame << TH;
- //Add in the frame size
- lastGeom.moveTop(lastGeom.y()-frame-TH);
- lastGeom.setHeight(lastGeom.height()+(2*frame)+TH);
- lastGeom.moveLeft(lastGeom.x()-frame);
- lastGeom.setWidth( lastGeom.width()+(2*frame));
- QList<unsigned int> margins;
- margins << frame << frame << frame+TH << frame; //L/R/Top/Bottom
- qDebug() << " - With Frame:" << lastGeom;
- //Now adjust for a out-of-bounds location
- if(lastGeom.x() < 0){ lastGeom.moveLeft(0); }
- if(lastGeom.y() < 0){ lastGeom.moveTop(0); }
- qDebug() << " - Adjusted:" << lastGeom;
- this->setGeometry(lastGeom);
- LWM::SYSTEM->WM_Set_Frame_Extents(CID, margins);
-}
-
-void LWindowFrame::SyncText(){
- QString txt = WIN->title();
- if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowName(CID); }
- if(txt.isEmpty()){ txt = LWM::SYSTEM->OldWindowName(CID); }
- if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowVisibleName(CID); }
- if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowIconName(CID); }
- if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowVisibleIconName(CID); }
- if(txt.isEmpty()){ txt = LWM::SYSTEM->WM_ICCCM_GetClass(CID); }
- title->setText(txt);
-}
-
-// SIMPLE ANIMATIONS
-void LWindowFrame::showAnimation(LWM::WindowAction act){
- bool useanimation = (act!=lastAction);
- if(anim->state()==QAbstractAnimation::Running){
- qDebug() << "New Animation Event:" << act;
- return;
- }
- //Setup the animation routine
- if(act==LWM::Show){
- if(useanimation){
- lastGeom = this->geometry();
- //Expand out from center point
- anim->setPropertyName("geometry");
- anim->setStartValue( QRect(lastGeom.center(), QSize(0,0) ) );
- anim->setEndValue( this->geometry() );
- //Fade in gradually
- //anim->setPropertyName("windowOpacity");
- //anim->setStartValue( 0.0 );
- //anim->setEndValue( 1.0 );
- }else{
- ShowClient(true);
- this->raise();
- this->show(); //just show it right away
- }
-
- }else if(act==LWM::Hide){
- if(useanimation){
- //Collapse in on center point
- lastGeom = this->geometry();
- anim->setPropertyName("geometry");
- anim->setStartValue( QRect(this->geometry()) );
- anim->setEndValue( QRect(this->geometry().center(), QSize(0,0) ) );
- }else{
- this->hide(); //just hide it right away
- }
- }else if(act==LWM::Closed){
- //Need to clean up the container widget first to prevent XCB errors
- //qDebug() << "Window Closed:" << WIN->winId() << CID;
- if(useanimation){
- //Collapse in on center line
- lastGeom = this->geometry();
- anim->setPropertyName("geometry");
- anim->setStartValue( QRect(this->geometry()) );
- anim->setEndValue( QRect(this->geometry().x(), this->geometry().center().y(), this->width(), 0 ) );
- }else{
- CloseAll(); //just hide it right away
- }
- }
- if(useanimation){
- ShowClient(false);
- this->show();
- qDebug() << " - Starting Animation:" << act;
- lastAction = act;
- anim->start();
- };
-}
-
-void LWindowFrame::ShowClient(bool show){
- if(show && this->layout()->indexOf(WinWidget)<0 && !Closing){
- while(this->layout()->count()>0){ this->layout()->removeItem(0); }
- this->layout()->addWidget(titleBar);
- this->layout()->setAlignment(titleBar, Qt::AlignTop);
- this->layout()->addWidget(WinWidget);
- static_cast<QVBoxLayout*>(this->layout())->setStretch(1,1);
- LWM::SYSTEM->WM_ShowWindow(CID);
- }else if( !show && this->layout()->indexOf(WinWidget)>=0){
- LWM::SYSTEM->WM_HideWindow(CID);
- this->layout()->removeWidget(WinWidget);
- }
-}
-
-void LWindowFrame::finishedAnimation(){
- //Also set any final values
- qDebug() << " - Finished Animation:" << lastAction;
- switch(lastAction){
- case LWM::Show:
- ShowClient(true);
- break;
- case LWM::Closed:
- case LWM::Hide:
- this->lower();
- this->hide();
- LWM::SYSTEM->WM_HideWindow(this->winId());
- default:
- break;
- }
- if(Closing){
- qDebug() << "Emitting finished signal";
- emit Finished();
- }
-}
-
-// =================
-// PUBLIC SLOTS
-// =================
-void LWindowFrame::updateAppearance(){
- //Reload any button icons and such
- minB->setIcon(LXDG::findIcon("window-suppressed",""));
- maxB->setIcon(LXDG::findIcon("view-fullscreen",""));
- closeB->setIcon(LXDG::findIcon("application-exit",""));
- otherB->setIcon(LXDG::findIcon("configure",""));
-}
-
-void LWindowFrame::windowChanged(LWM::WindowAction act){
- //A window property was changed - update accordingly
- switch(act){
- case LWM::Closed:
- Closing = true;
- case LWM::Hide:
- case LWM::Show:
- showAnimation(act);
- break;
- case LWM::MoveResize:
- //Re-adjust to the new position/size of the window
- SyncSize(true);
- break;
- default:
- break; //do nothing
- }
-}
-// =================
-// PRIVATE SLOTS
-// =================
-void LWindowFrame::closeClicked(){
- qDebug() << "Closing Window" << LWM::SYSTEM->WM_ICCCM_GetClass(CID);
- //First try the close event to let the client app do cleanup/etc
- LWM::SYSTEM->WM_CloseWindow(CID);
-}
-
-void LWindowFrame::minClicked(){
- qDebug() << "Minimize Window";
- windowChanged(LWM::Hide);
-}
-
-void LWindowFrame::maxClicked(){
- if(normalGeom.isNull()){
- qDebug() << "Maximize Window";
- normalGeom = this->geometry(); //save for later
- this->showMaximized();
- }else{
- qDebug() << "Restore Window";
- this->showNormal();
- this->setGeometry(normalGeom);
- normalGeom = QRect(); //clear it
- }
-}
-
-void LWindowFrame::otherClicked(QAction* act){
- QString action = act->whatsThis();
-}
-
-void LWindowFrame::CloseAll(){
- qDebug() << " - Closing Frame";
- this->hide();
- emit Finished();
-}
-// =====================
-// PROTECTED
-// =====================
-void LWindowFrame::mousePressEvent(QMouseEvent *ev){
- qDebug() << "Frame Mouse Press Event";
- offset.setX(0); offset.setY(0);
- if(activeState != Normal){ return; } // do nothing - already in a state of grabbed mouse
- this->activateWindow();
- LWM::SYSTEM->WM_Set_Active_Window(CID);
- if(this->childAt(ev->pos())!=0){
- //Check for any non-left-click event and skip it
- if(ev->button()!=Qt::LeftButton){ return; }
- activeState = Move;
- offset.setX(ev->pos().x()); offset.setY(ev->pos().y());
- }else{
- //Clicked on the frame somewhere
- activeState = getStateAtPoint(ev->pos(), true); //also have it set the offset variable
- }
- setMouseCursor(activeState, true); //this one is an override cursor
-
-}
-
-void LWindowFrame::mouseMoveEvent(QMouseEvent *ev){
- ev->accept();
- if(activeState == Normal){
- setMouseCursor( getStateAtPoint(ev->pos()) ); //just update the mouse cursor
-
- }else{
- //Currently in a modification state
- QRect geom = this->geometry();
- switch(activeState){
- case Move:
- geom.moveTopLeft(ev->globalPos()-offset); //will not change size
- break;
- case ResizeTop:
- geom.setTop(ev->globalPos().y()-offset.y());
- break;
- case ResizeTopRight:
- geom.setTopRight(ev->globalPos()-offset);
- break;
- case ResizeRight:
- geom.setRight(ev->globalPos().x()-offset.x());
- break;
- case ResizeBottomRight:
- geom.setBottomRight(ev->globalPos()-offset);
- break;
- case ResizeBottom:
- geom.setBottom(ev->globalPos().y()-offset.y());
- break;
- case ResizeBottomLeft:
- geom.setBottomLeft(ev->globalPos()-offset);
- break;
- case ResizeLeft:
- geom.setLeft(ev->globalPos().x()-offset.x());
- break;
- case ResizeTopLeft:
- geom.setTopLeft(ev->globalPos()-offset);
- break;
- default:
- break;
- }
- this->setGeometry(geom);
- }
-}
-
-void LWindowFrame::mouseReleaseEvent(QMouseEvent *ev){
- //Check for a right-click event
- qDebug() << "Frame Mouse Release Event";
- ev->accept();
- if( (activeState==Normal) && (this->childAt(ev->pos())==titleBar) && (ev->button()==Qt::RightButton) ){
- otherM->popup(ev->globalPos());
- return;
- }
- activeState = Normal;
- QApplication::restoreOverrideCursor();
- setMouseCursor( getStateAtPoint(ev->pos()) );
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.h b/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.h
deleted file mode 100644
index ceefca83..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.h
+++ /dev/null
@@ -1,114 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_WINDOW_FRAME_H
-#define _LUMINA_DESKTOP_WINDOW_FRAME_H
-
-#include "GlobalDefines.h"
-
-class LWindowFrame : public QFrame{
- Q_OBJECT
-public:
- LWindowFrame(WId client, QWidget *parent = 0); //MUST have a valid client window
- ~LWindowFrame();
-
-private:
- void InitWindow(); //Initialize all the internal widgets
-
- //Window status
- enum ModState{Normal, Move, ResizeTop, ResizeTopRight, ResizeRight, ResizeBottomRight, ResizeBottom, ResizeBottomLeft, ResizeLeft, ResizeTopLeft};
- ModState activeState;
- QPoint offset; //needed for movement calculations (offset from mouse click to movement point)
- //Functions for getting/setting state
- ModState getStateAtPoint(QPoint pt, bool setoffset = false); //generally used for mouse location detection
- void setMouseCursor(ModState, bool override = false); //Update the mouse cursor based on state
-
- //General Properties/Modifications
- WId CID; //Client ID
- QWindow *WIN; //Embedded window container
- QWidget *WinWidget;
- bool Closing;
- LWM::WindowAction lastAction;
- //QBackingStore *WINBACK;
- void SyncSize(bool fromwin = false); //sync the window/frame geometries
- void SyncText();
-
- //Window Frame Widgets/Items
- QLabel *titleBar, *title, *icon;
- QToolButton *minB, *maxB, *closeB, *otherB;
- QMenu *otherM; //menu of "other" actions for the window
- QRect normalGeom; //used for restoring back to original size after maximization/fullscreen
-
- //Animations
- QPropertyAnimation *anim; //used for appear/disappear animations
- QRect lastGeom; //used for appear/disappear animations
- void showAnimation(LWM::WindowAction); //sets lastAction
- void ShowClient(bool show);
-
-public slots:
- //These slots are generally used for the outside event watcher to prod for changes
- void updateAppearance(); //reload the theme and change styling as necessary
- void windowChanged(LWM::WindowAction);
-
-private slots:
- void finishedAnimation(); //uses lastAction
- void closeClicked();
- void minClicked();
- void maxClicked();
- void otherClicked(QAction*);
-
- void CloseAll();
-
-protected:
- void mousePressEvent(QMouseEvent*);
- void mouseMoveEvent(QMouseEvent*);
- void mouseReleaseEvent(QMouseEvent*);
-
-signals:
- void Finished(); //This means the window is completely finished (with animations and such) and should be removed from any lists
-
-};
-
-class LWindow : public QObject{
- Q_OBJECT
-signals:
- void Finished(WId client); //ready to be removed
-private:
- WId CID;
- LWindowFrame *FID;
- bool needsFrame(QList<LXCB::WINDOWTYPE> list){
- if(list.isEmpty()){ return !LWM::SYSTEM->WM_ICCCM_GetClass(CID).contains("Lumina-DE"); } //assume a normal window (fallback)
- return !(list.contains(LXCB::T_DESKTOP) || list.contains(LXCB::T_DOCK) || list.contains(LXCB::T_TOOLBAR) \
- || list.contains(LXCB::T_SPLASH) || list.contains(LXCB::T_DROPDOWN_MENU) \
- || list.contains(LXCB::T_TOOLTIP) || list.contains(LXCB::T_POPUP_MENU) || list.contains(LXCB::T_TOOLTIP) \
- || list.contains(LXCB::T_COMBO) || list.contains(LXCB::T_DND) );
- }
-private slots:
- void frameclosed(){
- qDebug() << " - Window got frame closed signal";
- //FID->close();
- //delete FID;
- emit Finished(CID);
- }
-public:
- LWindow(WId client){
- FID= 0;
- CID = client;
- if( needsFrame(LWM::SYSTEM->WM_Get_Window_Type(CID)) ){
- FID = new LWindowFrame(CID);
- connect(FID, SIGNAL(Finished()), this, SLOT(frameclosed()) );
- }
- }
- ~LWindow(){
- if(FID!=0){delete FID;}
- }
-
- WId clientID(){ return CID; }
- bool hasFrame(){ return FID!=0; }
- LWindowFrame* frame(){ return FID; }
-
-};
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.cpp b/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.cpp
deleted file mode 100644
index 14ce6897..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "LWindowManager.h"
-
-#define DEBUG 1
-
-LWindowManager::LWindowManager(){
-
-}
-
-LWindowManager::~LWindowManager(){
-
-}
-
-bool LWindowManager::start(){
- //Setup the initial screen/session values
- LWM::SYSTEM->WM_Set_Root_Supported();
- LWM::SYSTEM->WM_SetNumber_Desktops(1);
- LWM::SYSTEM->WM_Set_Current_Desktop(0);
- LWM::SYSTEM->WM_Set_Desktop_Names(QStringList() << "one");
- QRect totgeom;
- QList<QPoint> viewports;
- QList<QRect> geoms;
- for(int i=0; i<QApplication::desktop()->screenCount(); i++){
- geoms << QApplication::desktop()->screen(i)->geometry();
- viewports << QPoint(0,0);
- totgeom = QApplication::desktop()->screen(i)->geometry();
- }
- LWM::SYSTEM->WM_Set_Desktop_Geometry(totgeom.size());
- LWM::SYSTEM->WM_Set_Desktop_Viewport(viewports);
- LWM::SYSTEM->WM_Set_Workarea(geoms);
- //Should probably do a quick loop over any existing windows with the root as parent (just in case)
- QList<WId> initial = LWM::SYSTEM->WM_RootWindows();
- for(int i=0; i<initial.length(); i++){
- NewWindow(initial[i], false); //These ones did not explicitly request to be mapped
- }
- RestackWindows();
- return true;
-}
-
-void LWindowManager::stop(){
- for(int i=0; i<WINS.length(); i++){
- if(WINS[i]->hasFrame()){
- LWM::SYSTEM->UnembedWindow(WINS[i]->clientID());
- WINS[i]->frame()->close();
- }
- }
-}
-//===============
-// PUBLIC SLOTS
-//===============
-void LWindowManager::NewWindow(WId win, bool requested){
- //Verify that this window can/should be managed first
- //if(DEBUG){ qDebug() << "New Window:" << LWM::SYSTEM->WM_ICCCM_GetClass(win); }
- QString wclass = LWM::SYSTEM->WM_ICCCM_GetClass(win);
- if( wclass.contains("lumina-wm",Qt::CaseInsensitive) ){ return; } //just in case: prevent recursion
- else{
- bool ok = (wclass.isEmpty() ? false : LWM::SYSTEM->WM_ManageWindow(win, requested) );
- if(!ok){
- //See if this window is just a transient pointing to some other window
- WId tran = LWM::SYSTEM->WM_ICCCM_GetTransientFor(win);
- if(tran!=win && tran!=0){
- win = tran;
- ok = LWM::SYSTEM->WM_ManageWindow(win);
- }
- }
- if(!ok){ return; }
- }
- if(DEBUG){ qDebug() << "New Managed Window:" << LWM::SYSTEM->WM_ICCCM_GetClass(win); }
- LWM::SYSTEM->WM_Set_Active_Window(win);
- LWindow *lwin = new LWindow(win);
- connect(lwin, SIGNAL(Finished(WId)), this, SLOT(FinishedWindow(WId)) );
- WINS << lwin;
- if(lwin->hasFrame()){
- lwin->frame()->windowChanged(LWM::Show); //Make sure to show it right away
- }else{
- LWM::SYSTEM->WM_ShowWindow(win); //just map the window right now
- }
-}
-
-void LWindowManager::ClosedWindow(WId win){
- for(int i=0; i<WINS.length(); i++){
- if(WINS[i]->clientID()==win){
- qDebug() << " - Closed Window";
- if(WINS[i]->hasFrame()){ WINS[i]->frame()->windowChanged(LWM::Closed); } //do any animations/cleanup
- else{ FinishedWindow(win); }
- break;
- }
- }
-}
-
-void LWindowManager::ModifyWindow(WId win, LWM::WindowAction act){
- for(int i=0; i<WINS.length(); i++){
- if(WINS[i]->clientID()==win){
- if(WINS[i]->hasFrame()){ WINS[i]->frame()->windowChanged(act); }
- return;
- }
- }
- //If it gets this far - it is an unmanaged window
- if(act==LWM::Show){
- NewWindow(win);
- }
- RestackWindows();
-}
-
-void LWindowManager::RestackWindows(){
- Stack_Desktop.clear(); Stack_Below.clear(); Stack_Normal.clear(); Stack_Above.clear(); Stack_Fullscreen.clear();
- QList<WId> currwins;
- int cwork = LWM::SYSTEM->WM_Get_Current_Desktop();
- int winwork = -1;
- QList<LXCB::WINDOWSTATE> states;
- QList<LXCB::WINDOWTYPE> types;
- for(int i=0; i<WINS.length(); i++){
- //Only show windows on the current desktop
- winwork = LWM::SYSTEM->WM_Get_Desktop(WINS[i]->clientID());
- states = LWM::SYSTEM->WM_Get_Window_States(WINS[i]->clientID());
- types = LWM::SYSTEM->WM_Get_Window_Type(WINS[i]->clientID());
- WId id = WINS[i]->clientID();
- if(WINS[i]->hasFrame()){ id = WINS[i]->frame()->winId(); }
- if(winwork<0 || winwork == cwork || states.contains(LXCB::S_STICKY) ){
- //Now check the state/type and put it in the proper stack
- currwins << WINS[i]->clientID(); //add this to the overall "age" list
- //Now add it to the proper stack
- if(types.contains(LXCB::T_DESKTOP)){ Stack_Desktop << id; }
- else if(states.contains(LXCB::S_BELOW)){ Stack_Below << id; }
- else if(types.contains(LXCB::T_DOCK) || states.contains(LXCB::S_ABOVE) ){ Stack_Above << id; }
- else if(states.contains(LXCB::S_FULLSCREEN)){ Stack_Fullscreen << id; }
- else{ Stack_Normal << id; }
- }
- }
- //Active Window management
- WId active = LWM::SYSTEM->WM_Get_Active_Window();
- if(Stack_Desktop.contains(active)){ Stack_Desktop.removeAll(active); Stack_Desktop << active; }
- else if(Stack_Below.contains(active)){ Stack_Below.removeAll(active); Stack_Below << active; }
- else if(Stack_Normal.contains(active)){ Stack_Normal.removeAll(active); Stack_Normal << active; }
- else if(Stack_Above.contains(active)){ Stack_Above.removeAll(active); Stack_Above << active; }
- else if(Stack_Fullscreen.contains(active)){ Stack_Fullscreen.removeAll(active); Stack_Fullscreen << active; }
-
- //Now set the root properties for these lists
- LWM::SYSTEM->WM_Set_Client_List(currwins, false); //age-ordered version
- LWM::SYSTEM->WM_Set_Client_List(QList<WId>() << Stack_Desktop << Stack_Below << Stack_Normal << Stack_Above << Stack_Fullscreen, true); //stacking order version
- //Now re-paint (in order) the windows
- RepaintWindows();
-}
-
-void LWindowManager::RepaintWindows(){
- //Go through all the current windows (in stacking order) and re-paint them
- for(int i=0; i<Stack_Desktop.length(); i++){
- LWM::SYSTEM->WM_ShowWindow(Stack_Desktop[i]);
- }
- for(int i=0; i<Stack_Below.length(); i++){
- LWM::SYSTEM->WM_ShowWindow(Stack_Below[i]);
- }
- for(int i=0; i<Stack_Normal.length(); i++){
- LWM::SYSTEM->WM_ShowWindow(Stack_Normal[i]);
- }
- for(int i=0; i<Stack_Above.length(); i++){
- LWM::SYSTEM->WM_ShowWindow(Stack_Above[i]);
- }
- for(int i=0; i<Stack_Fullscreen.length(); i++){
- LWM::SYSTEM->WM_ShowWindow(Stack_Fullscreen[i]);
- }
-}
-
-//=================
-// PRIVATE SLOTS
-//=================
-void LWindowManager::FinishedWindow(WId win){
- for(int i=0; i<WINS.length(); i++){
- if(WINS[i]->clientID() == win){
- qDebug() << " - Finished Window";
- if(win == LWM::SYSTEM->WM_Get_Active_Window()){
- if(i==0 && WINS.length()>1){ LWM::SYSTEM->WM_Set_Active_Window(WINS[i+1]->clientID()); }
- else if(i>0){ LWM::SYSTEM->WM_Set_Active_Window(WINS[i-1]->clientID()); }
- else{ LWM::SYSTEM->WM_Set_Active_Window( QX11Info::appRootWindow()); }
- }
- delete WINS.takeAt(i); break;
- }
- }
- //Now update the list of clients
- RestackWindows();
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.h b/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.h
deleted file mode 100644
index 203efa1b..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.h
+++ /dev/null
@@ -1,40 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_WINDOW_MANAGER_MAIN_CLASS_H
-#define _LUMINA_DESKTOP_WINDOW_MANAGER_MAIN_CLASS_H
-
-#include "GlobalDefines.h"
-#include "LWindow.h"
-
-class LWindowManager : public QObject{
- Q_OBJECT
-public:
- LWindowManager();
- ~LWindowManager();
-
- bool start();
- void stop();
-
-private:
- QList<LWindow*> WINS;
- QList<WId> Stack_Desktop, Stack_Below, Stack_Normal, Stack_Above, Stack_Fullscreen;
-public slots:
- void NewWindow(WId win, bool requested = true);
- void ClosedWindow(WId win);
- void ModifyWindow(WId win, LWM::WindowAction act);
-
- void RestackWindows();
- void RepaintWindows();
-
-private slots:
- void FinishedWindow(WId win); //This is used for LWindow connections/animations
-
-signals:
- void NewFullScreenWindows(QList<WId>);
-};
-
-#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.cpp b/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.cpp
deleted file mode 100644
index 4a7c6e02..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "WMSession.h"
-
-#define DEBUG 1
-// ==========
-// PUBLIC
-// ==========
-WMSession::WMSession(){
- if(DEBUG){ qDebug() << "Creating Event Filter..."; }
- EFILTER = new EventFilter();
- if(DEBUG){ qDebug() << "Creating Screen Saver..."; }
- SS = new LScreenSaver();
- if(DEBUG){ qDebug() << "Creating Window Manager..."; }
- WM = new LWindowManager();
- EVThread = new QThread();
- EFILTER->moveToThread(EVThread);
- //Setup connections
- connect(EFILTER, SIGNAL(NewInputEvent()), SS, SLOT(newInputEvent()) );
- connect(EFILTER, SIGNAL(NewManagedWindow(WId)), WM, SLOT(NewWindow(WId)) );
- connect(EFILTER, SIGNAL(WindowClosed(WId)), WM, SLOT(ClosedWindow(WId)) );
- connect(EFILTER, SIGNAL(ModifyWindow(WId, LWM::WindowAction)), WM, SLOT(ModifyWindow(WId,LWM::WindowAction)) );
- connect(SS, SIGNAL(StartingScreenSaver()), EFILTER, SLOT(StartedSS()) );
- connect(SS, SIGNAL(ClosingScreenSaver()), EFILTER, SLOT(StoppedSS()) );
- connect(WM, SIGNAL(NewFullScreenWindows(QList<WId>)), EFILTER, SLOT(FullScreenChanged(QList<WId>)) );
-}
-
-WMSession::~WMSession(){
-}
-
-void WMSession::start(bool SSONLY){
- //Get the screensaver initialized/ready
- if(DEBUG){ qDebug() << "Starting Screen Saver..."; }
- SS->start();
- if(SSONLY){ return; }
- //Now start pulling/filtering events
- if(DEBUG){ qDebug() << "Starting Window Manager..."; }
- WM->start();
- if(DEBUG){ qDebug() << "Starting Event Filter..."; }
- EVThread->start();
- EFILTER->start();
- if(DEBUG){ qDebug() << "Done Starting WM session..."; }
-}
-
-// ==========
-// Public Slots
-// ==========
-void WMSession::reloadIcons(){
-
-}
-
-void WMSession::newInputsAvailable(QStringList inputs){
- for(int i=0; i<inputs.length(); i++){
- if(inputs[i]=="--lock-now" || inputs[i]=="--test-ss"){
- QTimer::singleShot(0,SS, SLOT(LockScreenNow()) );
- }
- }
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.h b/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.h
deleted file mode 100644
index 5b511326..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.h
+++ /dev/null
@@ -1,42 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_DESKTOP_WINDOW_MANAGER_SESSION_H
-#define _LUMINA_DESKTOP_WINDOW_MANAGER_SESSION_H
-
-#include "GlobalDefines.h"
-
-#include "LScreenSaver.h"
-#include "LXcbEventFilter.h"
-#include "LWindowManager.h"
-
-class WMSession : public QObject{
- Q_OBJECT
-public:
- WMSession();
- ~WMSession();
-
- void start(bool SSONLY = false);
-
-private:
- //XCB Event Watcher
- EventFilter *EFILTER;
- //ScreenSaver
- LScreenSaver *SS;
- //Window Manager
- LWindowManager *WM;
-
- QThread *EVThread; //X Event thread
-
-public slots:
- void reloadIcons();
- void newInputsAvailable(QStringList);
-
-private slots:
-
-};
-
-#endif \ No newline at end of file
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/lumina-wm.pro b/src-qt5/core/lumina-desktop-unified/src-WM/lumina-wm.pro
deleted file mode 100644
index 928f8744..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-WM/lumina-wm.pro
+++ /dev/null
@@ -1,107 +0,0 @@
-include("$${PWD}/../../OS-detect.pri")
-
-QT += core gui network
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets x11extras
-
-TARGET = lumina-wm
-target.path = $${L_BINDIR}
-
-LIBS += -lLuminaUtils -lxcb -lxcb-damage -lxcb-composite -lxcb-screensaver -lxcb-util
-
-DEPENDPATH += ../libLumina
-
-SOURCES += main.cpp \
- WMSession.cpp \
- LScreenSaver.cpp \
- SSBaseWidget.cpp \
- LLockScreen.cpp \
- LXcbEventFilter.cpp \
- LWindow.cpp \
- LWindowManager.cpp
-
-
-HEADERS += GlobalDefines.h \
- WMSession.h \
- LScreenSaver.h \
- SSBaseWidget.h \
- LLockScreen.h \
- LXcbEventFilter.h \
- LWindow.h \
- LWindowManager.h
-
-FORMS += LLockScreen.ui
-
-#Now add in all the screensaver animation plugins
-include(animations/animations.pri)
-
-TRANSLATIONS = i18n/lumina-wm_af.ts \
- i18n/lumina-wm_ar.ts \
- i18n/lumina-wm_az.ts \
- i18n/lumina-wm_bg.ts \
- i18n/lumina-wm_bn.ts \
- i18n/lumina-wm_bs.ts \
- i18n/lumina-wm_ca.ts \
- i18n/lumina-wm_cs.ts \
- i18n/lumina-wm_cy.ts \
- i18n/lumina-wm_da.ts \
- i18n/lumina-wm_de.ts \
- i18n/lumina-wm_el.ts \
- i18n/lumina-wm_en_GB.ts \
- i18n/lumina-wm_en_ZA.ts \
- i18n/lumina-wm_es.ts \
- i18n/lumina-wm_et.ts \
- i18n/lumina-wm_eu.ts \
- i18n/lumina-wm_fa.ts \
- i18n/lumina-wm_fi.ts \
- i18n/lumina-wm_fr.ts \
- i18n/lumina-wm_fr_CA.ts \
- i18n/lumina-wm_gl.ts \
- i18n/lumina-wm_he.ts \
- i18n/lumina-wm_hi.ts \
- i18n/lumina-wm_hr.ts \
- i18n/lumina-wm_hu.ts \
- i18n/lumina-wm_id.ts \
- i18n/lumina-wm_is.ts \
- i18n/lumina-wm_it.ts \
- i18n/lumina-wm_ja.ts \
- i18n/lumina-wm_ka.ts \
- i18n/lumina-wm_ko.ts \
- i18n/lumina-wm_lt.ts \
- i18n/lumina-wm_lv.ts \
- i18n/lumina-wm_mk.ts \
- i18n/lumina-wm_mn.ts \
- i18n/lumina-wm_ms.ts \
- i18n/lumina-wm_mt.ts \
- i18n/lumina-wm_nb.ts \
- i18n/lumina-wm_nl.ts \
- i18n/lumina-wm_pa.ts \
- i18n/lumina-wm_pl.ts \
- i18n/lumina-wm_pt.ts \
- i18n/lumina-wm_pt_BR.ts \
- i18n/lumina-wm_ro.ts \
- i18n/lumina-wm_ru.ts \
- i18n/lumina-wm_sk.ts \
- i18n/lumina-wm_sl.ts \
- i18n/lumina-wm_sr.ts \
- i18n/lumina-wm_sv.ts \
- i18n/lumina-wm_sw.ts \
- i18n/lumina-wm_ta.ts \
- i18n/lumina-wm_tg.ts \
- i18n/lumina-wm_th.ts \
- i18n/lumina-wm_tr.ts \
- i18n/lumina-wm_uk.ts \
- i18n/lumina-wm_uz.ts \
- i18n/lumina-wm_vi.ts \
- i18n/lumina-wm_zh_CN.ts \
- i18n/lumina-wm_zh_HK.ts \
- i18n/lumina-wm_zh_TW.ts \
- i18n/lumina-wm_zu.ts
-
-dotrans.path=$${L_SHAREDIR}/lumina-desktop/i18n/
-dotrans.extra=cd i18n && $${LRELEASE} -nounfinished *.ts && cp *.qm $(INSTALL_ROOT)$${L_SHAREDIR}/lumina-desktop/i18n/
-
-INSTALLS += target
-
-WITH_I18N{
- INSTALLS += dotrans
-}
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/main.cpp b/src-qt5/core/lumina-desktop-unified/src-WM/main.cpp
deleted file mode 100644
index 02e48b7b..00000000
--- a/src-qt5/core/lumina-desktop-unified/src-WM/main.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-
-#include "GlobalDefines.h"
-//Initialize any global structures here
-LXCB *LWM::SYSTEM = 0;
-
-//Local includes
-#include "WMSession.h"
-#include "LWindow.h"
-#include <QDialog>
-
-
-//#define DEBUG 0
-int main(int argc, char ** argv)
-{
- qDebug() << "Starting lumina-wm...";
- LTHEME::LoadCustomEnvSettings();
- LSingleApplication a(argc, argv, "lumina-wm");
- if(!a.isPrimaryProcess()){ return 0; } //Inputs forwarded on to the primary already
- LuminaThemeEngine themes(&a);
-
- //Setup the global structures
- LWM::SYSTEM = new LXCB();
- if( a.inputlist.contains("--test-win") ){
- //Simple override to test out the window class
- qDebug() << "Starting window test...";
- QLabel dlg(0, Qt::Window | Qt::BypassWindowManagerHint); //this test should be ignored by the current WM
- dlg.setText("Sample Window");
- dlg.setWindowTitle("Test");
- dlg.resize(200,100);
- dlg.setStyleSheet("background: rgba(255,255,255,100); color: black;");
- dlg.move(100,100);
- dlg.show();
- //dlg.move(100,100);
- qDebug() << " - Loading window frame...";
- LWindow win(dlg.winId()); //have it wrap around the dialog
- qDebug() << " - Show frame...";
- win.frame()->windowChanged(LWM::Show);
- qDebug() << " - Start event loop...";
- a.setQuitOnLastWindowClosed(true);
- return a.exec();
- }
- WMSession w;
- w.start(a.inputlist.contains("--test-ss"));
- QObject::connect(&themes, SIGNAL(updateIcons()), &w, SLOT(reloadIcons()) );
- QObject::connect(&a, SIGNAL(InputsAvailable(QStringList)), &w, SLOT(newInputsAvailable(QStringList)) );
- if(!a.inputlist.isEmpty()){ w.newInputsAvailable(a.inputlist); }
- int retCode = a.exec();
-
- return retCode;
-}
bgstack15