diff --git a/xul/content/commands.js b/xul/content/commands.js --- a/xul/content/commands.js +++ b/xul/content/commands.js @@ -1679,26 +1679,27 @@ function cmdRejoin(e) } e.channel.join(e.channel.mode.key); } function cmdRename(e) { var tab = getTabForObject(e.sourceObject); - if (!tab) { + if (!tab) + { feedback(e, getMsg(MSG_ERR_INTERNAL_DISPATCH, "rename")); return; } var label = e.label || prompt(MSG_TAB_NAME_PROMPT, tab.label); - if (!label) { + if (!label) + { return; } - tab.label = label; - tab.setAttribute("tooltiptext", e.sourceObject.unicodeName); + e.sourceObject.prefs["tabLabel"] = label; } function cmdTogglePref (e) { var state = !client.prefs[e.prefName]; client.prefs[e.prefName] = state; feedback(e, getMsg (MSG_FMT_PREF, @@ -2343,17 +2344,19 @@ function cmdJoin(e) { // We can join multiple channels! Woo! var chans = e.channelName.split(","); var keys = []; if (e.key) keys = e.key.split(","); for (var c in chans) { - chan = dispatch("join", { charset: e.charset, + chan = dispatch("join", { network: e.network, + server: e.server, + charset: e.charset, channelName: chans[c], key: keys.shift() }); } return chan; } if ((arrayIndexOf(["#", "&", "+", "!"], e.channelName[0]) == -1) && (arrayIndexOf(e.server.channelTypes, e.channelName[0]) == -1)) diff --git a/xul/content/prefs.js b/xul/content/prefs.js --- a/xul/content/prefs.js +++ b/xul/content/prefs.js @@ -221,16 +221,17 @@ function initPrefs() ["sound.channel.stalk", "beep", "global.soundEvts"], ["sound.channel.start", "", "global.soundEvts"], ["sound.enabled", true, "global.sounds"], ["sound.overlapDelay", 2000, "global.sounds"], ["sound.user.stalk", "beep", "global.soundEvts"], ["sound.user.start", "beep beep", "global.soundEvts"], ["stalkWholeWords", true, "lists.stalkWords"], ["stalkWords", [], "lists.stalkWords"], + ["tabLabel", "", "hidden"], ["tabGotoKeyModifiers", 0, "hidden"], ["timestamps", false, "appearance.timestamps"], ["timestamps.display", "[%H:%M]", "appearance.timestamps"], ["timestamps.log", "[%Y-%m-%d %H:%M:%S]", "hidden"], ["urls.display", 10, "hidden"], ["urls.store.max", 100, "global"], ["userHeader", true, "global.header"], ["userlistLeft", true, "appearance.userlist"], @@ -426,16 +427,17 @@ function getNetworkPrefManager(network) ["logFileName", makeLogNameNetwork, "hidden"], ["motif.current", defer, "appearance.motif"], ["nickname", defer, ".ident"], ["nicknameList", defer, "lists.nicknameList"], ["notifyList", [], "lists.notifyList"], ["outputWindowURL", defer, "hidden"], ["proxy.typeOverride", defer, ".connect"], ["reconnect", defer, ".connect"], + ["tabLabel", "", "hidden"], ["timestamps", defer, "appearance.timestamps"], ["timestamps.display", defer, "appearance.timestamps"], ["timestamps.log", defer, "hidden"], ["usermode", defer, ".ident"], ["username", defer, ".ident"] ]; var branch = "extensions.irc.networks." + pref_mungeName(network.encodedName) + @@ -512,16 +514,17 @@ function getChannelPrefManager(channel) ["displayHeader", client.prefs["channelHeader"], "appearance.misc"], ["font.family", defer, "appearance.misc"], ["font.size", defer, "appearance.misc"], ["hasPrefs", false, "hidden"], ["log", client.prefs["channelLog"], ".log"], ["logFileName", makeLogNameChannel, "hidden"], ["motif.current", defer, "appearance.motif"], ["outputWindowURL", defer, "hidden"], + ["tabLabel", "", "hidden"], ["timestamps", defer, "appearance.timestamps"], ["timestamps.display", defer, "appearance.timestamps"], ["timestamps.log", defer, "hidden"] ]; var branch = "extensions.irc.networks." + pref_mungeName(network.encodedName) + ".channels." + pref_mungeName(channel.encodedName) + "." var prefManager = new PrefManager(branch, client.defaultBundle); @@ -567,16 +570,17 @@ function getUserPrefManager(user) ["displayHeader", client.prefs["userHeader"], "appearance.misc"], ["font.family", defer, "appearance.misc"], ["font.size", defer, "appearance.misc"], ["hasPrefs", false, "hidden"], ["log", client.prefs["userLog"], ".log"], ["logFileName", makeLogNameUser, "hidden"], ["motif.current", defer, "appearance.motif"], ["outputWindowURL", defer, "hidden"], + ["tabLabel", "", "hidden"], ["timestamps", defer, "appearance.timestamps"], ["timestamps.display", defer, "appearance.timestamps"], ["timestamps.log", defer, "hidden"] ]; var branch = "extensions.irc.networks." + pref_mungeName(network.encodedName) + ".users." + pref_mungeName(user.encodedName) + "."; var prefManager = new PrefManager(branch, client.defaultBundle); @@ -613,16 +617,17 @@ function getDCCUserPrefManager(user) ["displayHeader", client.prefs["dccUserHeader"], "appearance.misc"], ["font.family", defer, "appearance.misc"], ["font.size", defer, "appearance.misc"], ["hasPrefs", false, "hidden"], ["log", client.prefs["dccUserLog"], ".log"], ["logFileName", makeLogNameUser, "hidden"], ["motif.current", defer, "appearance.motif"], ["outputWindowURL", defer, "hidden"], + ["tabLabel", "", "hidden"], ["timestamps", defer, "appearance.timestamps"], ["timestamps.display", defer, "appearance.timestamps"], ["timestamps.log", defer, "hidden"] ]; var branch = "extensions.irc.dcc.users." + pref_mungeName(user.canonicalName) + "."; var prefManager = new PrefManager(branch, client.defaultBundle); @@ -766,16 +771,20 @@ function onPrefChanged(prefName, newValu case "outputWindowURL": client.dispatch("sync-window"); break; case "displayHeader": client.dispatch("sync-header"); break; + case "tabLabel": + onTabLabelUpdate(client, newValue); + break; + case "timestamps": case "timestamps.display": case "collapseActions": case "collapseMsgs": client.dispatch("sync-timestamp"); break; case "log": @@ -868,16 +877,20 @@ function onNetworkPrefChanged(network, p case "outputWindowURL": network.dispatch("sync-window"); break; case "displayHeader": network.dispatch("sync-header"); break; + case "tabLabel": + onTabLabelUpdate(network, newValue); + break; + case "timestamps": case "timestamps.display": case "collapseActions": case "collapseMsgs": network.dispatch("sync-timestamp"); break; case "log": @@ -937,16 +950,20 @@ function onChannelPrefChanged(channel, p case "outputWindowURL": channel.dispatch("sync-window"); break; case "displayHeader": channel.dispatch("sync-header"); break; + case "tabLabel": + onTabLabelUpdate(channel, newValue); + break; + case "timestamps": case "timestamps.display": case "collapseActions": case "collapseMsgs": channel.dispatch("sync-timestamp"); break; case "log": @@ -987,16 +1004,20 @@ function onUserPrefChanged(user, prefNam case "outputWindowURL": user.dispatch("sync-window"); break; case "displayHeader": user.dispatch("sync-header"); break; + case "tabLabel": + onTabLabelUpdate(user, newValue); + break; + case "timestamps": case "timestamps.display": case "collapseActions": case "collapseMsgs": user.dispatch("sync-timestamp"); break; case "log": @@ -1034,16 +1055,20 @@ function onDCCUserPrefChanged(user, pref case "outputWindowURL": view.dispatch("sync-window"); break; case "displayHeader": view.dispatch("sync-header"); break; + case "tabLabel": + onTabLabelUpdate(user, newValue); + break; + case "timestamps": case "timestamps.display": case "collapseActions": case "collapseMsgs": view.dispatch("sync-timestamp"); break; case "log": @@ -1100,8 +1125,19 @@ function updateAliases() { if (!client.commandManager.aliasList[name]) { client.commandManager.removeCommand({name: name}); delete client.commandManager.aliasList[name]; } } } + +function onTabLabelUpdate(sourceObject, newValue) +{ + var tab = getTabForObject(sourceObject); + if (tab) + { + tab.label = newValue || sourceObject.viewName; + tab.setAttribute("tooltiptext", sourceObject.viewName); + } +} + diff --git a/xul/content/static.js b/xul/content/static.js --- a/xul/content/static.js +++ b/xul/content/static.js @@ -3642,18 +3642,19 @@ function getTabForObject(source, create) tb.setAttribute("name", source.unicodeName); tb.setAttribute("onclick", "onTabClick(event, " + id.quote() + ");"); // This wouldn't be here if there was a supported CSS property for it. tb.setAttribute("crop", "center"); tb.setAttribute("context", "context:tab"); tb.setAttribute("class", "tab-bottom view-button"); tb.setAttribute("id", id); tb.setAttribute("state", "normal"); + name = source.prefs["tabLabel"] || name; tb.setAttribute("label", name + (matches > 1 ? "<" + matches + ">" : "")); - tb.setAttribute("tooltiptext", name); + tb.setAttribute("tooltiptext", source.viewName); tb.view = source; var browser = document.createElement("browser"); browser.setAttribute("class", "output-container"); browser.setAttribute("type", "content"); browser.setAttribute("flex", "1"); browser.setAttribute("tooltip", "html-tooltip-node"); browser.setAttribute("onclick",