This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2goclient. commit 94872d2319b91b69cdc5223c50581949f317fb42 Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> Date: Thu Nov 4 10:15:37 2021 -0600 Implement different view modes for sessions explorer: Favorite sessions, running sessions, all sessions. --- debian/changelog | 2 + res/img/icons/16x16/fav.png | Bin 0 -> 897 bytes res/img/icons/16x16/fav1.png | Bin 0 -> 1020 bytes res/img/svg/fav.svg | 76 ++++++++++++++++++++++++++++++ res/img/svg/fav1.svg | 76 ++++++++++++++++++++++++++++++ res/resources.qrc | 2 + src/onmainwindow.cpp | 1 + src/sessionbutton.cpp | 84 ++++++++++++++++++++++++++++++++- src/sessionbutton.h | 20 ++++++++ src/sessionexplorer.cpp | 108 +++++++++++++++++++++++++++++++++++++++++-- src/sessionexplorer.h | 15 ++++++ 11 files changed, 379 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index ed4343b..5423307 100644 --- a/debian/changelog +++ b/debian/changelog @@ -24,6 +24,8 @@ x2goclient (4.1.2.3-0x2go1) UNRELEASED; urgency=medium - Fix loading session icon to system tray when using broker. - Add --debug argument to x2gokdriveclient in debug mode. - Setting debug filter rules for QT>=5.2 + - Implement different view modes for sessions explorer: + Favorite sessions, running sessions, all sessions. [ Ryan Schmidt ] * New upstream version (4.1.2.3): diff --git a/res/img/icons/16x16/fav.png b/res/img/icons/16x16/fav.png new file mode 100644 index 0000000..39747d0 Binary files /dev/null and b/res/img/icons/16x16/fav.png differ diff --git a/res/img/icons/16x16/fav1.png b/res/img/icons/16x16/fav1.png new file mode 100644 index 0000000..03bb285 Binary files /dev/null and b/res/img/icons/16x16/fav1.png differ diff --git a/res/img/svg/fav.svg b/res/img/svg/fav.svg new file mode 100644 index 0000000..2f22795 --- /dev/null +++ b/res/img/svg/fav.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + viewBox="0 0 210 297" + version="1.1" + id="svg8" + inkscape:export-filename="/usr/src.cur/GIT/x2goclient/res/img/icons/16x16/fav.png" + inkscape:export-xdpi="4.3711381" + inkscape:export-ydpi="4.3711381" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)" + sodipodi:docname="fav.svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4257762" + inkscape:cx="389.81701" + inkscape:cy="533.96979" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + inkscape:document-rotation="0" + showgrid="false" + inkscape:window-width="2560" + inkscape:window-height="1058" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="star" + style="opacity:0.996;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#397cdc;stroke-width:6.96354;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path855" + sodipodi:sides="5" + sodipodi:cx="109.69393" + sodipodi:cy="148.25699" + sodipodi:r1="69.414932" + sodipodi:r2="36.455986" + sodipodi:arg1="0.94140643" + sodipodi:arg2="1.569725" + inkscape:flatsided="false" + inkscape:rounded="0.11" + inkscape:randomized="0" + d="m 150.55515,204.3711 c -4.02898,2.93383 -35.83819,-19.66349 -40.82216,-19.65815 -4.98397,0.005 -36.744688,22.67076 -40.779943,19.74558 -4.035255,-2.92519 7.62648,-40.1605 6.08127,-44.89888 -1.545209,-4.73839 -32.915906,-27.94063 -31.380852,-32.68231 1.535053,-4.74169 40.551613,-5.15707 44.580591,-8.09089 4.028978,-2.93382 16.401534,-39.939014 21.385504,-39.944354 4.98397,-0.0053 17.4358,36.973254 21.47105,39.898444 4.03526,2.92518 43.05262,3.25695 44.59783,7.99534 1.54521,4.738 [...] + inkscape:transform-center-x="-0.032059244" + inkscape:transform-center-y="-6.3851549" + transform="matrix(1.0040637,0,0,1.054415,-0.17716926,-4.2901915)" /> + </g> +</svg> diff --git a/res/img/svg/fav1.svg b/res/img/svg/fav1.svg new file mode 100644 index 0000000..06dd299 --- /dev/null +++ b/res/img/svg/fav1.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + viewBox="0 0 210 297" + version="1.1" + id="svg8" + inkscape:export-filename="/usr/src.cur/GIT/x2goclient/res/img/icons/16x16/fav1.png" + inkscape:export-xdpi="4.3711381" + inkscape:export-ydpi="4.3711381" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)" + sodipodi:docname="fav1.svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4128293" + inkscape:cx="389.81701" + inkscape:cy="534.67116" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + inkscape:document-rotation="0" + showgrid="false" + inkscape:window-width="2560" + inkscape:window-height="1058" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="star" + style="opacity:0.996;fill:#ffd700;fill-opacity:1;fill-rule:nonzero;stroke:#397cdc;stroke-width:6.96354;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path855" + sodipodi:sides="5" + sodipodi:cx="109.69393" + sodipodi:cy="148.25699" + sodipodi:r1="69.414932" + sodipodi:r2="36.455986" + sodipodi:arg1="0.94140643" + sodipodi:arg2="1.569725" + inkscape:flatsided="false" + inkscape:rounded="0.11" + inkscape:randomized="0" + d="m 150.55515,204.3711 c -4.02898,2.93383 -35.83819,-19.66349 -40.82216,-19.65815 -4.98397,0.005 -36.744688,22.67076 -40.779943,19.74558 -4.035255,-2.92519 7.62648,-40.1605 6.08127,-44.89888 -1.545209,-4.73839 -32.915906,-27.94063 -31.380852,-32.68231 1.535053,-4.74169 40.551613,-5.15707 44.580591,-8.09089 4.028978,-2.93382 16.401534,-39.939014 21.385504,-39.944354 4.98397,-0.0053 17.4358,36.973254 21.47105,39.898444 4.03526,2.92518 43.05262,3.25695 44.59783,7.99534 1.54521,4.738 [...] + inkscape:transform-center-x="-0.032059244" + inkscape:transform-center-y="-6.3851549" + transform="matrix(1.0040637,0,0,1.054415,-0.17716926,-4.2901915)" /> + </g> +</svg> diff --git a/res/resources.qrc b/res/resources.qrc index cdacfe5..6f66467 100644 --- a/res/resources.qrc +++ b/res/resources.qrc @@ -62,6 +62,8 @@ <file>img/icons/16x16/file-open.png</file> <file>img/icons/16x16/delete.png</file> <file>img/icons/16x16/edit.png</file> + <file>img/icons/16x16/fav.png</file> + <file>img/icons/16x16/fav1.png</file> <file>img/icons/16x16/gnome.png</file> <file>img/icons/16x16/unity.png</file> <file>img/icons/16x16/xfce.png</file> diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index f1febcb..349bc20 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -840,6 +840,7 @@ void ONMainWindow::initWidgetsNormal() users=new QScrollArea ( fr ); + vblay->addLayout(sessionExplorer->getSelectLayout()); vblay->addLayout(sessionExplorer->getNavigationLayout()); vblay->addWidget(users); diff --git a/src/sessionbutton.cpp b/src/sessionbutton.cpp index bfccf2a..1cacf1a 100644 --- a/src/sessionbutton.cpp +++ b/src/sessionbutton.cpp @@ -46,6 +46,7 @@ SessionButton::SessionButton ( ONMainWindow* mw,QWidget *parent, QString id ) { editable=mw->sessionEditEnabled(); + running=suspended=0; QPalette pal=palette(); pal.setColor ( QPalette::Active, QPalette::WindowText, QPalette::Mid ); @@ -59,6 +60,7 @@ SessionButton::SessionButton ( ONMainWindow* mw,QWidget *parent, QString id ) updated=false; + fav=false; QFont fnt=font(); if ( mw->retMiniMode() ) @@ -146,6 +148,15 @@ SessionButton::SessionButton ( ONMainWindow* mw,QWidget *parent, QString id ) editBut->setPalette ( cpal ); sessMenu=new QMenu ( this ); + + favButton=new QPushButton (this); + favButton->setIcon(QIcon(mw->iconsPath ( "/16x16/fav.png" ))); + favButton->setFlat(true); + favButton->setFixedSize(24,24); + favButton->setMouseTracking(true); + favButton->setPalette ( cpal ); + connect( favButton, SIGNAL(clicked()), this, SLOT(slotFavClick())); + connect ( sessMenu,SIGNAL ( aboutToHide() ),this, SLOT ( slotMenuHide() ) ); @@ -175,6 +186,7 @@ SessionButton::SessionButton ( ONMainWindow* mw,QWidget *parent, QString id ) #endif editBut->setToolTip ( tr ( "Session actions" ) ); + favButton->setToolTip(tr("Add to favorites")); cmdBox->setToolTip ( tr ( "Select type" ) ); geomBox->setToolTip ( tr ( "Select resolution" ) ); @@ -186,6 +198,7 @@ SessionButton::SessionButton ( ONMainWindow* mw,QWidget *parent, QString id ) sessName->move ( 80,34 ); sessStatus->move(80,50); editBut->move ( 307,156 ); + favButton->move ( 307,10 ); serverIcon->move ( 58,84 ); server->move ( 80,84 ); cmdIcon->move ( 58,108 ); @@ -200,6 +213,7 @@ SessionButton::SessionButton ( ONMainWindow* mw,QWidget *parent, QString id ) else { editBut->move ( 218,113 ); + favButton->move ( 218,10 ); sessName->move ( 64,11 ); sessStatus->hide(); serverIcon->move ( 66,44 ); @@ -248,6 +262,7 @@ SessionButton::SessionButton ( ONMainWindow* mw,QWidget *parent, QString id ) SLOT ( slot_geom_change ( const QString& ) ) ); editBut->setFocusPolicy ( Qt::NoFocus ); + favButton->setFocusPolicy ( Qt::NoFocus ); sound->setFocusPolicy ( Qt::NoFocus ); cmdBox->setFocusPolicy ( Qt::NoFocus ); geomBox->setFocusPolicy ( Qt::NoFocus ); @@ -277,6 +292,52 @@ SessionButton::SessionButton ( ONMainWindow* mw,QWidget *parent, QString id ) SessionButton::~SessionButton() {} +bool SessionButton::getFavFromConfig() +{ + X2goSettings st( "favorits" ); + return st.setting()->value("favorites").toStringList().contains(sid); +} + +void SessionButton::slotFavClick() +{ + setFav(!fav); + X2goSettings st( "favorits" ); + QStringList favs=st.setting()->value("favorites").toStringList(); + if(fav) + { + if(! favs.contains(sid)) + { + favs.append(sid); + st.setting()->setValue("favorites",favs); + } + } + else + { + if(favs.contains(sid)) + { + favs.removeAll(sid); + st.setting()->setValue("favorites",favs); + } + } + st.setting()->sync(); + emit favClicked(); +} + +void SessionButton::setFav(bool fav) +{ + this->fav=fav; + if(fav) + { + favButton->setIcon(QIcon(par->iconsPath ( "/16x16/fav1.png" ))); + favButton->setToolTip(tr("Remove from favorites")); + } + else + { + favButton->setIcon(QIcon(par->iconsPath ( "/16x16/fav.png" ))); + favButton->setToolTip(tr("Add to favorites")); + } +} + void SessionButton::slotClicked() { emit sessionSelected ( this ); @@ -338,10 +399,10 @@ void SessionButton::redraw() sessStatus->setText("("+tr("suspended")+")"); } - int suspended=st->setting()->value ( sid+"/suspended", + suspended=st->setting()->value ( sid+"/suspended", ( QVariant ) QString::null ).toUInt(); - int running=st->setting()->value ( sid+"/running", + running=st->setting()->value ( sid+"/running", ( QVariant ) QString::null ).toUInt(); if(suspended || running) { @@ -637,6 +698,7 @@ void SessionButton::redraw() cmd->setMinimumSize ( cmd->sizeHint() ); server->setMinimumSize ( server->sizeHint() ); delete st; + setFav(getFavFromConfig()); } void SessionButton::mousePressEvent ( QMouseEvent * event ) @@ -770,6 +832,24 @@ void SessionButton::mouseMoveEvent ( QMouseEvent * event ) editBut->setFlat ( true ); } + + if ( favButton->isFlat() ) + { + if ( event->x() > favButton->x() && event->x() < favButton->x() + + favButton->width() && + event->y() >favButton->y() && event->y() <favButton->y() + + favButton->height() ) + favButton->setFlat ( false ); + } + else + { + if ( event->x() < favButton->x() || event->x() > favButton->x() + + favButton->width() || + event->y() <favButton->y() || event->y() >favButton->y() + + favButton->height() ) + favButton->setFlat ( true ); + } + if ( geom->isVisible() ) if ( event->x() > geom->x() && event->x() < geom->x() + geom->width() && diff --git a/src/sessionbutton.h b/src/sessionbutton.h index d831e61..fb31d06 100644 --- a/src/sessionbutton.h +++ b/src/sessionbutton.h @@ -60,8 +60,22 @@ public: { return updated; } + bool isFav() + { + return fav; + } + int getRunning() + { + return running; + } + int getSuspended() + { + return suspended; + } private: + void setFav(bool fav); + bool getFavFromConfig(); QString nameofSession; QString sid; QString path; @@ -75,6 +89,7 @@ private: QLabel* cmdIcon; QLabel* server; QPushButton* editBut; + QPushButton* favButton; QLabel* geom; QMenu* sessMenu; QComboBox* geomBox; @@ -88,6 +103,9 @@ private: bool published; bool editable; bool updated; + bool fav; + int running; + int suspended; private slots: void slotClicked(); @@ -99,11 +117,13 @@ private slots: void slotMenuHide(); void slotShowMenu(); void slotCreateSessionIcon(); + void slotFavClick(); signals: void sessionSelected ( SessionButton* ); void signal_edit ( SessionButton* ); void signal_remove ( SessionButton* ); void clicked(); + void favClicked(); protected: virtual void mouseMoveEvent ( QMouseEvent * event ); virtual void mousePressEvent ( QMouseEvent * event ); diff --git a/src/sessionexplorer.cpp b/src/sessionexplorer.cpp index d163aa6..3bb42b0 100644 --- a/src/sessionexplorer.cpp +++ b/src/sessionexplorer.cpp @@ -33,11 +33,25 @@ #include "x2gologdebug.h" #include <QBuffer> #include <QDir> +#include <QPushButton> SessionExplorer::SessionExplorer(ONMainWindow* p):QObject(p) { parent=p; lastSession=0; + initUpdate=true; + viewMode=ALL; + runButton=new QPushButton(tr("Running"),parent->getCentralFrame()); + favButton=new QPushButton(tr("Favorites"),parent->getCentralFrame()); + allButton=new QPushButton(tr("All Sessions"),parent->getCentralFrame()); + allButton->setFlat(true); + runButton->setFocusPolicy ( Qt::NoFocus ); + favButton->setFocusPolicy ( Qt::NoFocus ); + allButton->setFocusPolicy ( Qt::NoFocus ); + selectLayout=new QHBoxLayout(); + selectLayout->addWidget(runButton); + selectLayout->addWidget(favButton); + selectLayout->addWidget(allButton); backButton=new QToolButton(parent->getCentralFrame()); backButton->setIcon(QIcon( parent->iconsPath ( "/32x32/tbhide.png" ))); backButton->setAutoRaise(true); @@ -54,6 +68,14 @@ SessionExplorer::SessionExplorer(ONMainWindow* p):QObject(p) backButton->setPalette(pal); backButton->setAutoFillBackground(true); + + runButton->setPalette(pal); + runButton->setAutoFillBackground(true); + favButton->setPalette(pal); + favButton->setAutoFillBackground(true); + allButton->setPalette(pal); + allButton->setAutoFillBackground(true); + pal=pathLabel->palette(); pal.setBrush ( QPalette::Window, QColor ( 110,112,127,255 ) ); pal.setBrush ( QPalette::WindowText, QColor ( 200,200,200,255 ) ); @@ -61,6 +83,9 @@ SessionExplorer::SessionExplorer(ONMainWindow* p):QObject(p) pathLabel->setAutoFillBackground(true); setNavigationVisible(false); connect(backButton,SIGNAL(clicked(bool)), this, SLOT(slotLevelUp())); + connect(runButton,SIGNAL(clicked(bool)), this, SLOT(slotShowRun())); + connect(allButton,SIGNAL(clicked(bool)), this, SLOT(slotShowAll())); + connect(favButton,SIGNAL(clicked(bool)), this, SLOT(slotShowFav())); } SessionExplorer::~SessionExplorer() @@ -111,11 +136,44 @@ void SessionExplorer::updateSessions(QStringList slst) delete s; } } + updateView(); +} +void SessionExplorer::updateView() +{ + bool hasFavs=false; + bool hasRun=0; + foreach (SessionButton* s, sessions) + { + if(s->isFav()) + { + hasFavs=true; + } + if(s->getRunning()||s->getSuspended()) + hasRun=true; + } + runButton->setVisible(hasRun); + favButton->setVisible(hasFavs); + allButton->setVisible(hasRun||hasFavs); + if(initUpdate) + { + initUpdate=false; + if(hasRun) + { + viewMode=RUN; + } + else if(hasFavs) + { + viewMode=FAV; + } + } + if((!hasRun && viewMode==RUN)||(!hasFavs && viewMode==FAV)) + { + viewMode=ALL; + } placeButtons(); } - void SessionExplorer::resize() { pathLabel->setMaximumWidth(parent->getUsersArea()->width()-backButton->width()); @@ -316,6 +374,7 @@ SessionButton* SessionExplorer::createBut ( const QString& id ) connect ( l,SIGNAL ( sessionSelected ( SessionButton* ) ),parent, SLOT ( slotSelectedFromList ( SessionButton* ) ) ); + connect(l, SIGNAL( favClicked()), this, SLOT(updateView())); checkPath(l); @@ -325,9 +384,10 @@ SessionButton* SessionExplorer::createBut ( const QString& id ) void SessionExplorer::placeButtons() { + getFoldersFromConfig(); - setNavigationVisible(currentPath.length()>0); + setNavigationVisible((currentPath.length()>0)&&(viewMode==ALL)); resize(); int currentVerticalPosition=0; qSort ( sessions.begin(),sessions.end(),SessionButton::lessThen ); @@ -335,6 +395,11 @@ void SessionExplorer::placeButtons() for ( int i=0; i<folders.size(); ++i ) { + if(viewMode!=ALL) + { + folders[i]->hide(); + continue; + } if((folders[i]->getPath() != currentPath)||(getFolderChildren(folders[i]).length()<=0)) { folders[i]->hide(); @@ -366,7 +431,17 @@ void SessionExplorer::placeButtons() for ( int i=0; i<sessions.size(); ++i ) { - if(sessions[i]->getPath() != currentPath) + if((viewMode==ALL) && ( sessions[i]->getPath() != currentPath)) + { + sessions[i]->hide(); + continue; + } + if((viewMode==FAV) && (! sessions[i]->isFav())) + { + sessions[i]->hide(); + continue; + } + if((viewMode==RUN) && (! (sessions[i]->getRunning() || sessions[i]->getSuspended()))) { sessions[i]->hide(); continue; @@ -689,3 +764,30 @@ void SessionExplorer::setEnable(bool enable) { backButton->setEnabled(enable); } + +void SessionExplorer::slotShowAll() +{ + viewMode=ALL; + allButton->setFlat(true); + runButton->setFlat(false); + favButton->setFlat(false); + updateView(); +} + +void SessionExplorer::slotShowRun() +{ + viewMode=RUN; + allButton->setFlat(false); + runButton->setFlat(true); + favButton->setFlat(false); + updateView(); +} + +void SessionExplorer::slotShowFav() +{ + viewMode=FAV; + allButton->setFlat(false); + runButton->setFlat(false); + favButton->setFlat(true); + updateView(); +} diff --git a/src/sessionexplorer.h b/src/sessionexplorer.h index a1ec64e..917a5de 100644 --- a/src/sessionexplorer.h +++ b/src/sessionexplorer.h @@ -26,6 +26,7 @@ class SessionButton; class FolderButton; class ONMainWindow; class QToolButton; +class QPushButton; class QLabel; class QHBoxLayout; @@ -57,6 +58,10 @@ public: { return navigationLayout; } + QHBoxLayout* getSelectLayout() + { + return selectLayout; + } bool isFolderEmpty(QString path); void resize(); void setFolderIcon(QString path, QString icon); @@ -85,9 +90,15 @@ private: SessionButton* lastSession; ONMainWindow* parent; QToolButton* backButton; + QPushButton* favButton; + QPushButton* runButton; + QPushButton* allButton; QLabel* pathLabel; QHBoxLayout* navigationLayout; + QHBoxLayout* selectLayout; QString currentPath; + enum {ALL, FAV, RUN} viewMode; + bool initUpdate; //functions private: @@ -107,6 +118,10 @@ private slots: void slotFolderSelected(FolderButton* bt); void slotLevelUp(); QStringList getFolderChildren(FolderButton* folder); + void slotShowAll(); + void slotShowRun(); + void slotShowFav(); + void updateView(); }; #endif -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goclient.git