diff options
31 files changed, 373 insertions, 154 deletions
diff --git a/debian/changelog b/debian/changelog index b12b8d20..e9ce4488 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,15 @@ +lumina-desktop (0.8.4.475-1nano) unstable; urgency=low + + * New git snapshot + * add runtime depencies for lumina-desktop: + - gstreamer1.0-plugins-base + - phonon4qt5-backend-gstreamer + - pavucontrol + - alsa-utils + - acpi + + -- Christopher Roy Bratusek <nano@jpberlin.de> Sat, 18 Apr 2015 20:21:00 +0200 + lumina-desktop (0.8.3.440-1nano) unstable; urgency=low * New git snapshot diff --git a/debian/control b/debian/control index 2ef40b6a..da781d4a 100644 --- a/debian/control +++ b/debian/control @@ -17,8 +17,9 @@ Replaces: lumina-core (<< 0.8.3.372) Depends: ${misc:Depends}, ${shlibs:Depends}, libluminautils1 (= ${binary:Version}), libluminautils1, lumina-config, lumina-fm, oxygen-icon-theme, lumina-open, lumina-screenshot, lumina-search, lumina-info, - lxpolkit, lumina-data, fluxbox, numlockx, xbacklight, xscreensaver, - usbmount + lumina-xconfig, lxpolkit, lumina-data, fluxbox, numlockx, xbacklight, + xscreensaver, usbmount, gstreamer1.0-plugins-base, + phonon4qt5-backend-gstreamer, alsa-utils, acpi, pavucontrol Recommends: qt5-configuration-tool Description: Lightweight Qt5-based desktop environment Metapackage depending on all other lumina packages. diff --git a/debian/rules b/debian/rules index 877c4cbb..e1e14d53 100755 --- a/debian/rules +++ b/debian/rules @@ -30,14 +30,12 @@ QMAKE_EXTRA_DIRS = libLumina \ dh $@ --parallel override_dh_auto_configure: - sed -e 's/LuminaOS-Linux/LuminaOS-Debian/g' -i libLumina/libLumina.pro $(QMAKE) $(USER_QMAKE_FLAGS) for d in $(QMAKE_EXTRA_DIRS) ; do (cd $$d && $(QMAKE) $(USER_QMAKE_FLAGS)); done override_dh_auto_clean: dh_auto_clean -find $(CURDIR) -name *.qm -delete - -sed -e 's/LuminaOS-Debian/LuminaOS-Linux/g' -i libLumina/libLumina.pro override_dh_install: dh_install --list-missing diff --git a/libLumina/LuminaOS-Debian.cpp b/libLumina/LuminaOS-Debian.cpp index 7ce8250f..a7be653c 100644 --- a/libLumina/LuminaOS-Debian.cpp +++ b/libLumina/LuminaOS-Debian.cpp @@ -152,6 +152,16 @@ void LOS::systemRestart(){ //start reboot sequence QProcess::startDetached("shutdown -r now"); } +//Check for suspend support +bool LOS::systemCanSuspend(){ + return false; +} + +//Put the system into the suspend state +void LOS::systemSuspend(){ + +} + //Battery Availability bool LOS::hasBattery(){ QString my_status = LUtils::getCmdOutput("acpi -b").join(""); diff --git a/libLumina/LuminaOS-DragonFly.cpp b/libLumina/LuminaOS-DragonFly.cpp index b9ba58a2..57ff1b2a 100644 --- a/libLumina/LuminaOS-DragonFly.cpp +++ b/libLumina/LuminaOS-DragonFly.cpp @@ -148,6 +148,16 @@ void LOS::systemRestart(){ //start reboot sequence QProcess::startDetached("shutdown -r now"); } +//Check for suspend support +bool LOS::systemCanSuspend(){ + return false; +} + +//Put the system into the suspend state +void LOS::systemSuspend(){ + +} + //Battery Availability bool LOS::hasBattery(){ int val = LUtils::getCmdOutput("apm -l").join("").toInt(); diff --git a/libLumina/LuminaOS-FreeBSD.cpp b/libLumina/LuminaOS-FreeBSD.cpp index 73637048..c9874605 100644 --- a/libLumina/LuminaOS-FreeBSD.cpp +++ b/libLumina/LuminaOS-FreeBSD.cpp @@ -8,6 +8,7 @@ #include "LuminaOS.h" #include <unistd.h> +#include <QDebug> //can't read xbrightness settings - assume invalid until set static int screenbrightness = -1; @@ -71,17 +72,18 @@ void LOS::setScreenBrightness(int percent){ //ensure bounds if(percent<0){percent=0;} else if(percent>100){ percent=100; } - float pf = percent/100.0; //convert to a decimel //Run the command(s) bool success = false; // - try hardware setting first (PC-BSD only) if(QFile::exists("/usr/local/bin/pc-sysconfig")){ - QString ret = LUtils::getCmdOutput("pc-sysconfig \"setscreenbrightness "+QString::number(percent)+"\"").join(""); - success = (ret.simplified() == "[SUCCESS]"); + QString ret = LUtils::getCmdOutput("pc-sysconfig", QStringList() <<"setscreenbrightness "+QString::number(percent)).join(""); + success = ret.toLower().contains("success"); + qDebug() << "Set hardware brightness:" << percent << success; } // - if hardware brightness does not work, use software brightness if(!success){ QString cmd = "xbrightness %1"; + float pf = percent/100.0; //convert to a decimel cmd = cmd.arg( QString::number( int(65535*pf) ) ); success = (0 == LUtils::runCmd(cmd) ); } @@ -169,6 +171,22 @@ void LOS::systemRestart(){ //start reboot sequence QProcess::startDetached("shutdown -ro now"); } +//Check for suspend support +bool LOS::systemCanSuspend(){ + //This will only function on PC-BSD + //(permissions issues on standard FreeBSD unless setup a special way) + bool ok = QFile::exists("/usr/local/bin/pc-sysconfig"); + if(ok){ + ok = LUtils::getCmdOutput("pc-sysconfig systemcansuspend").join("").toLower().contains("true"); + } + return ok; +} + +//Put the system into the suspend state +void LOS::systemSuspend(){ + QProcess::startDetached("pc-sysconfig suspendsystem"); +} + //Battery Availability bool LOS::hasBattery(){ int val = LUtils::getCmdOutput("apm -l").join("").toInt(); diff --git a/libLumina/LuminaOS-Linux.cpp b/libLumina/LuminaOS-Linux.cpp index 46a6371a..6929c9c3 100644 --- a/libLumina/LuminaOS-Linux.cpp +++ b/libLumina/LuminaOS-Linux.cpp @@ -149,6 +149,16 @@ void LOS::systemRestart(){ //start reboot sequence QProcess::startDetached("shutdown -r now"); } +//Check for suspend support +bool LOS::systemCanSuspend(){ + return false; +} + +//Put the system into the suspend state +void LOS::systemSuspend(){ + +} + //Battery Availability bool LOS::hasBattery(){ QString my_status = LUtils::getCmdOutput("acpi -b").join(""); diff --git a/libLumina/LuminaOS-OpenBSD.cpp b/libLumina/LuminaOS-OpenBSD.cpp index df6ddeba..5fda4866 100644 --- a/libLumina/LuminaOS-OpenBSD.cpp +++ b/libLumina/LuminaOS-OpenBSD.cpp @@ -166,6 +166,16 @@ void LOS::systemRestart(){ //start reboot sequence QProcess::startDetached("shutdown -r now"); } +//Check for suspend support +bool LOS::systemCanSuspend(){ + return false; +} + +//Put the system into the suspend state +void LOS::systemSuspend(){ + +} + //Battery Availability bool LOS::hasBattery(){ int val = LUtils::getCmdOutput("apm -b").join("").toInt(); diff --git a/libLumina/LuminaOS-kFreeBSD.cpp b/libLumina/LuminaOS-kFreeBSD.cpp index 2b24ce51..dee5a6c8 100644 --- a/libLumina/LuminaOS-kFreeBSD.cpp +++ b/libLumina/LuminaOS-kFreeBSD.cpp @@ -133,6 +133,16 @@ void LOS::systemRestart(){ //start reboot sequence QProcess::startDetached("shutdown -r now"); } +//Check for suspend support +bool LOS::systemCanSuspend(){ + return false; +} + +//Put the system into the suspend state +void LOS::systemSuspend(){ + +} + //Battery Availability bool LOS::hasBattery(){ return false; diff --git a/libLumina/LuminaOS-template.cpp b/libLumina/LuminaOS-template.cpp index dfb9d850..aabd7da3 100644 --- a/libLumina/LuminaOS-template.cpp +++ b/libLumina/LuminaOS-template.cpp @@ -81,6 +81,16 @@ void LOS::systemRestart(){ //start reboot sequence QProcess::startDetached("shutdown -r now"); } +//Check for suspend support +bool LOS::systemCanSuspend(){ + return false; +} + +//Put the system into the suspend state +void LOS::systemSuspend(){ + +} + //Battery Availability bool LOS::hasBattery(){ return false; //not implemented yet diff --git a/libLumina/LuminaOS.h b/libLumina/LuminaOS.h index 091a8d96..eb0e2eb6 100644 --- a/libLumina/LuminaOS.h +++ b/libLumina/LuminaOS.h @@ -71,6 +71,11 @@ public: static void systemShutdown(); //start poweroff sequence //System Restart static void systemRestart(); //start reboot sequence + //Check for suspend support + static bool systemCanSuspend(); + //Put the system into the suspend state + static void systemSuspend(); + //Battery Availability static bool hasBattery(); diff --git a/libLumina/LuminaX11.cpp b/libLumina/LuminaX11.cpp index 05a03631..89c138ca 100644 --- a/libLumina/LuminaX11.cpp +++ b/libLumina/LuminaX11.cpp @@ -27,6 +27,7 @@ #include <xcb/xcb_icccm.h> #include <xcb/xcb_image.h> #include <xcb/composite.h> +#include <xcb/damage.h> //===== WindowList() ======== @@ -1357,15 +1358,16 @@ void LXCB::MoveResizeWindow(WId win, QRect geom){ } // === EmbedWindow() === -bool LXCB::EmbedWindow(WId win, WId container){ - if(win==0 || container==0){ return false; } +uint LXCB::EmbedWindow(WId win, WId container){ + //This returns the damage control ID number (or 0 for a failure) + if(win==0 || container==0){ return 0; } //qDebug() << "Embed Window:" << win << container; //Initialize any atoms that will be needed xcb_intern_atom_cookie_t ecookie = xcb_intern_atom_unchecked(QX11Info::connection(), 0, 7, "_XEMBED"); xcb_intern_atom_reply_t *ereply = xcb_intern_atom_reply(QX11Info::connection(), ecookie, NULL); - if(ereply==0){ return false; } //unable to initialize the atom + if(ereply==0){ return 0; } //unable to initialize the atom xcb_atom_t emb = ereply->atom; free(ereply); //done with this structure @@ -1399,8 +1401,12 @@ bool LXCB::EmbedWindow(WId win, WId container){ //Now map the window (will be a transparent child of the container) xcb_map_window(QX11Info::connection(), win); + //Now create/register the damage handler + xcb_damage_damage_t dmgID = xcb_generate_id(QX11Info::connection()); //This is a typedef for a 32-bit unsigned integer + xcb_damage_create(QX11Info::connection(), dmgID, win, XCB_DAMAGE_REPORT_LEVEL_RAW_RECTANGLES); + //qDebug() << " - Done"; - return true; + return ( (uint) dmgID ); } // === Unembed Window() === diff --git a/libLumina/LuminaX11.h b/libLumina/LuminaX11.h index 4ce279f4..0a950d63 100644 --- a/libLumina/LuminaX11.h +++ b/libLumina/LuminaX11.h @@ -153,7 +153,7 @@ public: void MoveResizeWindow(WId win, QRect geom); //Window Embedding/Detaching (for system tray) - bool EmbedWindow(WId win, WId container); + uint EmbedWindow(WId win, WId container); //returns the damage ID (or 0 for an error) bool UnembedWindow(WId win); }; diff --git a/libLumina/libLumina.pro b/libLumina/libLumina.pro index 1b78367a..ef30bd20 100644 --- a/libLumina/libLumina.pro +++ b/libLumina/libLumina.pro @@ -36,13 +36,28 @@ SOURCES += LuminaXDG.cpp \ LuminaOS-FreeBSD.cpp \ LuminaOS-DragonFly.cpp \ LuminaOS-OpenBSD.cpp \ - LuminaOS-Linux.cpp \ LuminaOS-kFreeBSD.cpp # new OS support can be added here +# check linux distribution and use specific +# LuminaOS support functions (or fall back to +# generic one + +exists(/bin/lsb_release){ + LINUX_DISTRIBUTION = $$system(lsb_release -si) +} + +equals(LINUX_DISTRIBUTION, "Debian"): { + SOURCES += LuminaOS-Debian.cpp +} else { + SOURCES += LuminaOS-Linux.cpp +} + + + INCLUDEPATH += $$PREFIX/include -LIBS += -lX11 -lXrender -lXcomposite -lxcb -lxcb-ewmh -lxcb-icccm -lxcb-image -lxcb-composite +LIBS += -lX11 -lXrender -lXcomposite -lxcb -lxcb-ewmh -lxcb-icccm -lxcb-image -lxcb-composite -lxcb-damage include.path=$$PREFIX/include/ include.files=LuminaXDG.h \ diff --git a/lumina-config/mainUI.cpp b/lumina-config/mainUI.cpp index 744d4bdf..b1a8e797 100644 --- a/lumina-config/mainUI.cpp +++ b/lumina-config/mainUI.cpp @@ -237,6 +237,7 @@ void MainUI::setupConnections(){ connect(ui->line_session_time, SIGNAL(textChanged(QString)), this, SLOT(sessionLoadTimeSample()) ); connect(ui->line_session_date, SIGNAL(textChanged(QString)), this, SLOT(sessionLoadDateSample()) ); connect(ui->combo_session_timezone, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) ); + connect(ui->combo_session_datetimeorder, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) ); } void MainUI::setupMenus(){ @@ -275,6 +276,13 @@ void MainUI::setupMenus(){ ui->combo_session_wtheme->addItem(fbstyles[i], fbdir.absoluteFilePath(fbstyles[i])); } + //Display formats for panel clock + ui->combo_session_datetimeorder->clear(); + ui->combo_session_datetimeorder->addItem( tr("Time (Date as tooltip)"), "timeonly"); + ui->combo_session_datetimeorder->addItem( tr("Date (Time as tooltip)"), "dateonly"); + ui->combo_session_datetimeorder->addItem( tr("Time first then Date"), "timedate"); + ui->combo_session_datetimeorder->addItem( tr("Date first then Time"), "datetime"); + //Available Time zones ui->combo_session_timezone->clear(); QList<QByteArray> TZList = QTimeZone::availableTimeZoneIds(); @@ -440,7 +448,7 @@ void MainUI::slotChangePage(bool enabled){ } ui->group_screen->setVisible(showScreen && (ui->spin_screen->maximum()>1) ); //Hide the save button for particular pages - ui->push_save->setVisible(!ui->actionDefaults->isChecked()); //hide on the default page + ui->push_save->setVisible(!ui->actionDefaults->isChecked() || moddesk || modpan || modmenu || modshort || moddef || modses); //hide on the default page if nothing waiting to be saved //Special functions for particular pages if(ui->page_panels->isVisible()){ checkpanels(); } @@ -557,11 +565,21 @@ void MainUI::loadCurrentSettings(bool screenonly){ ui->list_panel2_plugins->clear(); for(int i=0; i<plugs.length(); i++){ QString pid = plugs[i].section("---",0,0); - LPI info = PINFO->panelPluginInfo(pid); - if(!info.ID.isEmpty()){ - QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon(info.icon,""), info.name ); + if(pid.startsWith("applauncher")){ + bool ok = false; + XDGDesktop desk = LXDG::loadDesktopFile(pid.section("::",1,1),ok); + if(ok){ + QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon(desk.icon,""), desk.name ); it->setWhatsThis(plugs[i]); //make sure to preserve the entire plugin ID (is the unique version) - ui->list_panel2_plugins->addItem(it); + ui->list_panel2_plugins->addItem(it); + } + }else{ + LPI info = PINFO->panelPluginInfo(pid); + if(!info.ID.isEmpty()){ + QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon(info.icon,""), info.name ); + it->setWhatsThis(plugs[i]); //make sure to preserve the entire plugin ID (is the unique version) + ui->list_panel2_plugins->addItem(it); + } } } QString color = settings->value(PPrefix+"color","rgba(255,255,255,160)").toString(); @@ -730,6 +748,7 @@ void MainUI::saveCurrentSettings(bool screenonly){ moddesk = modpan = false; if(!screenonly){ modmenu = modshort = moddef = modses = false; } ui->push_save->setEnabled(modmenu || modshort || moddef || modses); //wait for new changes + ui->push_save->setVisible(!ui->actionDefaults->isChecked() || modmenu || modshort || moddef || modses); } @@ -1802,11 +1821,13 @@ void MainUI::loadSessionSettings(){ ui->push_session_setUserIcon->setIcon( LXDG::findIcon(QDir::homePath()+"/.loginIcon.png", "user-identity") ); ui->line_session_time->setText( sessionsettings->value("TimeFormat","").toString() ); ui->line_session_date->setText( sessionsettings->value("DateFormat","").toString() ); + index = ui->combo_session_datetimeorder->findData( sessionsettings->value("DateTimeOrder").toString() ); + ui->combo_session_datetimeorder->setCurrentIndex(index); if( !sessionsettings->value("CustomTimeZone", false).toBool() ){ //System Time selected ui->combo_session_timezone->setCurrentIndex(0); }else{ - int index = ui->combo_session_timezone->findData( sessionsettings->value("TimeZoneByteCode",QByteArray()).toByteArray() ); + index = ui->combo_session_timezone->findData( sessionsettings->value("TimeZoneByteCode",QByteArray()).toByteArray() ); if(index>0){ ui->combo_session_timezone->setCurrentIndex(index); } else{ ui->combo_session_timezone->setCurrentIndex(0); } } @@ -1902,6 +1923,7 @@ void MainUI::saveSessionSettings(){ sessionsettings->setValue("PlayLogoutAudio", ui->check_session_playlogoutaudio->isChecked()); sessionsettings->setValue("TimeFormat", ui->line_session_time->text()); sessionsettings->setValue("DateFormat", ui->line_session_date->text()); + sessionsettings->setValue("DateTimeOrder", ui->combo_session_datetimeorder->currentData().toString()); if( ui->combo_session_timezone->currentIndex()==0){ //System Time selected sessionsettings->setValue("CustomTimeZone", false); diff --git a/lumina-config/mainUI.ui b/lumina-config/mainUI.ui index 07abacab..6061cae4 100644 --- a/lumina-config/mainUI.ui +++ b/lumina-config/mainUI.ui @@ -602,8 +602,8 @@ <rect> <x>0</x> <y>0</y> - <width>233</width> - <height>150</height> + <width>263</width> + <height>178</height> </rect> </property> <attribute name="label"> @@ -701,7 +701,7 @@ <rect> <x>0</x> <y>0</y> - <width>197</width> + <width>198</width> <height>117</height> </rect> </property> @@ -799,8 +799,8 @@ <rect> <x>0</x> <y>0</y> - <width>233</width> - <height>150</height> + <width>263</width> + <height>178</height> </rect> </property> <attribute name="label"> @@ -898,7 +898,7 @@ <rect> <x>0</x> <y>0</y> - <width>197</width> + <width>198</width> <height>117</height> </rect> </property> @@ -1467,19 +1467,6 @@ <string>General Options</string> </attribute> <layout class="QGridLayout" name="gridLayout"> - <item row="5" column="0"> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>128</height> - </size> - </property> - </spacer> - </item> <item row="0" column="0"> <layout class="QVBoxLayout" name="verticalLayout_4"> <item> @@ -1535,7 +1522,62 @@ </item> </layout> </item> - <item row="0" column="1"> + <item row="6" column="0" colspan="2"> + <widget class="QGroupBox" name="groupBox_2"> + <property name="font"> + <font> + <weight>50</weight> + <bold>false</bold> + </font> + </property> + <property name="title"> + <string>Reset Desktop Settings</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_20"> + <item> + <spacer name="horizontalSpacer_18"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="push_session_resetSysDefaults"> + <property name="text"> + <string>Return to system defaults</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="push_session_resetLuminaDefaults"> + <property name="text"> + <string>Return to Lumina defaults</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_17"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item row="0" column="1" rowspan="2"> <layout class="QFormLayout" name="formLayout_3"> <property name="fieldGrowthPolicy"> <enum>QFormLayout::AllNonFixedFieldsGrow</enum> @@ -1654,62 +1696,30 @@ </property> </widget> </item> + <item row="5" column="1"> + <widget class="QComboBox" name="combo_session_datetimeorder"/> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="label_27"> + <property name="text"> + <string>Display Format</string> + </property> + </widget> + </item> </layout> </item> - <item row="6" column="0" colspan="2"> - <widget class="QGroupBox" name="groupBox_2"> - <property name="font"> - <font> - <weight>50</weight> - <bold>false</bold> - </font> + <item row="1" column="0"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> </property> - <property name="title"> - <string>Reset Desktop Settings</string> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>128</height> + </size> </property> - <layout class="QHBoxLayout" name="horizontalLayout_20"> - <item> - <spacer name="horizontalSpacer_18"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="push_session_resetSysDefaults"> - <property name="text"> - <string>Return to system defaults</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="push_session_resetLuminaDefaults"> - <property name="text"> - <string>Return to Lumina defaults</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_17"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> + </spacer> </item> </layout> </widget> @@ -1791,8 +1801,8 @@ <rect> <x>0</x> <y>0</y> - <width>128</width> - <height>28</height> + <width>510</width> + <height>107</height> </rect> </property> <property name="sizePolicy"> diff --git a/lumina-desktop/LSession.cpp b/lumina-desktop/LSession.cpp index e076210f..0fea2fa1 100644 --- a/lumina-desktop/LSession.cpp +++ b/lumina-desktop/LSession.cpp @@ -75,6 +75,7 @@ LSession::~LSession(){ void LSession::setupSession(){ qDebug() << "Initializing Session"; + if(QFile::exists("/tmp/.luminastopping")){ QFile::remove("/tmp/.luminastopping"); } QTime* timer = 0; if(DEBUG){ timer = new QTime(); timer->start(); qDebug() << " - Init srand:" << timer->elapsed();} //Seed random number generator (if needed) @@ -134,6 +135,8 @@ void LSession::CleanupSession(){ LSession::processEvents(); QDateTime time = QDateTime::currentDateTime(); qDebug() << "Start closing down the session: " << time.toString( Qt::SystemLocaleShortDate); + //Create a temporary flag to prevent crash dialogs from opening during cleanup + LUtils::writeFile("/tmp/.luminastopping",QStringList() << "yes", true); //Start the logout chimes (if necessary) bool playaudio = sessionsettings->value("PlayLogoutAudio",true).toBool(); if( playaudio ){ playAudioFile(LOS::LuminaShare()+"Logout.ogg"); } @@ -184,6 +187,8 @@ void LSession::CleanupSession(){ }else{ for(int i=0; i<20; i++){ LSession::processEvents(); usleep(25000); } //1/2 second pause } + //Clean up the temporary flag + if(QFile::exists("/tmp/.luminastopping")){ QFile::remove("/tmp/.luminastopping"); } //if(audioThread!=0){ audioThread->exit(0); } } diff --git a/lumina-desktop/SystemWindow.cpp b/lumina-desktop/SystemWindow.cpp index 0540a5d9..02de54b9 100644 --- a/lumina-desktop/SystemWindow.cpp +++ b/lumina-desktop/SystemWindow.cpp @@ -17,19 +17,23 @@ SystemWindow::SystemWindow() : QDialog(), ui(new Ui::SystemWindow){ 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","") ); ui->push_cancel->setIcon( LXDG::findIcon("dialog-cancel","") ); ui->push_lock->setIcon( LXDG::findIcon("system-lock-screen","") ); //Connect the signals/slots connect(ui->tool_logout, SIGNAL(clicked()), this, SLOT(sysLogout()) ); connect(ui->tool_restart, SIGNAL(clicked()), this, SLOT(sysRestart()) ); connect(ui->tool_shutdown, SIGNAL(clicked()), this, SLOT(sysShutdown()) ); + connect(ui->tool_suspend, SIGNAL(clicked()), this, SLOT(sysSuspend()) ); connect(ui->push_cancel, SIGNAL(clicked()), this, SLOT(sysCancel()) ); connect(ui->push_lock, SIGNAL(clicked()), this, SLOT(sysLock()) ); //Disable the shutdown/restart buttons if necessary if( !LOS::userHasShutdownAccess() ){ ui->tool_restart->setEnabled(false); ui->tool_shutdown->setEnabled(false); + } + ui->tool_suspend->setVisible(LOS::systemCanSuspend()); //Center this window on the screen QPoint center = QApplication::desktop()->screenGeometry(QCursor::pos()).center(); //get the center of the current screen this->move(center.x() - this->width()/2, center.y() - this->height()/2); @@ -55,6 +59,14 @@ void SystemWindow::sysShutdown(){ this->close(); } +void SystemWindow::sysSuspend(){ + //Make sure to lock the system first (otherwise anybody can access it again) + LUtils::runCmd("xscreensaver-command -lock"); + //Now suspend the system + LOS::systemSuspend(); + this->close(); +} + void SystemWindow::sysLock(){ qDebug() << "Locking the desktop..."; QProcess::startDetached("xscreensaver-command -lock"); diff --git a/lumina-desktop/SystemWindow.h b/lumina-desktop/SystemWindow.h index 211de5fd..4b1fab44 100644 --- a/lumina-desktop/SystemWindow.h +++ b/lumina-desktop/SystemWindow.h @@ -38,6 +38,8 @@ private slots: void sysShutdown(); + void sysSuspend(); + void sysCancel(){ this->close(); } @@ -45,4 +47,4 @@ private slots: void sysLock(); }; -#endif
\ No newline at end of file +#endif diff --git a/lumina-desktop/SystemWindow.ui b/lumina-desktop/SystemWindow.ui index b03039f5..9e25509b 100644 --- a/lumina-desktop/SystemWindow.ui +++ b/lumina-desktop/SystemWindow.ui @@ -14,8 +14,17 @@ <string>System Options</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> - <property name="margin"> - <number>0</number> + <property name="leftMargin"> + <number>2</number> + </property> + <property name="topMargin"> + <number>2</number> + </property> + <property name="rightMargin"> + <number>2</number> + </property> + <property name="bottomMargin"> + <number>2</number> </property> <item> <widget class="QFrame" name="frame"> @@ -47,8 +56,8 @@ </property> <property name="iconSize"> <size> - <width>60</width> - <height>60</height> + <width>64</width> + <height>64</height> </size> </property> <property name="toolButtonStyle"> @@ -63,8 +72,8 @@ </property> <property name="iconSize"> <size> - <width>60</width> - <height>60</height> + <width>64</width> + <height>64</height> </size> </property> <property name="toolButtonStyle"> @@ -79,8 +88,8 @@ </property> <property name="iconSize"> <size> - <width>60</width> - <height>60</height> + <width>64</width> + <height>64</height> </size> </property> <property name="toolButtonStyle"> @@ -113,10 +122,19 @@ <item> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> - <widget class="QPushButton" name="push_cancel"> + <widget class="QToolButton" name="push_cancel"> <property name="text"> <string>Cancel</string> </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextUnderIcon</enum> + </property> </widget> </item> <item> @@ -133,9 +151,34 @@ </spacer> </item> <item> - <widget class="QPushButton" name="push_lock"> + <widget class="QToolButton" name="push_lock"> <property name="text"> - <string>Lock Screen</string> + <string>Lock</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextUnderIcon</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_suspend"> + <property name="text"> + <string>Suspend</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextUnderIcon</enum> </property> </widget> </item> diff --git a/lumina-desktop/panel-plugins/clock/LClock.cpp b/lumina-desktop/panel-plugins/clock/LClock.cpp index 79cae84b..c3eb1451 100644 --- a/lumina-desktop/panel-plugins/clock/LClock.cpp +++ b/lumina-desktop/panel-plugins/clock/LClock.cpp @@ -38,10 +38,22 @@ void LClock::updateTime(){ if(useTZ){ CT = CT.toTimeZone(TZ); } //Now update the display QString label; - if(deftime){ label = CT.time().toString(Qt::SystemLocaleShortDate) ; } - else{ label=CT.toString(timefmt); } - if(defdate){ labelWidget->setToolTip(CT.date().toString(Qt::SystemLocaleLongDate)); } - else{ labelWidget->setToolTip(CT.toString(datefmt)); } + QString timelabel; + QString datelabel; + if(deftime){ timelabel = CT.time().toString(Qt::SystemLocaleShortDate) ; } + else{ timelabel=CT.toString(timefmt); } + if(defdate){ datelabel = CT.date().toString(Qt::SystemLocaleLongDate); } + else{ datelabel = CT.toString(datefmt); } + if(datetimeorder == "dateonly"){ + label = datelabel; + labelWidget->setToolTip(timelabel); + }else if(datetimeorder == "timedate"){ + label = timelabel + " " + datelabel; + }else if(datetimeorder == "datetime"){ + label = datelabel + " " + timelabel; + }else{ label = timelabel; + labelWidget->setToolTip(datelabel); + } if( this->layout()->direction() == QBoxLayout::TopToBottom ){ //different routine for vertical text (need newlines instead of spaces) label.replace(" ","\n"); @@ -54,6 +66,7 @@ void LClock::updateFormats(){ datefmt = LSession::handle()->sessionSettings()->value("DateFormat","").toString(); deftime = timefmt.simplified().isEmpty(); defdate = datefmt.simplified().isEmpty(); + datetimeorder = LSession::handle()->sessionSettings()->value("DateTimeOrder", "timeonly").toString(); useTZ = LSession::handle()->sessionSettings()->value("CustomTimeZone",false).toBool(); if(useTZ){ TZ = QTimeZone( LSession::handle()->sessionSettings()->value("TimeZoneByteCode", QByteArray()).toByteArray() ); } diff --git a/lumina-desktop/panel-plugins/clock/LClock.h b/lumina-desktop/panel-plugins/clock/LClock.h index 8156e7d8..31bf13d6 100644 --- a/lumina-desktop/panel-plugins/clock/LClock.h +++ b/lumina-desktop/panel-plugins/clock/LClock.h @@ -26,7 +26,7 @@ public: private: QTimer *timer; QLabel *labelWidget; - QString timefmt, datefmt; + QString timefmt, datefmt, datetimeorder; bool deftime, defdate, useTZ; QTimeZone TZ; diff --git a/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp b/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp index 08ab49d0..b470f191 100644 --- a/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp +++ b/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp @@ -15,7 +15,7 @@ LSysMenuQuick::LSysMenuQuick(QWidget *parent) : QWidget(parent), ui(new Ui::LSys settings = new QSettings("panel-plugins","systemdashboard"); brighttimer = new QTimer(this); brighttimer->setSingleShot(true); - brighttimer->setInterval(100); //100ms delay in setting the new value + brighttimer->setInterval(50); //50ms delay in setting the new value //Now reset the initial saved settings (if any) LOS::setScreenBrightness( settings->value("screenbrightness",100).toInt() ); //default to 100% LOS::setAudioVolume( settings->value("audiovolume", 100).toInt() ); //default to 100% @@ -121,6 +121,11 @@ void LSysMenuQuick::brightSliderChanged(){ //Brightness controls cannot operate extremely quickly - combine calls as necessary if(brighttimer->isActive()){ brighttimer->stop(); } brighttimer->start(); + //*DO* update the label right away + int val = ui->slider_brightness->value(); + QString txt = QString::number(val)+"%"; + if(val<100){ txt.prepend(" "); } //make sure no widget resizing + ui->label_bright_text->setText( txt ); } void LSysMenuQuick::setCurrentBrightness(){ diff --git a/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp b/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp index 8d0cacb3..a35db4d7 100644 --- a/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp +++ b/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp @@ -8,19 +8,20 @@ //#include <X11/Xlib.h> //#include <X11/Xutil.h> -#include <X11/extensions/Xdamage.h> +//#include <X11/extensions/Xdamage.h> //#include <xcb/damage.h> //static xcb_damage_damage_t dmgID; #include <LSession.h> #include <QScreen> - -static int dmgID = 0; +#include <LuminaX11.h> +//static int dmgID = 0; TrayIcon::TrayIcon(QWidget *parent) : QWidget(parent){ AID = 0; //nothing yet IID = 0; + dmgID = 0; } TrayIcon::~TrayIcon(){ @@ -38,12 +39,10 @@ void TrayIcon::attachApp(WId id){ else if(AID!=0){ qWarning() << "Tray Icon is already attached to a window!"; return; } AID = id; IID = this->winId(); //embed directly into this widget - //IID = LX11::CreateWindow( this->winId(), this->rect() ); //Create an intermediate window to be the parent - if( LSession::handle()->XCB->EmbedWindow(AID, IID) ){ + dmgID = LSession::handle()->XCB->EmbedWindow(AID, IID); + if( dmgID != 0 ){ LX11::RestoreWindow(AID); //make it visible - //XSelectInput(QX11Info::display(), AID, StructureNotifyMask); - //xcb_damage_create(QX11Info::connection(), dmgID, AID, XCB_DAMAGE_REPORT_LEVEL_RAW_RECTANGLES); - dmgID = XDamageCreate( QX11Info::display(), AID, XDamageReportRawRectangles ); + //dmgID = XDamageCreate( QX11Info::display(), AID, XDamageReportRawRectangles ); qDebug() << "New System Tray App:" << AID; QTimer::singleShot(1000, this, SLOT(updateIcon()) ); }else{ diff --git a/lumina-desktop/panel-plugins/systemtray/TrayIcon.h b/lumina-desktop/panel-plugins/systemtray/TrayIcon.h index a3cbac31..18c51a66 100644 --- a/lumina-desktop/panel-plugins/systemtray/TrayIcon.h +++ b/lumina-desktop/panel-plugins/systemtray/TrayIcon.h @@ -22,9 +22,7 @@ #include <QImage> // libLumina includes -#include <LuminaX11.h> - -//Local includes +//#include <LuminaX11.h> class TrayIcon : public QWidget{ Q_OBJECT @@ -42,19 +40,11 @@ public slots: private: WId IID, AID; //icon ID and app ID - -//private slots: - //void slotAttach(); //so that the attachment can be done in a new thread - + uint dmgID; protected: void paintEvent(QPaintEvent *event); - //void moveEvent(QMoveEvent *event); void resizeEvent(QResizeEvent *event); - //bool x11Event(XEvent *event); -//signals: - //void AppClosed(); - //void AppAttached(); }; #endif
\ No newline at end of file diff --git a/lumina-fm/BackgroundWorker.cpp b/lumina-fm/BackgroundWorker.cpp index 125e0e1c..02d2f02e 100644 --- a/lumina-fm/BackgroundWorker.cpp +++ b/lumina-fm/BackgroundWorker.cpp @@ -88,14 +88,19 @@ void BackgroundWorker::startDirChecks(QString path){ } -void BackgroundWorker::createStatusBarMsg(QFileInfoList fileList, QString path, QString message){ +void BackgroundWorker::createStatusBarMsg(QFileInfoList fileList, QString path, QString messageFolders, QString messageFiles){ + //collect some statistics of dir and display them in statusbar //Get the total size of the items double totalSizes = 0; + int numberFolders = 0; + int numberFiles = 0; for(int i=0; i<fileList.length(); i++){ if(!fileList[i].isDir()){ + numberFiles++; totalSizes += fileList[i].size(); //in Bytes } + else { numberFolders++; } } //Convert the size into display units static QStringList units = QStringList() << tr("B") << tr("KB") << tr("MB") << tr("GB") << tr("TB"); @@ -105,7 +110,8 @@ void BackgroundWorker::createStatusBarMsg(QFileInfoList fileList, QString path, totalSizes = totalSizes/1024; } //Assemble the message - QString msgStatusBar = QString(tr("%1: %2")).arg(message).arg(fileList.length()); + QString msgStatusBar = QString(tr("%1: %2 / %3: %4")).arg(messageFolders).arg(numberFolders).arg(messageFiles).arg(numberFiles); + if(totalSizes > 0){ totalSizes = qRound(totalSizes*100)/100.0; //round to 2 decimel places msgStatusBar += " "+QString(tr("Total size: %1 %2")).arg(QString::number(totalSizes), units[cunit]); diff --git a/lumina-fm/BackgroundWorker.h b/lumina-fm/BackgroundWorker.h index d50612fa..72060cad 100644 --- a/lumina-fm/BackgroundWorker.h +++ b/lumina-fm/BackgroundWorker.h @@ -34,7 +34,7 @@ public slots: //Kickoff processes with these slots // and then listen for the appropriate signals when finished void startDirChecks(QString path); - void createStatusBarMsg(QFileInfoList fileList, QString path, QString message); + void createStatusBarMsg(QFileInfoList fileList, QString path, QString messageFolders, QString messageFiles); signals: void ImagesAvailable(QStringList files); diff --git a/lumina-fm/MainUI.cpp b/lumina-fm/MainUI.cpp index 604e4c9c..0c38ae34 100644 --- a/lumina-fm/MainUI.cpp +++ b/lumina-fm/MainUI.cpp @@ -219,7 +219,7 @@ void MainUI::setupConnections(){ connect(worker, SIGNAL(SnapshotsAvailable(QString, QStringList)), this, SLOT(AvailableBackups(QString, QStringList)) ); //Background worker class for statusbar - connect(this, SIGNAL(Si_AdaptStatusBar(QFileInfoList, QString, QString)), worker, SLOT(createStatusBarMsg(QFileInfoList, QString, QString)) ); + connect(this, SIGNAL(Si_AdaptStatusBar(QFileInfoList, QString, QString, QString)), worker, SLOT(createStatusBarMsg(QFileInfoList, QString, QString, QString)) ); connect(worker, SIGNAL(Si_DisplayStatusBar(QString)), this, SLOT(DisplayStatusBar(QString)) ); //Action buttons on browser page @@ -850,7 +850,7 @@ void MainUI::currentDirectoryLoaded(){ ui->tool_goToRestore->setVisible(false); ui->tool_goToImages->setVisible(false); emit DirChanged(getCurrentDir()); - emit Si_AdaptStatusBar(fsmod->rootDirectory().entryInfoList(), getCurrentDir(), tr("Items")); + emit Si_AdaptStatusBar(fsmod->rootDirectory().entryInfoList(), getCurrentDir(), tr("Folders"), tr("Files")); ItemSelectionChanged(); } @@ -983,9 +983,9 @@ void MainUI::ItemSelectionChanged(){ QFileInfoList sel = getSelectedItems(); //display info related to files selected. //TO CHECK: impact if filesystem is very slow - if(sel.size()>0){ emit Si_AdaptStatusBar(sel, "", tr("Items selected")); } - else{ emit Si_AdaptStatusBar(fsmod->rootDirectory().entryInfoList(), getCurrentDir(), tr("Items")); } - + if(sel.size()>0){ emit Si_AdaptStatusBar(sel, "", tr("Selected Folders"), tr("Files"));} + else{ emit Si_AdaptStatusBar(fsmod->rootDirectory().entryInfoList(), getCurrentDir(), tr("Folders"), tr("Files")); } + ui->tool_act_run->setEnabled(sel.length()==1); ui->tool_act_runwith->setEnabled(sel.length()==1); ui->tool_act_rm->setEnabled(!sel.isEmpty() && isUserWritable); diff --git a/lumina-fm/MainUI.h b/lumina-fm/MainUI.h index d88492d6..58f03ee8 100644 --- a/lumina-fm/MainUI.h +++ b/lumina-fm/MainUI.h @@ -225,7 +225,7 @@ private slots: signals: void DirChanged(QString path); - void Si_AdaptStatusBar(QFileInfoList fileList, QString path, QString message); + void Si_AdaptStatusBar(QFileInfoList fileList, QString path, QString messageFolders, QString messageFiles); protected: void resizeEvent(QResizeEvent*); diff --git a/lumina-open/main.cpp b/lumina-open/main.cpp index de7d137b..d0d2ced1 100644 --- a/lumina-open/main.cpp +++ b/lumina-open/main.cpp @@ -325,19 +325,19 @@ int main(int argc, char **argv){ } retcode = p->exitCode(); //qDebug() << "[lumina-open] Finished Cmd:" << cmd << retcode << p->exitStatus(); - + if( QFile::exists("/tmp/.luminastopping") ){ watch = false; } //closing down session - ignore "crashes" (app could have been killed during cleanup) if( (p->exitStatus() == QProcess::CrashExit || retcode > 0) && watch){ qDebug() << "[lumina-open] Application Error:" << retcode; QString err = QString(p->readAllStandardError()); if(err.isEmpty()){ err = QString(p->readAllStandardOutput()); } - //Setup the application - QApplication App(argc, argv); - LuminaThemeEngine theme(&App); - LUtils::LoadTranslation(&App,"lumina-open"); - QMessageBox dlg(QMessageBox::Critical, QObject::tr("Application Error"), QObject::tr("The following application experienced an error and needed to close:")+"\n\n"+cmd ); - if(!err.isEmpty()){ dlg.setDetailedText(err); } - dlg.exec(); - } + //Setup the application + QApplication App(argc, argv); + LuminaThemeEngine theme(&App); + LUtils::LoadTranslation(&App,"lumina-open"); + QMessageBox dlg(QMessageBox::Critical, QObject::tr("Application Error"), QObject::tr("The following application experienced an error and needed to close:")+"\n\n"+cmd ); + if(!err.isEmpty()){ dlg.setDetailedText(err); } + dlg.exec(); + } } return retcode; } diff --git a/lumina-search/ConfigUI.cpp b/lumina-search/ConfigUI.cpp index 25c12246..ada82946 100644 --- a/lumina-search/ConfigUI.cpp +++ b/lumina-search/ConfigUI.cpp @@ -59,10 +59,7 @@ void ConfigUI::on_tool_adddirs_clicked(){ } void ConfigUI::on_tool_rmdir_clicked(){ - QList<QListWidgetItem*> sel = ui->list_excludes->selectedItems(); - for(int i=0; i<sel.length(); i++){ - ui->list_excludes->removeItemWidget(sel[i]); - } + qDeleteAll(ui->list_excludes->selectedItems()); } void ConfigUI::on_list_excludes_itemSelectionChanged(){ |