diff options
author | Ken Moore <moorekou@gmail.com> | 2015-09-10 12:38:20 -0400 |
---|---|---|
committer | Ken Moore <moorekou@gmail.com> | 2015-09-10 12:38:20 -0400 |
commit | 86543e806e27b8317eddce54fee9e0b04a031b51 (patch) | |
tree | 5f9046202839cbc6dc7b9b2aa9d6ad088ed811f9 | |
parent | Merge pull request #154 from harcobbit/issue/11233 (diff) | |
download | lumina-86543e806e27b8317eddce54fee9e0b04a031b51.tar.gz lumina-86543e806e27b8317eddce54fee9e0b04a031b51.tar.bz2 lumina-86543e806e27b8317eddce54fee9e0b04a031b51.zip |
Add a new panel plugin: systemstart
This plugins is an overall "start" menu for the system, combining the functionality of the userbutton and the system dashboard into a single unified interface.
-rw-r--r-- | lumina-desktop/LSession.cpp | 21 | ||||
-rw-r--r-- | lumina-desktop/LXcbEventFilter.cpp | 4 | ||||
-rw-r--r-- | lumina-desktop/lumina-desktop.pro | 7 | ||||
-rw-r--r-- | lumina-desktop/main.cpp | 6 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/NewPP.h | 3 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp | 192 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemstart/ItemWidget.h | 80 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemstart/LStartButton.cpp | 52 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemstart/LStartButton.h | 74 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemstart/StartMenu.cpp | 425 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemstart/StartMenu.h | 89 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemstart/StartMenu.ui | 1021 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemtray/LSysTray.cpp | 4 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp | 8 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemtray/TrayIcon.h | 3 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/userbutton/LUserButton.h | 2 |
16 files changed, 1969 insertions, 22 deletions
diff --git a/lumina-desktop/LSession.cpp b/lumina-desktop/LSession.cpp index 0425b971..bd9ffeaa 100644 --- a/lumina-desktop/LSession.cpp +++ b/lumina-desktop/LSession.cpp @@ -19,7 +19,7 @@ #include <unistd.h> //for usleep() usage #ifndef DEBUG -#define DEBUG 0 +#define DEBUG 1 #endif XCBEventFilter *evFilter = 0; @@ -33,6 +33,7 @@ LSession::LSession(int &argc, char ** argv) : QApplication(argc, argv){ this->setEffectEnabled( Qt::UI_AnimateMenu, true); this->setEffectEnabled( Qt::UI_AnimateCombo, true); this->setEffectEnabled( Qt::UI_AnimateTooltip, true); + this->setAttribute(Qt::AA_UseDesktopOpenGL); //this->setAttribute(Qt::AA_UseHighDpiPixmaps); //allow pixmaps to be scaled up as well as down //this->setStyle( new MenuProxyStyle); //QMenu icon size override SystemTrayID = 0; VisualTrayID = 0; @@ -675,7 +676,7 @@ void LSession::WindowPropertyEvent(){ QList<WId> newapps = XCB->WindowList(); if(RunningApps.length() < newapps.length()){ //New Window found - qDebug() << "New window found"; + //qDebug() << "New window found"; LSession::restoreOverrideCursor(); //restore the mouse cursor back to normal (new window opened?) //Perform sanity checks on any new window geometries for(int i=0; i<newapps.length() && !TrayStopping; i++){ @@ -695,6 +696,8 @@ void LSession::WindowPropertyEvent(WId win){ if(RunningApps.contains(win)){ if(DEBUG){ qDebug() << "Single-window property event"; } emit WindowListEvent(); + }else if(RunningTrayApps.contains(win)){ + emit TrayIconChanged(win); } } @@ -710,24 +713,18 @@ void LSession::WindowClosedEvent(WId win){ void LSession::WindowConfigureEvent(WId win){ if(TrayStopping){ return; } - for(int i=0; i<RunningTrayApps.length(); i++){ - if(win==RunningTrayApps[i]){ + if(RunningTrayApps.contains(win)){ if(DEBUG){ qDebug() << "SysTray: Configure Event"; } - emit TrayIconChanged(RunningTrayApps[i]); //trigger a repaint event - break; + emit TrayIconChanged(win); //trigger a repaint event } - } } void LSession::WindowDamageEvent(WId win){ if(TrayStopping){ return; } - for(int i=0; i<RunningTrayApps.length(); i++){ - if(win==RunningTrayApps[i]){ + if(RunningTrayApps.contains(win)){ if(DEBUG){ qDebug() << "SysTray: Damage Event"; } - emit TrayIconChanged(RunningTrayApps[i]); //trigger a repaint event - break; + emit TrayIconChanged(win); //trigger a repaint event } - } } void LSession::WindowSelectionClearEvent(WId win){ diff --git a/lumina-desktop/LXcbEventFilter.cpp b/lumina-desktop/LXcbEventFilter.cpp index 32190d55..a3a8147b 100644 --- a/lumina-desktop/LXcbEventFilter.cpp +++ b/lumina-desktop/LXcbEventFilter.cpp @@ -95,9 +95,9 @@ bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *messag //============================== default: if(TrayDmgFlag!=0){ - if( (ev->response_type & ~0x80)==TrayDmgFlag){ + //if( (ev->response_type & ~0x80)==TrayDmgFlag){ session->WindowDamageEvent( ((xcb_damage_notify_event_t*)ev)->drawable ); - } + //} }/*else{ qDebug() << "Default Event:" << (ev->response_type & ~0x80); }*/ diff --git a/lumina-desktop/lumina-desktop.pro b/lumina-desktop/lumina-desktop.pro index 533c1631..0d31d60f 100644 --- a/lumina-desktop/lumina-desktop.pro +++ b/lumina-desktop/lumina-desktop.pro @@ -52,6 +52,9 @@ SOURCES += main.cpp \ panel-plugins/showdesktop/LHomeButton.cpp \ panel-plugins/appmenu/LAppMenuPlugin.cpp \ panel-plugins/applauncher/AppLaunchButton.cpp \ + panel-plugins/systemstart/LStartButton.cpp \ + panel-plugins/systemstart/StartMenu.cpp \ + panel-plugins/systemstart/ItemWidget.cpp \ desktop-plugins/LDPlugin.cpp \ desktop-plugins/applauncher/AppLauncherPlugin.cpp \ desktop-plugins/desktopview/DesktopViewPlugin.cpp \ @@ -95,6 +98,9 @@ HEADERS += Globals.h \ panel-plugins/showdesktop/LHomeButton.h \ panel-plugins/appmenu/LAppMenuPlugin.h \ panel-plugins/applauncher/AppLaunchButton.h \ + panel-plugins/systemstart/LStartButton.h \ + panel-plugins/systemstart/StartMenu.h \ + panel-plugins/systemstart/ItemWidget.h \ # panel-plugins/quickcontainer/QuickPPlugin.h \ desktop-plugins/SamplePlugin.h \ desktop-plugins/calendar/CalendarPlugin.h \ @@ -110,6 +116,7 @@ FORMS += SystemWindow.ui \ BootSplash.ui \ panel-plugins/userbutton/UserWidget.ui \ panel-plugins/systemdashboard/SysMenuQuick.ui \ + panel-plugins/systemstart/StartMenu.ui \ desktop-plugins/audioplayer/PlayerWidget.ui \ desktop-plugins/systemmonitor/MonitorWidget.ui diff --git a/lumina-desktop/main.cpp b/lumina-desktop/main.cpp index 9415bd62..2feaa4ad 100644 --- a/lumina-desktop/main.cpp +++ b/lumina-desktop/main.cpp @@ -35,15 +35,15 @@ void MessageOutput(QtMsgType type, const QMessageLogContext &context, const QStr break; case QtWarningMsg: txt = QString("Warning: %1").arg(msg); - txt += "Context: "+QString(context.file)+" Line: "+QString(context.line)+" Function: "+QString(context.function); + txt += "\nContext: "+QString(context.file)+" Line: "+QString(context.line)+" Function: "+QString(context.function); break; case QtCriticalMsg: txt = QString("CRITICAL: %1").arg(msg); - txt += "Context: "+QString(context.file)+" Line: "+QString(context.line)+" Function: "+QString(context.function); + txt += "\nContext: "+QString(context.file)+" Line: "+QString(context.line)+" Function: "+QString(context.function); break; case QtFatalMsg: txt = QString("FATAL: %1").arg(msg); - txt += "Context: "+QString(context.file)+" Line: "+QString(context.line)+" Function: "+QString(context.function); + txt += "\nContext: "+QString(context.file)+" Line: "+QString(context.line)+" Function: "+QString(context.function); break; } diff --git a/lumina-desktop/panel-plugins/NewPP.h b/lumina-desktop/panel-plugins/NewPP.h index 2a061a23..f43f8803 100644 --- a/lumina-desktop/panel-plugins/NewPP.h +++ b/lumina-desktop/panel-plugins/NewPP.h @@ -24,6 +24,7 @@ #include "showdesktop/LHomeButton.h" #include "appmenu/LAppMenuPlugin.h" #include "applauncher/AppLaunchButton.h" +#include "systemstart/LStartButton.h" //#include "quickcontainer/QuickPPlugin.h" #include "systemtray/LSysTray.h" //must be last due to X11 compile issues @@ -54,6 +55,8 @@ public: plug = new LSysDashboard(parent, plugin, horizontal); }else if(plugin.startsWith("appmenu---")){ plug = new LAppMenuPlugin(parent, plugin, horizontal); + }else if(plugin.startsWith("systemstart---")){ + plug = new LStartButtonPlugin(parent, plugin, horizontal); }else if(plugin.section("---",0,0).section("::",0,0)=="applauncher"){ plug = new AppLaunchButtonPlugin(parent, plugin, horizontal); //}else if( plugin.section("---",0,0).startsWith("quick-") && LUtils::validQuickPlugin(plugin.section("---",0,0)) ){ diff --git a/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp b/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp new file mode 100644 index 00000000..94c7bfc6 --- /dev/null +++ b/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp @@ -0,0 +1,192 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "ItemWidget.h" +#include <LuminaUtils.h> +#include <QMenu> + +#define TEXTCUTOFF 165 +ItemWidget::ItemWidget(QWidget *parent, QString itemPath, QString type, bool goback) : QFrame(parent){ + createWidget(); + //Now fill it appropriately + bool inHome = type.endsWith("-home"); //internal code + if(inHome){ type = type.remove("-home"); } + if(itemPath.endsWith(".desktop") || type=="app"){ + bool ok = false; + XDGDesktop item = LXDG::loadDesktopFile(itemPath, ok); + if(ok && LXDG::checkValidity(item) ){ + icon->setPixmap( LXDG::findIcon(item.icon, "preferences-system-windows-actions").pixmap(32,32) ); + name->setText( this->fontMetrics().elidedText(item.name, Qt::ElideRight, TEXTCUTOFF) ); + setupActions(item); + }else{ + gooditem = false; + return; + } + }else if(type=="dir"){ + actButton->setVisible(false); + if(itemPath.endsWith("/")){ itemPath.chop(1); } + if(goback){ + icon->setPixmap( LXDG::findIcon("go-previous","").pixmap(32,32) ); + name->setText( tr("Go Back") ); + }else{ + icon->setPixmap( LXDG::findIcon("folder","").pixmap(32,32) ); + name->setText( this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) ); + } + }else{ + actButton->setVisible(false); + if(itemPath.endsWith("/")){ itemPath.chop(1); } + if(QFileInfo(itemPath).isDir()){ + type = "dir"; + icon->setPixmap( LXDG::findIcon("folder","").pixmap(32,32) ); + }else if(LUtils::imageExtensions().contains(itemPath.section("/",-1).section(".",-1).toLower()) ){ + icon->setPixmap( QIcon(itemPath).pixmap(32,32) ); + }else{ + icon->setPixmap( LXDG::findMimeIcon(itemPath.section("/",-1)).pixmap(32,32) ); + } + name->setText( this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) ); + } + icon->setWhatsThis(itemPath); + if(!goback){ this->setWhatsThis(name->text()); } + isDirectory = (type=="dir"); //save this for later + if(LUtils::isFavorite(itemPath)){ + linkPath = itemPath; + isShortcut=true; + }else if( inHome ){//|| itemPath.section("/",0,-2)==QDir::homePath()+"/Desktop" ){ + isShortcut = true; + }else{ + isShortcut = false; + } + if(isShortcut){ + name->setToolTip(icon->whatsThis()); //also allow the user to see the full shortcut path + } + //Now setup the button appropriately + setupContextMenu(); +} + +ItemWidget::ItemWidget(QWidget *parent, XDGDesktop item) : QFrame(parent){ + createWidget(); + isDirectory = false; + if(LUtils::isFavorite(item.filePath)){ + linkPath = item.filePath; + isShortcut=true; + }else if( item.filePath.section("/",0,-2)==QDir::homePath()+"/Desktop" ){ + isShortcut = true; + }else{ + isShortcut = false; + } + if(isShortcut){ + name->setToolTip(icon->whatsThis()); //also allow the user to see the full shortcut path + } + //Now fill it appropriately + icon->setPixmap( LXDG::findIcon(item.icon,"preferences-system-windows-actions").pixmap(32,32) ); + name->setText( this->fontMetrics().elidedText(item.name, Qt::ElideRight, TEXTCUTOFF) ); + this->setWhatsThis(name->text()); + icon->setWhatsThis(item.filePath); + //Now setup the buttons appropriately + setupContextMenu(); + setupActions(item); +} + +ItemWidget::~ItemWidget(){ +} + + +void ItemWidget::createWidget(){ + //Initialize the widgets + gooditem = true; + menuopen = false; + menureset = new QTimer(this); + menureset->setSingleShot(true); + menureset->setInterval(1000); //1 second + this->setContentsMargins(0,0,0,0); + contextMenu = new QMenu(); + connect(contextMenu, SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) ); + connect(contextMenu, SIGNAL(aboutToHide()), this, SLOT(actionMenuClosed()) ); + /*button = new QToolButton(this); + button->setIconSize( QSize(14,14) ); + button->setAutoRaise(true);*/ + actButton = new QToolButton(this); + actButton->setPopupMode(QToolButton::InstantPopup); + actButton->setFixedSize( QSize(17,34) ); + actButton->setArrowType(Qt::DownArrow); + icon = new QLabel(this); + icon->setFixedSize( QSize(34,34) ); + name = new QLabel(this); + //Add them to the layout + this->setLayout(new QHBoxLayout()); + this->layout()->setContentsMargins(1,1,1,1); + this->layout()->addWidget(icon); + this->layout()->addWidget(actButton); + this->layout()->addWidget(name); + //Set a custom object name so this can be tied into the Lumina Theme stylesheets + this->setObjectName("LuminaItemWidget"); +} + +void ItemWidget::setupContextMenu(){ + //Now refresh the context menu + contextMenu->clear(); + if(!QFile::exists(QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1)) ){ + //Does not have a desktop link + contextMenu->addAction( LXDG::findIcon("preferences-desktop-icons",""), tr("Pin to Desktop"), this, SLOT(PinToDesktop()) ); + } + //Favorite Item + if( LUtils::isFavorite(icon->whatsThis()) ){ //Favorite Item - can always remove this + contextMenu->addAction( LXDG::findIcon("edit-delete",""), tr("Remove from Favorites"), this, SLOT(RemoveFavorite()) ); + }else{ + //This file does not have a shortcut yet -- allow the user to add it + contextMenu->addAction( LXDG::findIcon("bookmark-toolbar",""), tr("Add to Favorites"), this, SLOT(AddFavorite()) ); + } +} + +void ItemWidget::setupActions(XDGDesktop app){ + if(app.actions.isEmpty()){ actButton->setVisible(false); return; } + //Actions Available - go ahead and list them all + actButton->setMenu( new QMenu(this) ); + for(int i=0; i<app.actions.length(); i++){ + QAction *act = new QAction(LXDG::findIcon(app.actions[i].icon, app.icon), app.actions[i].name, this); + act->setToolTip(app.actions[i].ID); + act->setWhatsThis(app.actions[i].ID); + actButton->menu()->addAction(act); + } + connect(actButton->menu(), SIGNAL(triggered(QAction*)), this, SLOT(actionClicked(QAction*)) ); + connect(actButton->menu(), SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) ); + connect(actButton->menu(), SIGNAL(aboutToHide()), this, SLOT(actionMenuClosed()) ); + connect(menureset, SIGNAL(timeout()), this, SLOT(resetmenuflag()) ); +} + +void ItemWidget::PinToDesktop(){ + qDebug() << "Create Link on Desktop:" << icon->whatsThis(); + bool ok = QFile::link(icon->whatsThis(), QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1)); + qDebug() << " - " << (ok ? "Success": "Failure"); +} + +void ItemWidget::RemoveFavorite(){ + LUtils::removeFavorite(icon->whatsThis()); + linkPath.clear(); + emit RemovedShortcut(); +} + +void ItemWidget::AddFavorite(){ + if( LUtils::addFavorite(icon->whatsThis()) ){ + linkPath = icon->whatsThis(); + emit NewShortcut(); + } + +} + + +void ItemWidget::ItemClicked(){ + if(!linkPath.isEmpty()){ emit RunItem(linkPath); } + else{ emit RunItem(icon->whatsThis()); } +} + +void ItemWidget::actionClicked(QAction *act){ + actButton->menu()->hide(); + QString cmd = "lumina-open -action \""+act->whatsThis()+"\" \"%1\""; + if(!linkPath.isEmpty()){ cmd = cmd.arg(linkPath); } + else{ cmd = cmd.arg(icon->whatsThis()); } + emit RunItem(cmd); +}
\ No newline at end of file diff --git a/lumina-desktop/panel-plugins/systemstart/ItemWidget.h b/lumina-desktop/panel-plugins/systemstart/ItemWidget.h new file mode 100644 index 00000000..6aa8b037 --- /dev/null +++ b/lumina-desktop/panel-plugins/systemstart/ItemWidget.h @@ -0,0 +1,80 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This item widget manages a single file/directory +//=========================================== +#ifndef _LUMINA_PANEL_SYSTEM_START_ITEM_WIDGET_H +#define _LUMINA_PANEL_SYSTEM_START_ITEM_WIDGET_H + +#include <QFrame> +#include <QLabel> +#include <QToolButton> +#include <QString> +#include <QHBoxLayout> +#include <QSize> +#include <QDir> +#include <QFile> +#include <QMouseEvent> +#include <QAction> +#include <QMenu> +#include <QTimer> + +#include <LuminaXDG.h> + +class ItemWidget : public QFrame{ + Q_OBJECT +public: + ItemWidget(QWidget *parent=0, QString itemPath="", QString type="unknown", bool goback=false); + ItemWidget(QWidget *parent=0, XDGDesktop item= XDGDesktop()); + ~ItemWidget(); + + bool gooditem; +private: + QToolButton *actButton; + QMenu *contextMenu; + QLabel *icon, *name; + bool isDirectory, isShortcut, menuopen; + QString linkPath; + QTimer *menureset; + + void createWidget(); + //void setupButton(bool disable = false); + void setupContextMenu(); + void setupActions(XDGDesktop); + +private slots: + void PinToDesktop(); + void RemoveFavorite(); + void AddFavorite(); + void ItemClicked(); + void actionClicked(QAction*); + //Functions to fix the submenu open/close issues + void actionMenuOpen(){ + if(menureset->isActive()){ menureset->stop(); } + menuopen = true; + } + void resetmenuflag(){ menuopen = false; } //tied to the "menureset" timer + void actionMenuClosed(){ menureset->start(); } + + +protected: + void mouseReleaseEvent(QMouseEvent *event){ + if(menuopen){ resetmenuflag(); } //skip this event if a submenu was open + else if(event->button() == Qt::RightButton){ + menuopen = true; + setupContextMenu(); + contextMenu->popup(event->globalPos()); + }else if(event->button() != Qt::NoButton){ ItemClicked(); } + } + +signals: + void NewShortcut(); + void RemovedShortcut(); + void RunItem(QString cmd); + +}; + +#endif diff --git a/lumina-desktop/panel-plugins/systemstart/LStartButton.cpp b/lumina-desktop/panel-plugins/systemstart/LStartButton.cpp new file mode 100644 index 00000000..cb43b7c3 --- /dev/null +++ b/lumina-desktop/panel-plugins/systemstart/LStartButton.cpp @@ -0,0 +1,52 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LStartButton.h" +#include "../../LSession.h" + +LStartButtonPlugin::LStartButtonPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + button = new QToolButton(this); + button->setAutoRaise(true); + button->setToolButtonStyle(Qt::ToolButtonIconOnly); + button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first + connect(button, SIGNAL(clicked()), this, SLOT(openMenu())); + this->layout()->setContentsMargins(0,0,0,0); + this->layout()->addWidget(button); + menu = new QMenu(this); + menu->setContentsMargins(1,1,1,1); + startmenu = new StartMenu(this); + connect(startmenu, SIGNAL(CloseMenu()), this, SLOT(closeMenu()) ); + mact = new QWidgetAction(this); + mact->setDefaultWidget(startmenu); + menu->addAction(mact); + + button->setMenu(menu); + connect(menu, SIGNAL(aboutToHide()), this, SLOT(updateButtonVisuals()) ); + QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes +} + +LStartButtonPlugin::~LStartButtonPlugin(){ + +} + +void LStartButtonPlugin::updateButtonVisuals(){ + button->setToolTip(tr("")); + button->setText( SYSTEM::user() ); + button->setIcon( LXDG::findIcon("pcbsd","Lumina-DE") ); //force icon refresh +} + +// ======================== +// PRIVATE FUNCTIONS +// ======================== +void LStartButtonPlugin::openMenu(){ + startmenu->UpdateMenu(); + button->showMenu(); +} + +void LStartButtonPlugin::closeMenu(){ + menu->hide(); +} + diff --git a/lumina-desktop/panel-plugins/systemstart/LStartButton.h b/lumina-desktop/panel-plugins/systemstart/LStartButton.h new file mode 100644 index 00000000..61a43731 --- /dev/null +++ b/lumina-desktop/panel-plugins/systemstart/LStartButton.h @@ -0,0 +1,74 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This panel plugin is the main button that allow the user to run +// applications or logout of the desktop +//=========================================== +#ifndef _LUMINA_DESKTOP_START_MENU_PLUGIN_H +#define _LUMINA_DESKTOP_START_MENU_PLUGIN_H + +// Qt includes +#include <QMenu> +#include <QWidgetAction> +#include <QToolButton> +#include <QString> +#include <QWidget> + + +// Lumina-desktop includes +//#include "../../Globals.h" +#include "../LPPlugin.h" //main plugin widget + +// libLumina includes +#include "LuminaXDG.h" + +#include "StartMenu.h" + +// PANEL PLUGIN BUTTON +class LStartButtonPlugin : public LPPlugin{ + Q_OBJECT + +public: + LStartButtonPlugin(QWidget *parent = 0, QString id = "systemstart", bool horizontal=true); + ~LStartButtonPlugin(); + +private: + QMenu *menu; + QWidgetAction *mact; + StartMenu *startmenu; + QToolButton *button; + +private slots: + void openMenu(); + void closeMenu(); + + void updateButtonVisuals(); + +public slots: + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + button->setIconSize( QSize(this->height(), this->height()) ); + }else{ + this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + button->setIconSize( QSize(this->width(), this->width()) ); + } + this->layout()->update(); + updateButtonVisuals(); + } + + void LocaleChange(){ + updateButtonVisuals(); + startmenu->UpdateAll(); + } + + void ThemeChange(){ + updateButtonVisuals(); + startmenu->UpdateAll(); + } +}; + +#endif
\ No newline at end of file diff --git a/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp b/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp new file mode 100644 index 00000000..cc8a55e3 --- /dev/null +++ b/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp @@ -0,0 +1,425 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "StartMenu.h" +#include "ui_StartMenu.h" + +#include <LuminaOS.h> +#include "../../LSession.h" + +#include "ItemWidget.h" +//#define SSAVER QString("xscreensaver-demo") + +StartMenu::StartMenu(QWidget *parent) : QWidget(parent), ui(new Ui::StartMenu){ + ui->setupUi(this); //load the designer file + sysapps = LSession::handle()->applicationMenu()->currentAppHash(); + connect(LSession::handle()->applicationMenu(), SIGNAL(AppMenuUpdated()), this, SLOT(UpdateApps()) ); + UpdateAll(); + QTimer::singleShot(10, this,SLOT(UpdateApps())); + QTimer::singleShot(10, this, SLOT(UpdateFavs())); +} + +StartMenu::~StartMenu(){ + +} + +void StartMenu::UpdateAll(){ + //Update all the icons/text on all the pages + + // Update Text + ui->retranslateUi(this); + + //Update Icons + ui->tool_goto_apps->setIcon(LXDG::findIcon("system-run","")); + ui->tool_goto_settings->setIcon(LXDG::findIcon("preferences-system","")); + ui->tool_launch_fm->setIcon(LXDG::findIcon("user-home","")); + ui->tool_launch_desksettings->setIcon(LXDG::findIcon("preferences-desktop","")); + ui->tool_lock->setIcon(LXDG::findIcon("system-lock-screen","")); + ui->tool_goto_logout->setIcon(LXDG::findIcon("system-log-out","")); + ui->tool_back->setIcon(LXDG::findIcon("go-back","")); + ui->tool_launch_deskinfo->setIcon(LXDG::findIcon("system-help","")); + + ui->label_bright_icon->setPixmap( LXDG::findIcon("preferences-system-power-management","").pixmap(ui->tool_goto_apps->iconSize()) ); + ui->label_locale_icon->setPixmap( LXDG::findIcon("preferences-desktop-locale","").pixmap(ui->tool_goto_apps->iconSize()) ); + ui->tool_set_nextwkspace->setIcon(LXDG::findIcon("go-next-view","")); + ui->tool_set_prevwkspace->setIcon(LXDG::findIcon("go-previous-view","")); + ui->tool_logout->setIcon(LXDG::findIcon("system-log-out","")); + ui->tool_restart->setIcon(LXDG::findIcon("system-reboot","")); + ui->tool_shutdown->setIcon(LXDG::findIcon("system-shutdown","")); + ui->tool_suspend->setIcon(LXDG::findIcon("system-suspend","")); + + //Update Visibility of system/session/OS options + // -- Control Panel + QString tmp = LOS::ControlPanelShortcut(); + if(QFile::exists(tmp)){ + ui->tool_launch_controlpanel->setWhatsThis(tmp); + //Now read the file to see which icon to use + bool ok = false; + XDGDesktop desk = LXDG::loadDesktopFile(tmp, ok); + if(ok && LXDG::checkValidity(desk)){ + ui->tool_launch_controlpanel->setIcon(LXDG::findIcon(desk.icon,"preferences-other")); + }else{ ui->tool_launch_controlpanel->setVisible(false); } + }else{ ui->tool_launch_controlpanel->setVisible(false); } + // -- App Store + tmp = LOS::AppStoreShortcut(); + if(QFile::exists(tmp)){ + ui->tool_launch_store->setWhatsThis(tmp); + //Now read the file to see which icon to use + bool ok = false; + XDGDesktop desk = LXDG::loadDesktopFile(tmp, ok); + if(ok && LXDG::checkValidity(desk)){ + ui->tool_launch_store->setIcon(LXDG::findIcon(desk.icon,"utilities-file-archiver")); + }else{ ui->tool_launch_store->setVisible(false); } + }else{ ui->tool_launch_store->setVisible(false); } + //Audio Controls + ui->frame_audio->setVisible( LOS::audioVolume() >=0 ); + //Brightness controls + ui->frame_bright->setVisible( LOS::ScreenBrightness() >=0 ); + //Shutdown/restart + bool ok = LOS::userHasShutdownAccess(); + ui->frame_leave_system->setWhatsThis(ok ? "allowed": ""); + ui->frame_leave_system->setVisible(ok); + //Battery Availability + ok = LOS::hasBattery(); + ui->label_status_battery->setWhatsThis(ok ? "allowed": ""); + ui->label_status_battery->setVisible(ok); + //Locale availability + QStringList locales = LUtils::knownLocales(); + ui->stackedWidget->setCurrentWidget(ui->page_main); //need to ensure the settings page is not active + ui->combo_locale->clear(); + QLocale curr; + for(int i=0; i<locales.length(); i++){ + QLocale loc(locales[i]); + ui->combo_locale->addItem(loc.nativeLanguageName(), locales[i]); //Make the display text prettier later + if(locales[i] == curr.name() || locales[i] == curr.name().section("_",0,0) ){ + //Current Locale + ui->combo_locale->setCurrentIndex(ui->combo_locale->count()-1); //the last item in the list right now + } + } + ui->frame_locale->setVisible(locales.length() > 1); + //User Name in status bar + ui->label_status->setText( QString::fromLocal8Bit(getlogin()) ); + //Lumina Utilities + ui->tool_launch_desksettings->setVisible(LUtils::isValidBinary("lumina-config")); + ui->tool_launch_deskinfo->setVisible(LUtils::isValidBinary("lumina-info")); +} + +void StartMenu::UpdateMenu(bool forceall){ + if(forceall){ UpdateAll(); } + //Quick update routine before the menu is made visible + UpdateFavs(); + if(ui->stackedWidget->currentWidget() != ui->page_main){ + ui->stackedWidget->setCurrentWidget(ui->page_main); //just show the main page + }else{ + on_stackedWidget_currentChanged(0); //refresh/update the main page every time + } +} +// ========================== +// PRIVATE FUNCTIONS +// ========================== +void StartMenu::ClearScrollArea(QScrollArea *area){ + QWidget *wgt = area->takeWidget(); + delete wgt; //delete the widget and all children + area->setWidget( new QWidget() ); //create a new widget in the scroll area + area->widget()->setContentsMargins(0,0,0,0); + QVBoxLayout *layout = new QVBoxLayout; + layout->setSpacing(2); + layout->setContentsMargins(3,1,3,1); + layout->setDirection(QBoxLayout::TopToBottom); + layout->setAlignment(Qt::AlignTop); + area->widget()->setLayout(layout); +} + +void StartMenu::SortScrollArea(QScrollArea *area){ + //qDebug() << "Sorting Scroll Area:"; + //Sort all the items in the scroll area alphabetically + QLayout *lay = area->widget()->layout(); + QStringList items; + for(int i=0; i<lay->count(); i++){ + items << lay->itemAt(i)->widget()->whatsThis(); + } + + items.sort(); + //qDebug() << " - Sorted Items:" << items; + for(int i=0; i<items.length(); i++){ + if(items[i].isEmpty()){ continue; } + //QLayouts are weird in that they can only add items to the end - need to re-insert almost every item + for(int j=0; j<lay->count(); j++){ + //Find this item + if(lay->itemAt(j)->widget()->whatsThis()==items[i]){ + //Found it - now move it if necessary + //qDebug() << "Found Item:" << items[i] << i << j; + lay->addItem( lay->takeAt(j) ); + break; + } + } + } +} + +// ======================== +// PRIVATE SLOTS +// ======================== +void StartMenu::LaunchItem(QString path, bool fix){ + qDebug() << "Launching Item:" << path << fix; + if(!path.isEmpty()){ + qDebug() << "Launch Application:" << path; + if( fix && !path.startsWith("lumina-open") ){ LSession::LaunchApplication("lumina-open \""+path+"\""); } + else{ LSession::LaunchApplication(path); } + emit CloseMenu(); //so the menu container will close + } +} + +//Listing Update routines +void StartMenu::UpdateApps(){ + ClearScrollArea(ui->scroll_apps); + //Now assemble the apps list (note: this normally happens in the background - not when it is visible/open) + QStringList cats = sysapps->keys(); + cats.sort(); + cats.removeAll("All"); + for(int c=0; c<cats.length(); c++){ + QList<XDGDesktop> apps = sysapps->value(cats[c]); + if(apps.isEmpty()){ continue; } + //Add the category label to the scroll + QLabel *catlabel = new QLabel("<b>"+cats[c]+"</b>",ui->scroll_apps->widget()); + catlabel->setAlignment(Qt::AlignCenter); + ui->scroll_apps->widget()->layout()->addWidget(catlabel); + //Now add all the apps for this category + for(int i=0; i<apps.length(); i++){ + ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] ); + if(!it->gooditem){ continue; } //invalid for some reason + ui->scroll_apps->widget()->layout()->addWidget(it); + connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) ); + } + } + +} + +void StartMenu::UpdateFavs(){ + //SYNTAX NOTE: (per-line) "<name>::::[dir/app/<mimetype>]::::<path>" + QStringList newfavs = LUtils::listFavorites(); + if(favs == newfavs){ return; } //nothing to do - same as before + favs = newfavs; + ClearScrollArea(ui->scroll_favs); + favs.sort(); + //Iterate over types of favorites + QStringList rest = favs; + for(int type = 0; type<3; type++){ + QStringList tmp; + if(type==0){ tmp = favs.filter("::::app::::"); } //apps first + else if(type==1){ tmp = favs.filter("::::dir::::"); } //dirs next + else{ tmp = rest; } //everything left over + for(int i=0; i<tmp.length(); i++){ + if(type<2){ rest.removeAll(tmp[i]); } + if(!QFile::exists(tmp[i].section("::::",2,50))){ continue; } //invalid favorite - skip it + ItemWidget *it = new ItemWidget(ui->scroll_favs->widget(), tmp[i].section("::::",2,50), tmp[i].section("::::",1,1) ); + if(!it->gooditem){ continue; } //invalid for some reason + ui->scroll_favs->widget()->layout()->addWidget(it); + connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) ); + } + QApplication::processEvents(); + } +} + +// Page update routines +void StartMenu::on_stackedWidget_currentChanged(int val){ + QWidget *page = ui->stackedWidget->widget(val); + ui->tool_back->setVisible(page != ui->page_main); + ui->line_search->setVisible(false); //not implemented yet + //Now the page specific updates + if(page == ui->page_main){ + if(!ui->label_status_battery->whatsThis().isEmpty()){ + //Battery available - update the status button + int charge = LOS::batteryCharge(); + QString TT, ICON; + if(val < 10){ ICON="-low"; } + else if(val<20){ ICON="-caution"; } + else if(val<40){ ICON="-040"; } + else if(val<60){ ICON="-060"; } + else if(val<80){ ICON="-080"; } + else{ ICON="-100"; } + if(LOS::batteryIsCharging()){ + if(val>=80){ ICON.clear(); } //for charging, there is no suffix to the icon name over 80% + ICON.prepend("battery-charging"); + TT = QString(tr("%1% (Plugged In)")).arg(QString::number(charge)); + }else{ + ICON.prepend("battery"); + int secs = LOS::batterySecondsLeft(); + if(secs>1){ TT = QString(tr("%1% (%2 Estimated)")).arg(QString::number(charge), LUtils::SecondsToDisplay(secs)); } + else{ TT = QString(tr("%1% Remaining")).arg(QString::number(charge)); } + } + ui->label_status_battery->setPixmap( LXDG::findIcon(ICON,"").pixmap(ui->tool_goto_apps->iconSize()/2) ); + ui->label_status_battery->setToolTip(TT); + } + //Network Status + ui->label_status_network->clear(); //not implemented yet + }else if(page == ui->page_apps){ + //Nothing needed for this page explicitly + }else if( page == ui->page_settings){ + // -- Workspaces + int tot = LSession::handle()->XCB->NumberOfWorkspaces(); + if(tot>1){ + ui->frame_wkspace->setVisible(true); + int cur = LSession::handle()->XCB->CurrentWorkspace(); + ui->label_wkspace->setText( QString(tr("Workspace %1/%2")).arg(QString::number(cur+1), QString::number(tot)) ); + }else{ + ui->frame_wkspace->setVisible(false); + } + // -- Brightness Controls + int tmp = LOS::ScreenBrightness(); + ui->frame_bright->setVisible(tmp >= 0); + if(tmp >= 0){ ui->slider_bright->setValue(tmp); } + // -- Audio Controls + tmp = LOS::audioVolume(); + ui->frame_audio->setVisible(tmp >= 0); + if(tmp >= 0){ ui->slider_volume->setValue(tmp); } + }else if(page == ui->page_leave){ + if( !ui->frame_leave_system->whatsThis().isEmpty() ){ + //This frame is allowed/visible - need to adjust the shutdown detection + bool updating = LOS::systemPerformingUpdates(); + ui->tool_restart->setEnabled(!updating); + ui->tool_shutdown->setEnabled(!updating); + ui->label_updating->setVisible(updating); //to let the user know *why* they can't shutdown/restart right now + } + ui->tool_suspend->setVisible( LOS::systemCanSuspend() ); + } + +} + +//Page Change Buttons +void StartMenu::on_tool_goto_apps_clicked(){ + ui->stackedWidget->setCurrentWidget(ui->page_apps); +} + +void StartMenu::on_tool_goto_settings_clicked(){ + ui->stackedWidget->setCurrentWidget(ui->page_settings); +} + +void StartMenu::on_tool_goto_logout_clicked(){ + ui->stackedWidget->setCurrentWidget(ui->page_leave); +} + +void StartMenu::on_tool_back_clicked(){ + ui->stackedWidget->setCurrentWidget(ui->page_main); +} + + +//Launch Buttons +void StartMenu::on_tool_launch_controlpanel_clicked(){ + LaunchItem(ui->tool_launch_controlpanel->whatsThis()); +} + +void StartMenu::on_tool_launch_fm_clicked(){ + LaunchItem(QDir::homePath()); +} + +void StartMenu::on_tool_launch_store_clicked(){ + LaunchItem(ui->tool_launch_store->whatsThis()); +} + +void StartMenu::on_tool_launch_desksettings_clicked(){ + LaunchItem("lumina-config", false); +} + +void StartMenu::on_tool_launch_deskinfo_clicked(){ + LaunchItem("lumina-info",false); +} + +//Logout Buttons +void StartMenu::on_tool_lock_clicked(){ + LaunchItem("xscreensaver-command -lock", false); +} + +void StartMenu::on_tool_logout_clicked(){ + emit CloseMenu(); + LSession::handle()->StartLogout(); +} + +void StartMenu::on_tool_restart_clicked(){ + emit CloseMenu(); + LSession::handle()->StartReboot(); +} + +void StartMenu::on_tool_shutdown_clicked(){ + emit CloseMenu(); + LSession::handle()->StartShutdown(); +} + +void StartMenu::on_tool_suspend_clicked(){ + //Make sure to lock the system first (otherwise anybody can access it again) + emit CloseMenu(); + LUtils::runCmd("xscreensaver-command -lock"); + LOS::systemSuspend(); +} + + +//Audio Volume +void StartMenu::on_slider_volume_valueChanged(int val){ + ui->label_vol->setText(QString::number(val)+"%"); + LOS::setAudioVolume(val); + //Also adjust the icon for the volume + if(val<1){ ui->tool_launch_mixer->setIcon(LXDG::findIcon("audio-volume-muted","")); } + else if(val<33){ ui->tool_launch_mixer->setIcon(LXDG::findIcon("audio-volume-low","")); } + else if(val<66){ ui->tool_launch_mixer->setIcon(LXDG::findIcon("audio-volume-medium","")); } + else{ ui->tool_launch_mixer->setIcon(LXDG::findIcon("audio-volume-high","")); } +} + +void StartMenu::on_tool_launch_mixer_clicked(){ + if(LOS::hasMixerUtility()){ + emit CloseMenu(); + LOS::startMixerUtility(); + } +} + + +//Screen Brightness +void StartMenu::on_slider_bright_valueChanged(int val){ + ui->label_bright->setText(QString::number(val)+"%"); + LOS::setScreenBrightness(val); +} + + +//Workspace +void StartMenu::on_tool_set_nextwkspace_clicked(){ + int cur = LSession::handle()->XCB->CurrentWorkspace(); + int tot = LSession::handle()->XCB->NumberOfWorkspaces(); + //qDebug()<< "Next Workspace:" << cur << tot; + cur++; + if(cur>=tot){ cur = 0; } //back to beginning + //qDebug() << " - New Current:" << cur; + LSession::handle()->XCB->SetCurrentWorkspace(cur); + ui->label_wkspace->setText( QString(tr("Workspace %1/%2")).arg(QString::number(cur+1), QString::number(tot)) ); +} + +void StartMenu::on_tool_set_prevwkspace_clicked(){ + int cur = LSession::handle()->XCB->CurrentWorkspace(); + int tot = LSession::handle()->XCB->NumberOfWorkspaces(); + //qDebug()<< "Next Workspace:" << cur << tot; + cur--; + if(cur<0){ cur = tot-1; } //back to end + //qDebug() << " - New Current:" << cur; + LSession::handle()->XCB->SetCurrentWorkspace(cur); + ui->label_wkspace->setText( QString(tr("Workspace %1/%2")).arg(QString::number(cur+1), QString::number(tot)) ); +} + + +//Locale +void StartMenu::on_combo_locale_currentIndexChanged(int){ + //Get the currently selected Locale + if(ui->stackedWidget->currentWidget()!=ui->page_settings){ return; } + QString locale = ui->combo_locale->currentData().toString(); + emit CloseMenu(); + LSession::handle()->switchLocale(locale); +} + + +//Search +void StartMenu::on_line_search_editingFinished(){ + +} diff --git a/lumina-desktop/panel-plugins/systemstart/StartMenu.h b/lumina-desktop/panel-plugins/systemstart/StartMenu.h new file mode 100644 index 00000000..20ed2fb7 --- /dev/null +++ b/lumina-desktop/panel-plugins/systemstart/StartMenu.h @@ -0,0 +1,89 @@ +//=========================================== +// 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_SYSTEM_START_PANEL_PLUGIN_H +#define _LUMINA_DESKTOP_SYSTEM_START_PANEL_PLUGIN_H + +#include <QWidget> +#include <QScrollArea> + +#include <LuminaXDG.h> + +namespace Ui{ + class StartMenu; +}; + +class StartMenu : public QWidget{ + Q_OBJECT +public: + StartMenu(QWidget *parent = 0); + ~StartMenu(); + +public slots: + void UpdateAll(); //for re-translation/icon changes + void UpdateMenu(bool forceall = false); //for item changes + +private: + Ui::StartMenu *ui; + QHash<QString, QList<XDGDesktop> > *sysapps; + QStringList favs; + + //Simple utility functions + void ClearScrollArea(QScrollArea *area); + void SortScrollArea(QScrollArea *area); + +private slots: + void LaunchItem(QString path, bool fix = true); + + //Application/Favorite Listings + void UpdateApps(); + void UpdateFavs(); + + // Page update routines + void on_stackedWidget_currentChanged(int); //page changed + + //Page Change Buttons + void on_tool_goto_apps_clicked(); + void on_tool_goto_settings_clicked(); + void on_tool_goto_logout_clicked(); + void on_tool_back_clicked(); + + //Launch Buttons + void on_tool_launch_controlpanel_clicked(); + void on_tool_launch_fm_clicked(); + void on_tool_launch_store_clicked(); + void on_tool_launch_desksettings_clicked(); + void on_tool_launch_deskinfo_clicked(); + + //Logout Buttons + void on_tool_lock_clicked(); + void on_tool_logout_clicked(); + void on_tool_restart_clicked(); + void on_tool_shutdown_clicked(); + void on_tool_suspend_clicked(); + + //Audio Volume + void on_slider_volume_valueChanged(int); + void on_tool_launch_mixer_clicked(); + + //Screen Brightness + void on_slider_bright_valueChanged(int); + + //Workspace + void on_tool_set_nextwkspace_clicked(); + void on_tool_set_prevwkspace_clicked(); + + //Locale + void on_combo_locale_currentIndexChanged(int); + + //Search + void on_line_search_editingFinished(); + +signals: + void CloseMenu(); +}; + +#endif
\ No newline at end of file diff --git a/lumina-desktop/panel-plugins/systemstart/StartMenu.ui b/lumina-desktop/panel-plugins/systemstart/StartMenu.ui new file mode 100644 index 00000000..b06771cb --- /dev/null +++ b/lumina-desktop/panel-plugins/systemstart/StartMenu.ui @@ -0,0 +1,1021 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>StartMenu</class> + <widget class="QWidget" name="StartMenu"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>180</width> + <height>405</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <property name="styleSheet"> + <string notr="true">QScrollArea{background: transparent; border: none; }</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLineEdit" name="line_search"> + <property name="placeholderText"> + <string>Type to search</string> + </property> + </widget> + </item> + <item> + <widget class="QStackedWidget" name="stackedWidget"> + <property name="currentIndex"> + <number>3</number> + </property> + <widget class="QWidget" name="page_main"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label_status_battery"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string notr="true">bat%</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_status_network"> + <property name="text"> + <string notr="true">netstat</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_status"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string notr="true"/> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_14"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QScrollArea" name="scroll_favs"> + <property name="contextMenuPolicy"> + <enum>Qt::CustomContextMenu</enum> + </property> + <property name="styleSheet"> + <string notr="true"/> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + <property name="verticalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOff</enum> + </property> + <property name="horizontalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOff</enum> + </property> + <property name="sizeAdjustPolicy"> + <enum>QAbstractScrollArea::AdjustToContents</enum> + </property> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>100</width> + <height>16</height> + </rect> + </property> + </widget> + </widget> + </item> + <item> + <widget class="Line" name="line_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_launch_fm"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Browse Files</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_goto_apps"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Browse Applications</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_launch_controlpanel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Control Panel</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_goto_settings"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Quick Settings</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QToolButton" name="tool_goto_logout"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="styleSheet"> + <string notr="true">QToolButton::menu-arrow{ image: rightarrow-icon; }</string> + </property> + <property name="text"> + <string>Leave</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="popupMode"> + <enum>QToolButton::DelayedPopup</enum> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + <property name="arrowType"> + <enum>Qt::NoArrow</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_lock"> + <property name="text"> + <string notr="true">lock</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_apps"> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="tool_launch_store"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Manage Applications</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QScrollArea" name="scroll_apps"> + <property name="horizontalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOff</enum> + </property> + <property name="sizeAdjustPolicy"> + <enum>QAbstractScrollArea::AdjustToContents</enum> + </property> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents_2"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>87</width> + <height>16</height> + </rect> + </property> + </widget> + </widget> + </item> + <item> + <widget class="Line" name="line_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_settings"> + <layout class="QVBoxLayout" name="verticalLayout_9"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <item> + <widget class="QToolButton" name="tool_launch_desksettings"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Configure Desktop</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_launch_deskinfo"> + <property name="text"> + <string notr="true">info</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_8"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_audio"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_8"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <widget class="QToolButton" name="tool_launch_mixer"> + <property name="text"> + <string notr="true"/> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QSlider" name="slider_volume"> + <property name="maximum"> + <number>100</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_vol"> + <property name="text"> + <string notr="true">vol%</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_7"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_bright"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_7"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QLabel" name="label_bright_icon"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="text"> + <string notr="true"/> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QSlider" name="slider_bright"> + <property name="minimum"> + <number>10</number> + </property> + <property name="maximum"> + <number>100</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_bright"> + <property name="text"> + <string notr="true">br%</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_9"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_wkspace"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QToolButton" name="tool_set_prevwkspace"> + <property name="text"> + <string notr="true">prev</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_wkspace"> + <property name="text"> + <string notr="true">workspace #</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_set_nextwkspace"> + <property name="text"> + <string notr="true">next</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_10"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_locale"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="label_locale_icon"> + <property name="text"> + <string notr="true">Locale:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="combo_locale"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>161</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="Line" name="line_6"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_leave"> + <layout class="QVBoxLayout" name="verticalLayout_6"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="tool_logout"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Sign Out User</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_13"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_leave_system"> + <property name="styleSheet"> + <string notr="true">QFrame#frame_leave_system{border: none; background: transparent; }</string> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="tool_restart"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Restart System</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_shutdown"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Power Off System</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_updating"> + <property name="text"> + <string>(System Performing Updates)</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_leave_suspend"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_10"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="Line" name="line_11"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_suspend"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Suspend System</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>185</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="Line" name="line_12"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_back"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Back</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + <property name="arrowType"> + <enum>Qt::NoArrow</enum> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp b/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp index d1486371..220c7858 100644 --- a/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp +++ b/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp @@ -102,7 +102,7 @@ void LSysTray::checkAll(){ }else{ //Tray Icon already exists //qDebug() << " - SysTray: Update Icon"; - //trayIcons[i]->update(); + trayIcons[i]->update(); wins.removeAt(index); //Already found - remove from the list } } @@ -149,7 +149,7 @@ void LSysTray::UpdateTrayWindow(WId win){ if(!isRunning || stopping || checking){ return; } for(int i=0; i<trayIcons.length(); i++){ if(trayIcons[i]->appID()==win){ - //qDebug() << "System Tray: Update Window " << win; + qDebug() << "System Tray: Update Window " << win; trayIcons[i]->update(); QTimer::singleShot(1000, trayIcons[i], SLOT(update()) ); return; //finished now diff --git a/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp b/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp index 6f324e7a..3e26683f 100644 --- a/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp +++ b/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp @@ -14,6 +14,8 @@ TrayIcon::TrayIcon(QWidget *parent) : QWidget(parent){ AID = 0; //nothing yet IID = 0; dmgID = 0; + //this->setLayout(new QHBoxLayout); + //this->layout()->setContentsMargins(0,0,0,0); } TrayIcon::~TrayIcon(){ @@ -27,6 +29,9 @@ void TrayIcon::attachApp(WId id){ if(id==0){ return; } //nothing to attach else if(AID!=0){ qWarning() << "Tray Icon is already attached to a window!"; return; } AID = id; + //WIN = QWindow::fromWinId(AID); + //connect(WIN, SIGNAL( + //this->layout()->addWidget( QWidget::createWindowContainer(WIN, this) ); IID = this->winId(); //embed directly into this widget dmgID = LSession::handle()->XCB->EmbedWindow(AID, IID); if( dmgID != 0 ){ @@ -55,6 +60,7 @@ void TrayIcon::detachApp(){ AID = 0; //Now detach the application window and clean up qDebug() << " - Unembed"; + //WIN->setParent(0); //Reset parentage back to the main stack LSession::handle()->XCB->UnembedWindow(tmp); qDebug() << " - finished app:" << tmp; IID = 0; @@ -83,7 +89,7 @@ void TrayIcon::paintEvent(QPaintEvent *event){ //qDebug() << " - Draw tray:" << AID << IID << this->winId(); //qDebug() << " - - " << event->rect().x() << event->rect().y() << event->rect().width() << event->rect().height(); //qDebug() << " - Get image:" << AID; - QPixmap pix; + QPixmap pix; //= WIN->icon().pixmap(this->size()); //Try to grab the window directly with Qt QList<QScreen*> scrnlist = QApplication::screens(); for(int i=0; i<scrnlist.length(); i++){ diff --git a/lumina-desktop/panel-plugins/systemtray/TrayIcon.h b/lumina-desktop/panel-plugins/systemtray/TrayIcon.h index 18c51a66..fef3b578 100644 --- a/lumina-desktop/panel-plugins/systemtray/TrayIcon.h +++ b/lumina-desktop/panel-plugins/systemtray/TrayIcon.h @@ -20,7 +20,7 @@ #include <QPainter> #include <QPixmap> #include <QImage> - +//#include <QWindow> // libLumina includes //#include <LuminaX11.h> @@ -40,6 +40,7 @@ public slots: private: WId IID, AID; //icon ID and app ID + //QWindow *WIN; uint dmgID; protected: diff --git a/lumina-desktop/panel-plugins/userbutton/LUserButton.h b/lumina-desktop/panel-plugins/userbutton/LUserButton.h index c5612e15..ca835bfe 100644 --- a/lumina-desktop/panel-plugins/userbutton/LUserButton.h +++ b/lumina-desktop/panel-plugins/userbutton/LUserButton.h @@ -19,7 +19,7 @@ // Lumina-desktop includes -#include "../../Globals.h" +//#include "../../Globals.h" #include "../LPPlugin.h" //main plugin widget // libLumina includes |