[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-panel-devel
Subject: Re: [PATCH] BUG 203716 give user a hint when adding same application
From: "潘 <wppan () redflag-linux ! com>
Date: 2009-08-20 2:44:29
Message-ID: 4A8CB88D.7060009 () redflag-linux ! com
[Download RAW message or body]
Lukas Appelhans 写道:
> Am Mittwoch 19 August 2009 15:51:18 schrieb 潘卫平(Peter Pan):
>> Lukas Appelhans 写道:
>>> Am Mittwoch 19 August 2009 14:25:09 schrieb 潘卫平(Peter Pan):
>>>> Lukas Appelhans 写道:
>>>>> Am Mittwoch 19 August 2009 05:50:08 schrieb 潘卫平(Peter Pan):
>>>>>> 潘卫平(Peter Pan) 写道:
>>>>>>> Aaron J. Seigo 写道:
>>>>>>>> On Friday 14 August 2009, 潘卫平(Peter Pan) wrote:
>>>>>>>>> svn r 1011382
>>>>>>>> there are a couple issues with this patch, unfortunately. first, it
>>>>>>>> introduces a modal dialog. that will block the rest of plasma. not
>>>>>>>> good.
>>>>>>>>
>>>>>>>> :/
>>>>>>> That's really not good.
>>>>>>>
>>>>>>>> second, the button names are just "Ok" and "Cancel", they should be
>>>>>>>> changed to having meaningful labels that say _what_ will happen if
>>>>>>>> "Ok" or "Cancel" is pressed. but that's a moot point, because we
>>>>>>>> really can't have a modal dialog here.
>>>>>>>>
>>>>>>>> is there any use case where it makes sense to have more than one
>>>>>>>> icon for the _same_ application or file? i can't think of one. so
>>>>>>>> i'd suggest just silently dropping duplicates.
>>>>>>> I prefer to show user a warning message rather than drop it silently.
>>>>>>>
>>>>>>>> --------------------------------------------------------------------
>>>>>>>> -- --
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Plasma-devel mailing list
>>>>>>>> Plasma-devel@kde.org
>>>>>>>> https://mail.kde.org/mailman/listinfo/plasma-devel
>>>>>> Every time you want to add an application, call checkDuplicateUrls()
>>>>>> first.In this function, I give user a hint when we find duplicate
>>>>>> URLs, then ignore them.
>>>>>>
>>>>>> And setModal(false) for KMessageBox.
>>>>>>
>>>>>> Regards
>>>>> Mmh, I don't like that we iterate through the list 2 times, we should
>>>>> just remove the iteration for checkin duplicates in the addProgram()
>>>>> method imo...
>>>> I prefer to make the applications in quicklaunch unique, not allow
>>>> duplicating. Because I don't like that quicklaunch is too wide.
>>> Yeah, sure, but why do we iterate through the list 2 times? One time to
>>> show the dialog and one time to remove duplicates? that doesn't make much
>>> sense to me... :/
>> oh, because KDialog->show() will return immediately, so first time, I
>> prepare a message for KMessageBox.
>> If we checkin duplicates in addProgram()'s iteration, only the last
>> duplicate application will be shown.
>>
>> And second time iteration, remove duplicates.
> Well why not let checkDuplicates() return a cleared KUrl::List where all
> duplicates are removed?
>
I got it.
> Lukas
>>>>> Also the KDialog way seems a bit too much to me, isn't there a way to
>>>>> just get a KMessageBox like the command we got before?
>>>> KMessageBox needs a KDialog parameter.
>>>> I can't find another way if we use KMessageBox.
>>> Okee then leave it that way :)
>>>
>>> Lukas
>>>
>>>>> Lukas
>>>>> _______________________________________________
>>>>> Plasma-devel mailing list
>>>>> Plasma-devel@kde.org
>>>>> https://mail.kde.org/mailman/listinfo/plasma-devel
>>>> Regards
>>> _______________________________________________
>>> Plasma-devel mailing list
>>> Plasma-devel@kde.org
>>> https://mail.kde.org/mailman/listinfo/plasma-devel
> _______________________________________________
> Plasma-devel mailing list
> Plasma-devel@kde.org
> https://mail.kde.org/mailman/listinfo/plasma-devel
Regards
--
潘卫平(Peter Pan)
Red Flag Software Co., Ltd
["kdebase-quicklaunch-same.patch" (text/x-patch)]
Index: quicklaunchApplet.h
===================================================================
--- quicklaunchApplet.h (版本 1013469)
+++ quicklaunchApplet.h (工作副本)
@@ -149,6 +149,13 @@
void addProgram(int index, const QString &desktopFile, bool isNewIcon = false);
/**
+ * Remove duplicate KUrls
+ * @param urls The urls to be inserted into quicklaunch
+ * @return the KUrl::List which arleady removed duplications
+ */
+ KUrl::List removeDuplicateUrls(const KUrl::List &urls);
+
+ /**
* Removes all items from a BoxLayout
* @param layout Layout to clear
*/
Index: quicklaunchApplet.cpp
===================================================================
--- quicklaunchApplet.cpp (版本 1013469)
+++ quicklaunchApplet.cpp (工作副本)
@@ -610,29 +610,7 @@
KIcon icon;
QString text;
QString genericName;
- bool do_add_program = true;
- if (!m_isBusy) {
- foreach (QuicklaunchIcon *icon, m_icons) {
- if (icon->url().url() == appUrl.url()) {
- if (KMessageBox::warningContinueCancel(
- 0,
- i18n("\"%1\" is already in quicklaunch!", icon->url().pathOrUrl()),
- i18n("Warning")
- ) == KMessageBox::Cancel) {
- do_add_program = false;
- break;
- } else {
- break;
- }
- }
- }
- }
-
- if (!do_add_program) {
- return;
- }
-
if (appUrl.isLocalFile() && KDesktopFile::isDesktopFile(appUrl.toLocalFile())) {
KDesktopFile *f = new KDesktopFile(appUrl.toLocalFile());
@@ -694,18 +672,20 @@
if (urls.isEmpty()) {
return false;
}
-
- //if there are more than one the last is junk
- if (urls.count() > 1) {
- urls.removeLast();
+
+ KUrl::List uniqueUrls = removeDuplicateUrls(urls);
+
+ if (uniqueUrls.count()) {
+ foreach (const KUrl &url, uniqueUrls) {
+ if (KDesktopFile::isDesktopFile(url.toLocalFile())) {
+ addProgram(pos, url.toLocalFile(), true);
+ }
+ }
+
+ return true;
}
- foreach (const KUrl &url, urls) {
- if (KDesktopFile::isDesktopFile(url.toLocalFile())) {
- addProgram(pos, url.toLocalFile(), true);
- }
- }
- return true;
+ return false;
}
@@ -728,11 +708,61 @@
void QuicklaunchApplet::addAccepted()
{
- int insertplace = m_rightClickedIcon ? m_icons.indexOf(m_rightClickedIcon) : m_icons.size();
- addProgram(insertplace, addUi.urlIcon->url().url(), true);
- performUiRefactor();
+ KUrl::List uniqueUrls = removeDuplicateUrls(KUrl::List(addUi.urlIcon->url()));
+ if (uniqueUrls.count() == 1) {
+ int insertplace = m_rightClickedIcon ? m_icons.indexOf(m_rightClickedIcon) : m_icons.size();
+ addProgram(insertplace, uniqueUrls.first().toLocalFile(), true);
+ performUiRefactor();
+ }
}
+KUrl::List QuicklaunchApplet::removeDuplicateUrls(const KUrl::List &urls)
+{
+ QStringList duplicateWarningMessage;
+ duplicateWarningMessage.clear();
+
+ KUrl::List uniqueUrls = urls;
+ foreach (const KUrl &url, urls) {
+ foreach (QuicklaunchIcon *icon, m_icons) {
+ if (icon->url().url() == url.url()) {
+ duplicateWarningMessage << url.pathOrUrl();
+ uniqueUrls.removeOne(url);
+ break;
+ }
+ }
+ }
+
+ if (!duplicateWarningMessage.isEmpty()) {
+ KDialog *warningDialog = new KDialog;
+ warningDialog->setButtons(KDialog::Ok);
+ warningDialog->setModal(false);
+ warningDialog->setDefaultButton(KDialog::Ok);
+
+ QString warningMessage;
+ int count = duplicateWarningMessage.count();
+
+ foreach (QString str, duplicateWarningMessage) {
+ warningMessage += str + "\n";
+ }
+
+ KMessageBox::createKMessageBox(warningDialog,
+ QMessageBox::Warning,
+ i18np("%2is already in quicklaunch, ignore it!",
+ "%2are already in quicklaunch, ignore them!",
+ count,
+ warningMessage),
+ QStringList(),
+ QString(""),
+ NULL,
+ KMessageBox::NoExec);
+
+ warningDialog->resize(400, 300);
+ warningDialog->show();
+ }
+
+ return uniqueUrls;
+}
+
K_EXPORT_PLASMA_APPLET(quicklaunch, QuicklaunchApplet)
#include "quicklaunchApplet.moc"
_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic