[Konversation-devel] [Bug 240711] Crash when adding auto-join channels

Eike Hein hein at kde.org
Thu Jul 1 16:20:13 CEST 2010


https://bugs.kde.org/show_bug.cgi?id=240711





--- Comment #3 from Eike Hein <hein kde org>  2010-07-01 16:20:04 ---
commit 9e28e6e1f5144f087b6b1b97b3f3a689b350244f
Author: Eike Hein <hein at kde.org>
Date:   Fri Jun 4 16:46:23 2010 +0200

    Fix button state update code to operate on selection instead of current
item.

    BUG:240711

    Also select the item after adding a new one.

diff --git a/ChangeLog b/ChangeLog
index 3565ccf..73f2a91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Changes since 1.3-beta1:
+* When opening an "Edit Network" dialog and adding a new item to one of
+  the server or channel lists, provided they already contain at least one
+  item and no selection is made before clicking "Add...", the "Move Down"
+  button would be enabled afterwards despite no item being selected.
+  Clicking the button at this point would crash the application. This has
+  been fixed along with other potential problems in the code that updates
+  the state of the list control buttons.
+* After adding a new item to one of the server or channel lists in "Edit
+  Network" dialogs, that item will now be selected.
+
+
 Changes from 1.2.3 to 1.3-beta1:
 Konversation 1.3-beta1 debuts a major new feature in the area of Direct
 Client-to-Client (DCC) support: An implementation of the DCC Whiteboard
diff --git a/src/irc/servergroupdialog.cpp b/src/irc/servergroupdialog.cpp
index 751c08d..f49fb4d 100644
--- a/src/irc/servergroupdialog.cpp
+++ b/src/irc/servergroupdialog.cpp
@@ -58,7 +58,7 @@ namespace Konversation
         connect(m_mainWidget->m_addServerButton, SIGNAL(clicked()), this,
SLOT(addServer()));
         connect(m_mainWidget->m_changeServerButton, SIGNAL(clicked()), this,
SLOT(editServer()));
         connect(m_mainWidget->m_removeServerButton, SIGNAL(clicked()), this,
SLOT(deleteServer()));
-        connect(m_mainWidget->m_serverLBox, SIGNAL(currentRowChanged(int)),
this, SLOT(updateServerArrows()));
+        connect(m_mainWidget->m_serverLBox, SIGNAL(itemSelectionChanged()),
this, SLOT(updateServerArrows()));
         connect(m_mainWidget->m_upServerBtn, SIGNAL(clicked()), this,
SLOT(moveServerUp()));
         connect(m_mainWidget->m_downServerBtn, SIGNAL(clicked()), this,
SLOT(moveServerDown()));

@@ -69,7 +69,7 @@ namespace Konversation
         connect(m_mainWidget->m_addChannelButton, SIGNAL(clicked()), this,
SLOT(addChannel()));
         connect(m_mainWidget->m_changeChannelButton, SIGNAL(clicked()), this,
SLOT(editChannel()));
         connect(m_mainWidget->m_removeChannelButton, SIGNAL(clicked()), this,
SLOT(deleteChannel()));
-        connect(m_mainWidget->m_channelLBox, SIGNAL(currentRowChanged(int)),
this, SLOT(updateChannelArrows()));
+        connect(m_mainWidget->m_channelLBox, SIGNAL(itemSelectionChanged()),
this, SLOT(updateChannelArrows()));
         connect(m_mainWidget->m_upChannelBtn, SIGNAL(clicked()), this,
SLOT(moveChannelUp()));
         connect(m_mainWidget->m_downChannelBtn, SIGNAL(clicked()), this,
SLOT(moveChannelDown()));

@@ -164,8 +164,8 @@ namespace Konversation
         {
             ServerSettings server = dlg->serverSettings();
             m_mainWidget->m_serverLBox->addItem(server.host());
+           
m_mainWidget->m_serverLBox->item(m_mainWidget->m_serverLBox->count() -
1)->setSelected(true);
             m_serverList.append(server);
-            updateServerArrows();
         }
         delete dlg;
     }
