From 2241699ff3d2ad8e9d909d7be10dd19a3a3c757c Mon Sep 17 00:00:00 2001 From: Derek DeMoro Date: Fri, 25 Aug 2006 17:53:13 +0000 Subject: [PATCH] Fix subscription notice issue. git-svn-id: http://svn.igniterealtime.org/svn/repos/spark/trunk@5057 b35dd754-fafc-0310-a699-88a17e54d16e --- .../spark/component/RolloverButton.java | 5 ++ .../jivesoftware/spark/ui/ContactList.java | 81 ++++++++++--------- 2 files changed, 47 insertions(+), 39 deletions(-) diff --git a/src/java/org/jivesoftware/spark/component/RolloverButton.java b/src/java/org/jivesoftware/spark/component/RolloverButton.java index fba993a00..137ee54c1 100644 --- a/src/java/org/jivesoftware/spark/component/RolloverButton.java +++ b/src/java/org/jivesoftware/spark/component/RolloverButton.java @@ -29,6 +29,11 @@ public class RolloverButton extends JButton { decorate(); } + public RolloverButton(String text) { + super(text); + decorate(); + } + /** * Create a new RolloverButton. * diff --git a/src/java/org/jivesoftware/spark/ui/ContactList.java b/src/java/org/jivesoftware/spark/ui/ContactList.java index fb0d564cd..49c38f9fa 100644 --- a/src/java/org/jivesoftware/spark/ui/ContactList.java +++ b/src/java/org/jivesoftware/spark/ui/ContactList.java @@ -55,12 +55,10 @@ import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.Icon; -import javax.swing.JButton; import javax.swing.JCheckBoxMenuItem; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JEditorPane; -import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuItem; @@ -530,6 +528,28 @@ public final class ContactList extends JPanel implements ActionListener, Contact * @param addresses */ public void entriesUpdated(final Collection addresses) { + handleEntriesUpdated(addresses); + } + + /** + * Called when users are removed from the roster. + * + * @param addresses the addresses removed from the roster. + */ + public void entriesDeleted(final Collection addresses) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + Iterator jids = addresses.iterator(); + while (jids.hasNext()) { + String jid = (String)jids.next(); + removeContactItem(jid); + } + } + }); + + } + + private synchronized void handleEntriesUpdated(final Collection addresses) { SwingUtilities.invokeLater(new Runnable() { public void run() { Roster roster = SparkManager.getConnection().getRoster(); @@ -565,8 +585,10 @@ public final class ContactList extends JPanel implements ActionListener, Contact } else { ContactGroup contactGroup = getContactGroup(group.getName()); - ContactItem item = contactGroup.getContactItemByJID(jid); - + ContactItem item = offlineGroup.getContactItemByJID(jid); + if (item == null) { + item = contactGroup.getContactItemByJID(jid); + } // Check to see if this entry is new to a pre-existing group. if (item == null) { String name = rosterEntry.getName(); @@ -580,6 +602,10 @@ public final class ContactList extends JPanel implements ActionListener, Contact contactGroup.addContactItem(item); contactGroup.fireContactGroupUpdated(); } + else { + offlineGroup.addContactItem(item); + offlineGroup.fireContactGroupUpdated(); + } } // If not, just update their presence. @@ -594,7 +620,7 @@ public final class ContactList extends JPanel implements ActionListener, Contact // Now check to see if groups have been modified or removed. This is used // to check if Contact Groups have been renamed or removed. - Set groupSet = new HashSet(); + final Set groupSet = new HashSet(); jids = addresses.iterator(); while (jids.hasNext()) { jid = (String)jids.next(); @@ -640,25 +666,6 @@ public final class ContactList extends JPanel implements ActionListener, Contact } } }); - - } - - /** - * Called when users are removed from the roster. - * - * @param addresses the addresses removed from the roster. - */ - public void entriesDeleted(final Collection addresses) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - Iterator jids = addresses.iterator(); - while (jids.hasNext()) { - String jid = (String)jids.next(); - removeContactItem(jid); - } - } - }); - } public void presenceChanged(final String user) { @@ -1721,26 +1728,24 @@ public final class ContactList extends JPanel implements ActionListener, Contact String message = jid + " would like to see your online presence and add you to their roster. Do you accept?"; - final JFrame dialog = new JFrame("Subscription Request"); - dialog.setIconImage(SparkManager.getMainWindow().getIconImage()); - JPanel layoutPanel = new JPanel(); + final JPanel layoutPanel = new JPanel(); + layoutPanel.setBackground(Color.white); layoutPanel.setLayout(new GridBagLayout()); WrappedLabel messageLabel = new WrappedLabel(); messageLabel.setText(message); layoutPanel.add(messageLabel, new GridBagConstraints(0, 0, 5, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); - JButton acceptButton = new JButton("Accept"); - JButton viewInfoButton = new JButton("Profile"); - JButton denyButton = new JButton("Deny"); + RolloverButton acceptButton = new RolloverButton("Accept"); + RolloverButton viewInfoButton = new RolloverButton("Profile"); + RolloverButton denyButton = new RolloverButton("Deny"); layoutPanel.add(acceptButton, new GridBagConstraints(2, 1, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); layoutPanel.add(viewInfoButton, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); layoutPanel.add(denyButton, new GridBagConstraints(4, 1, 1, 1, 0.0, 1.0, GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); acceptButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - dialog.dispose(); - + SparkManager.getWorkspace().removeAlert(layoutPanel); Presence response = new Presence(Presence.Type.subscribed); response.setTo(jid); @@ -1752,16 +1757,18 @@ public final class ContactList extends JPanel implements ActionListener, Contact rosterDialog.setDefaultJID(jid); rosterDialog.showRosterDialog(); } + } }); denyButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { + SparkManager.getWorkspace().removeAlert(layoutPanel); + // Send subscribed Presence response = new Presence(Presence.Type.unsubscribe); response.setTo(jid); SparkManager.getConnection().sendPacket(response); - dialog.dispose(); } }); @@ -1772,12 +1779,8 @@ public final class ContactList extends JPanel implements ActionListener, Contact }); // show dialog - dialog.getContentPane().add(layoutPanel); - dialog.pack(); - dialog.setSize(450, 125); - dialog.setLocationRelativeTo(SparkManager.getMainWindow()); - SparkManager.getChatManager().getChatContainer().blinkFrameIfNecessary(dialog); - + SparkManager.getWorkspace().addAlert(layoutPanel); + SparkManager.getAlertManager().flashWindowStopOnFocus(SparkManager.getMainWindow()); } private void searchContacts(String contact) {