diff options
author | Ken Moore <ken@ixsystems.com> | 2017-02-06 15:45:37 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-06 15:45:37 -0500 |
commit | d3c4377813f7ccecc7014b4006503fd559be3a1a (patch) | |
tree | 458b78871b8eefc4c74657d978da884060b8a055 /src-qt5 | |
parent | Merge pull request #374 from NorwegianRockCat/master (diff) | |
parent | Fix memory leak. (diff) | |
download | lumina-d3c4377813f7ccecc7014b4006503fd559be3a1a.tar.gz lumina-d3c4377813f7ccecc7014b4006503fd559be3a1a.tar.bz2 lumina-d3c4377813f7ccecc7014b4006503fd559be3a1a.zip |
Merge pull request #375 from antab/app-selection-default
Select current application when changing defaults
Diffstat (limited to 'src-qt5')
-rw-r--r-- | src-qt5/core-utils/lumina-config/AppDialog.h | 8 | ||||
-rw-r--r-- | src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp | 195 | ||||
-rw-r--r-- | src-qt5/core-utils/lumina-config/pages/page_defaultapps.h | 6 |
3 files changed, 80 insertions, 129 deletions
diff --git a/src-qt5/core-utils/lumina-config/AppDialog.h b/src-qt5/core-utils/lumina-config/AppDialog.h index 4eb6471c..2b03fc76 100644 --- a/src-qt5/core-utils/lumina-config/AppDialog.h +++ b/src-qt5/core-utils/lumina-config/AppDialog.h @@ -23,18 +23,22 @@ private: Ui::AppDialog *ui; public: - AppDialog(QWidget *parent = 0) : QDialog(parent), ui(new Ui::AppDialog){ + AppDialog(QWidget *parent = 0, QString defaultPath = "") : QDialog(parent), ui(new Ui::AppDialog){ ui->setupUi(this); //load the designer file appreset = false; ui->listApps->clear(); + QListWidgetItem *defaultItem = nullptr; QList<XDGDesktop*> APPS = LXDG::sortDesktopNames(APPSLIST->apps(false,false)); //Don't show all/hidden for(int i=0; i<APPS.length(); i++){ QListWidgetItem *app = new QListWidgetItem(LXDG::findIcon(APPS[i]->icon,"application-x-executable"), APPS[i]->name); app->setData(Qt::UserRole, APPS[i]->filePath); ui->listApps->addItem(app); + if(APPS[i]->filePath == defaultPath){ + defaultItem = app; + } } if(ui->listApps->count()){ - ui->listApps->setCurrentItem(ui->listApps->item(0)); + ui->listApps->setCurrentItem(defaultItem != nullptr ? defaultItem : ui->listApps->item(0)); } this->setWindowIcon( LXDG::findIcon("system-search","") ); if(parent!=0){ diff --git a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp index b2a0896c..a21653c9 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp +++ b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp @@ -42,92 +42,23 @@ void page_defaultapps::LoadSettings(int){ emit HasPendingChanges(false); emit ChangePageTitle( tr("Default Applications") ); -//First load the lumina-open specific defaults - // - Default File Manager - QString tmp = LXDG::findDefaultAppForMime("inode/directory"); - if(tmp.isEmpty()){ tmp = "lumina-fm"; } - if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings - if(tmp.endsWith(".desktop")){ - XDGDesktop file(tmp); - if(file.type == XDGDesktop::BAD){ - //Might be a binary - just print out the raw "path" - ui->tool_default_filemanager->setText(tmp.section("/",-1)); - ui->tool_default_filemanager->setIcon( LXDG::findIcon("application-x-executable","") ); - }else{ - ui->tool_default_filemanager->setText(file.name); - ui->tool_default_filemanager->setIcon(LXDG::findIcon(file.icon,"") ); - } - }else if(tmp.isEmpty()){ - ui->tool_default_filemanager->setText(tr("Click to Set")); - ui->tool_default_filemanager->setIcon( LXDG::findIcon("system-help","") ); - }else{ - //Might be a binary - just print out the raw "path" - ui->tool_default_filemanager->setText(tmp.section("/",-1)); - ui->tool_default_filemanager->setIcon( LXDG::findIcon("application-x-executable","") ); - } + //First load the lumina-open specific defaults + // - Default File Manager + defaultFileManager = LXDG::findDefaultAppForMime("inode/directory"); + if(defaultFileManager.isEmpty()){ defaultFileManager = "lumina-fm"; } + updateDefaultButton(ui->tool_default_filemanager, defaultFileManager); + // - Default Terminal - tmp =LXDG::findDefaultAppForMime("application/terminal"); //sessionsettings->value("default-terminal", "xterm").toString(); - if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings - if(tmp.endsWith(".desktop")){ - XDGDesktop file(tmp); - if(file.type == XDGDesktop::BAD){ - //Might be a binary - just print out the raw "path" - ui->tool_default_terminal->setText(tmp.section("/",-1)); - ui->tool_default_terminal->setIcon( LXDG::findIcon("application-x-executable","") ); - }else{ - ui->tool_default_terminal->setText(file.name); - ui->tool_default_terminal->setIcon(LXDG::findIcon(file.icon,"") ); - } - }else if(tmp.isEmpty()){ - ui->tool_default_terminal->setText(tr("Click to Set")); - ui->tool_default_terminal->setIcon( LXDG::findIcon("system-help","") ); - }else{ - //Might be a binary - just print out the raw "path" - ui->tool_default_terminal->setText(tmp.section("/",-1)); - ui->tool_default_terminal->setIcon( LXDG::findIcon("application-x-executable","") ); - } + defaultTerminal = LXDG::findDefaultAppForMime("application/terminal"); //sessionsettings->value("default-terminal", "xterm").toString(); + updateDefaultButton(ui->tool_default_terminal, defaultTerminal); + // - Default Web Browser - tmp = LXDG::findDefaultAppForMime("x-scheme-handler/http"); //appsettings->value("default/webbrowser", "").toString(); - if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings - if(tmp.endsWith(".desktop")){ - XDGDesktop file(tmp); - if(file.type == XDGDesktop::BAD){ - //Might be a binary - just print out the raw "path" - ui->tool_default_webbrowser->setText(tmp.section("/",-1)); - ui->tool_default_webbrowser->setIcon( LXDG::findIcon("application-x-executable","") ); - }else{ - ui->tool_default_webbrowser->setText(file.name); - ui->tool_default_webbrowser->setIcon(LXDG::findIcon(file.icon,"") ); - } - }else if(tmp.isEmpty()){ - ui->tool_default_webbrowser->setText(tr("Click to Set")); - ui->tool_default_webbrowser->setIcon( LXDG::findIcon("system-help","") ); - }else{ - //Might be a binary - just print out the raw "path" - ui->tool_default_webbrowser->setText(tmp.section("/",-1)); - ui->tool_default_webbrowser->setIcon( LXDG::findIcon("application-x-executable","") ); - } + defaultBrowser = LXDG::findDefaultAppForMime("x-scheme-handler/http"); //appsettings->value("default/webbrowser", "").toString(); + updateDefaultButton(ui->tool_default_webbrowser, defaultBrowser); + // - Default Email Client - tmp = LXDG::findDefaultAppForMime("application/email"); //appsettings->value("default/email", "").toString(); - if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings - if(tmp.endsWith(".desktop")){ - XDGDesktop file(tmp); - if(file.type == XDGDesktop::BAD){ - //Might be a binary - just print out the raw "path" - ui->tool_default_email->setText(tmp.section("/",-1)); - ui->tool_default_email->setIcon( LXDG::findIcon("application-x-executable","") ); - }else{ - ui->tool_default_email->setText(file.name); - ui->tool_default_email->setIcon(LXDG::findIcon(file.icon,"") ); - } - }else if(tmp.isEmpty()){ - ui->tool_default_email->setText(tr("Click to Set")); - ui->tool_default_email->setIcon( LXDG::findIcon("system-help","") ); - }else{ - //Might be a binary - just print out the raw "path" - ui->tool_default_email->setText(tmp.section("/",-1)); - ui->tool_default_email->setIcon( LXDG::findIcon("application-x-executable","") ); - } + defaultEmail = LXDG::findDefaultAppForMime("application/email"); //appsettings->value("default/email", "").toString(); + updateDefaultButton(ui->tool_default_email, defaultEmail); //Now load the XDG mime defaults ui->tree_defaults->clear(); @@ -135,7 +66,7 @@ void page_defaultapps::LoadSettings(int){ //qDebug() << "Mime List:\n" << defMimeList.join("\n"); defMimeList.sort(); //sort by group/mime //Now fill the tree by group/mime - QTreeWidgetItem *group = new QTreeWidgetItem(0); //nothing at the moment + QTreeWidgetItem *group = nullptr; QString ccat; for(int i=0; i<defMimeList.length(); i++){ //Get the info from this entry @@ -145,37 +76,38 @@ void page_defaultapps::LoadSettings(int){ QString def = defMimeList[i].section("::::",2,2); QString comment = defMimeList[i].section("::::",3,50); //Now check if this is a new category - if(ccat!=cat){ - //New group - group = new QTreeWidgetItem(0); + if(group == nullptr || ccat!=cat){ + //New group + group = new QTreeWidgetItem(0); group->setText(0, cat); //add translations for known/common groups later - ui->tree_defaults->addTopLevelItem(group); - ccat = cat; + ui->tree_defaults->addTopLevelItem(group); + ccat = cat; } //Now create the entry QTreeWidgetItem *it = new QTreeWidgetItem(); - it->setWhatsThis(0,mime); // full mimetype - it->setText(0, QString(tr("%1 (%2)")).arg(mime.section("/",-1), extlist) ); - it->setText(2,comment); - it->setToolTip(0, comment); it->setToolTip(1,comment); - //Now load the default (if there is one) - it->setWhatsThis(1,def); //save for later - if(def.endsWith(".desktop")){ - XDGDesktop file(def); - if(file.type == XDGDesktop::BAD){ - //Might be a binary - just print out the raw "path" - it->setText(1,def.section("/",-1)); - it->setIcon(1, LXDG::findIcon("application-x-executable","") ); - }else{ - it->setText(1, file.name); - it->setIcon(1, LXDG::findIcon(file.icon,"") ); - } - }else if(!def.isEmpty()){ - //Binary/Other default - it->setText(1, def.section("/",-1)); - it->setIcon(1, LXDG::findIcon("application-x-executable","") ); + it->setWhatsThis(0,mime); // full mimetype + it->setText(0, QString(tr("%1 (%2)")).arg(mime.section("/",-1), extlist) ); + it->setText(2,comment); + it->setToolTip(0, comment); it->setToolTip(1,comment); + //Now load the default (if there is one) + it->setWhatsThis(1,def); //save for later + it->setData(1, Qt::UserRole, def); + if(def.endsWith(".desktop")){ + XDGDesktop file(def); + if(file.type == XDGDesktop::BAD){ + //Might be a binary - just print out the raw "path" + it->setText(1, def.section("/",-1)); + it->setIcon(1, LXDG::findIcon("application-x-executable","") ); + }else{ + it->setText(1, file.name); + it->setIcon(1, LXDG::findIcon(file.icon,"") ); } - group->addChild(it); + }else if(!def.isEmpty()){ + //Binary/Other default + it->setText(1, def.section("/",-1)); + it->setIcon(1, LXDG::findIcon("application-x-executable","") ); + } + group->addChild(it); } ui->tree_defaults->sortItems(0,Qt::AscendingOrder); @@ -194,8 +126,8 @@ void page_defaultapps::updateIcons(){ //================= // PRIVATE //================= -QString page_defaultapps::getSysApp(bool allowreset){ - AppDialog dlg(this); +QString page_defaultapps::getSysApp(bool allowreset, QString defaultPath){ + AppDialog dlg(this, defaultPath); dlg.allowReset(allowreset); dlg.exec(); if(dlg.appreset && allowreset){ @@ -206,6 +138,7 @@ QString page_defaultapps::getSysApp(bool allowreset){ } void page_defaultapps::updateDefaultButton(QToolButton *button, QString app){ + if( !QFile::exists(app) && !LUtils::isValidBinary(app) ){ qDebug() << "Invalid Settings:" << app; app.clear(); } //invalid settings if(app.endsWith(".desktop")){ XDGDesktop file(app); if(file.type == XDGDesktop::BAD){ @@ -231,10 +164,11 @@ void page_defaultapps::updateDefaultButton(QToolButton *button, QString app){ //================= void page_defaultapps::changeDefaultBrowser(){ //Prompt for the new app - QString app = getSysApp(true); - if(app.isEmpty()){ return; }//nothing selected - if(app=="reset"){ app.clear(); } + QString app = getSysApp(true, defaultBrowser); + if(app.isEmpty()){ return; }//nothing selected + if(app=="reset"){ app.clear(); } //save the new app setting and adjust the button appearance + defaultBrowser = app; LXDG::setDefaultAppForMime("x-scheme-handler/http", app.section("/",-1)); LXDG::setDefaultAppForMime("x-scheme-handler/https", app.section("/",-1)); updateDefaultButton(ui->tool_default_webbrowser, app); @@ -242,30 +176,33 @@ void page_defaultapps::changeDefaultBrowser(){ void page_defaultapps::changeDefaultEmail(){ //Prompt for the new app - QString app = getSysApp(true); - if(app.isEmpty()){ return; }//nothing selected - if(app=="reset"){ app.clear(); } + QString app = getSysApp(true, defaultEmail); + if(app.isEmpty()){ return; }//nothing selected + if(app=="reset"){ app.clear(); } //save the new app setting and adjust the button appearance + defaultEmail = app; LXDG::setDefaultAppForMime("application/email",app.section("/",-1)); updateDefaultButton(ui->tool_default_email, app); } void page_defaultapps::changeDefaultFileManager(){ //Prompt for the new app - QString app = getSysApp(true); - if(app.isEmpty()){ return; }//nothing selected - if(app=="reset"){ app = "lumina-fm"; } + QString app = getSysApp(true, defaultFileManager); + if(app.isEmpty()){ return; }//nothing selected + if(app=="reset"){ app = "lumina-fm"; } //save the new app setting and adjust the button appearance + defaultFileManager = app; LXDG::setDefaultAppForMime("inode/directory", app.section("/",-1)); updateDefaultButton(ui->tool_default_filemanager, app); } void page_defaultapps::changeDefaultTerminal(){ //Prompt for the new app - QString app = getSysApp(true); - if(app.isEmpty()){ return; }//nothing selected - if(app=="reset"){ app = "xterm"; } + QString app = getSysApp(true, defaultTerminal); + if(app.isEmpty()){ return; }//nothing selected + if(app=="reset"){ app = "xterm"; } //save the new app setting and adjust the button appearance + defaultTerminal = app; LXDG::setDefaultAppForMime("application/terminal", app.section("/",-1) ); updateDefaultButton(ui->tool_default_terminal, app); } @@ -292,14 +229,19 @@ void page_defaultapps::cleardefaultitem(){ void page_defaultapps::setdefaultitem(){ QTreeWidgetItem *it = ui->tree_defaults->currentItem(); + QString path; if(it==0){ return; } //no item selected QList<QTreeWidgetItem*> list; for(int i=0; i<it->childCount(); i++){ list << it->child(i); } - if(list.isEmpty()){ list << it; } //just do the current item + if(list.isEmpty()){ + //just do the current item + list << it; + path = it->data(1, Qt::UserRole).toString(); + } //Prompt for which application to use - QString app = getSysApp(false); //no "reset" option + QString app = getSysApp(false, path); //no "reset" option if(app.isEmpty()){ return; }//nothing selected //Now set the items for(int i=0; i<list.length(); i++){ @@ -310,6 +252,7 @@ void page_defaultapps::setdefaultitem(){ list[i]->setWhatsThis(1,app); //app path list[i]->setIcon(1,LXDG::findIcon(desk.icon,"")); //reset the icon list[i]->setText(1,desk.name); //reset the name + list[i]->setData(1, Qt::UserRole, app); } } diff --git a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h index f80ea1ab..d8e2bcde 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h +++ b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h @@ -26,8 +26,12 @@ public slots: private: Ui::page_defaultapps *ui; + QString defaultBrowser; + QString defaultEmail; + QString defaultFileManager; + QString defaultTerminal; - QString getSysApp(bool allowreset); + QString getSysApp(bool allowreset, QString defaultPath = ""); void updateDefaultButton(QToolButton *button, QString app); |