@@ -219,13 +219,24 @@ namespace Konversation

     void ServerGroupDialog::updateServerArrows()
     {
-        m_mainWidget->m_upServerBtn->setEnabled(
m_mainWidget->m_serverLBox->count()>1 &&
m_mainWidget->m_serverLBox->currentRow()>0 );
+        QList<QListWidgetItem*> serverBoxSelection =
m_mainWidget->m_serverLBox->selectedItems();

-        m_mainWidget->m_downServerBtn->setEnabled(
m_mainWidget->m_serverLBox->count()>1 &&
-           
m_mainWidget->m_serverLBox->currentRow()<m_mainWidget->m_serverLBox->count()-1
);
-        bool enabled = m_mainWidget->m_serverLBox->currentRow() >= 0;
-        m_mainWidget->m_removeServerButton->setEnabled(enabled);
-        m_mainWidget->m_changeServerButton->setEnabled(enabled);
+        if (m_mainWidget->m_serverLBox->count() && serverBoxSelection.count())
+        {
+            QListWidgetItem* selectedServer = serverBoxSelection.first();
+            int selectedServerRow =
m_mainWidget->m_serverLBox->row(selectedServer);
+
+            m_mainWidget->m_upServerBtn->setEnabled(selectedServerRow > 0);
+            m_mainWidget->m_downServerBtn->setEnabled(selectedServerRow <
m_mainWidget->m_serverLBox->count() - 1);
+        }
+        else
+        {
+            m_mainWidget->m_upServerBtn->setEnabled(false);
+            m_mainWidget->m_downServerBtn->setEnabled(false);
+        }
+
+       
m_mainWidget->m_removeServerButton->setEnabled(serverBoxSelection.count());
+       
m_mainWidget->m_changeServerButton->setEnabled(serverBoxSelection.count());
     }

     void ServerGroupDialog::moveServerUp()
@@ -276,8 +287,8 @@ namespace Konversation
         {
             ChannelSettings channel = dlg->channelSettings();
             m_mainWidget->m_channelLBox->addItem(channel.name());
+           
m_mainWidget->m_channelLBox->item(m_mainWidget->m_channelLBox->count() -
1)->setSelected(true);
             m_channelList.append(channel);
-            updateChannelArrows();
         }
         delete dlg;
     }
@@ -315,13 +326,24 @@ namespace Konversation

     void ServerGroupDialog::updateChannelArrows()
     {
-        m_mainWidget->m_upChannelBtn->setEnabled(
m_mainWidget->m_channelLBox->count()>1 &&
m_mainWidget->m_channelLBox->currentRow()>0 );
+        QList<QListWidgetItem*> channelBoxSelection =
m_mainWidget->m_channelLBox->selectedItems();
+
+        if (m_mainWidget->m_channelLBox->count() &&
channelBoxSelection.count())
+        {
+            QListWidgetItem* selectedChannel = channelBoxSelection.first();
+            int selectedChannelRow =
m_mainWidget->m_channelLBox->row(selectedChannel);
+
+            m_mainWidget->m_upChannelBtn->setEnabled(selectedChannelRow > 0);
+            m_mainWidget->m_downChannelBtn->setEnabled(selectedChannelRow <
m_mainWidget->m_channelLBox->count() - 1);
+        }
+        else
+        {
+            m_mainWidget->m_upChannelBtn->setEnabled(false);
+            m_mainWidget->m_downChannelBtn->setEnabled(false);
+        }

-        m_mainWidget->m_downChannelBtn->setEnabled(
m_mainWidget->m_channelLBox->count()>1 &&
-           
m_mainWidget->m_channelLBox->currentRow()<m_mainWidget->m_channelLBox->count()-1
);
-        bool selected = m_mainWidget->m_channelLBox->currentRow() >= 0;
-        m_mainWidget->m_removeChannelButton->setEnabled(selected);
-        m_mainWidget->m_changeChannelButton->setEnabled(selected);
+       
m_mainWidget->m_removeChannelButton->setEnabled(channelBoxSelection.count());
+       
m_mainWidget->m_changeChannelButton->setEnabled(channelBoxSelection.count());   
     }

     void ServerGroupDialog::moveChannelUp()

-- 
Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the Konversation-devel mailing list