* add chat_icon_enable pref

* fix globaluserStatus with all IM accounts disconnected
* cleaning
This commit is contained in:
foudfou 2012-08-25 21:45:00 +02:00
parent 06349f15f4
commit 693611c994
6 changed files with 90 additions and 46 deletions

View File

@ -5,6 +5,7 @@ const Ci = Components.interfaces;
const Cu = Components.utils;
Cu.import("resource://firetray/FiretrayHandler.jsm");
Cu.import("resource://firetray/FiretrayChat.jsm");
Cu.import("resource://firetray/commons.js");
const TREEROW_ACCOUNT_OR_SERVER_TYPE_NAME = 0;
@ -592,6 +593,14 @@ var firetrayUIOptions = {
if (!/\d/.test(charStr))
event.preventDefault();
}
},
toggleChat: function(enabled) {
F.LOG("Chat icon enable="+enabled);
if (enabled)
firetray.Chat.init();
else
firetray.Chat.shutdown();
}
};

View File

@ -30,6 +30,7 @@
<preference id="pref_app_icon_filename" name="extensions.firetray.app_icon_filename" type="string"/>
<preference id="pref_scroll_hides" name="extensions.firetray.scroll_hides" type="bool" />
<preference id="pref_scroll_mode" name="extensions.firetray.scroll_mode" type="string" />
<preference id="pref_chat_icon_enable" name="extensions.firetray.chat_icon_enable" type="bool" />
<preference id="pref_mail_notification_enabled" name="extensions.firetray.mail_notification_enabled" type="bool" />
<preference id="pref_folder_count_recursive" name="extensions.firetray.folder_count_recursive" type="bool" />
<preference id="pref_message_count_type" name="extensions.firetray.message_count_type" type="int" />
@ -44,6 +45,7 @@
<tab label="&windows_options;"/>
<tab label="&icon_options;"/>
<tab label="&mail_options;" id="mail_tab" />
<tab label="&chat_options;" />
</tabs>
<tabpanels flex="1">
@ -51,27 +53,27 @@
<vbox pack="start" align="left" flex="1">
<checkbox id="ui_hides_on_close" preference="pref_hides_on_close"
label="&bool_hides_on_close.label;"
accesskey="&bool_hides_on_close.accesskey;"
label="&hides_on_close.label;"
accesskey="&hides_on_close.accesskey;"
oncommand="firetrayUIOptions.updateWindowAndIconOptions();"/>
<checkbox id="ui_hides_on_minimize" preference="pref_hides_on_minimize"
label="&bool_hides_on_minimize.label;"
accesskey="&bool_hides_on_minimize.accesskey;"
label="&hides_on_minimize.label;"
accesskey="&hides_on_minimize.accesskey;"
oncommand="firetrayUIOptions.updateWindowAndIconOptions();"/>
<checkbox id="ui_hides_single_window" preference="pref_hides_single_window"
label="&bool_hides_single_window.label;"
accesskey="&bool_hides_single_window.accesskey;"
tooltiptext="&bool_hides_single_window.tooltip;"/>
label="&hides_single_window.label;"
accesskey="&hides_single_window.accesskey;"
tooltiptext="&hides_single_window.tooltip;"/>
<checkbox id="ui_start_hidden" preference="pref_start_hidden"
label="&bool_start_hidden.label;"
accesskey="&bool_start_hidden.accesskey;"/>
label="&start_hidden.label;"
accesskey="&start_hidden.accesskey;"/>
<checkbox id="ui_show_activates" preference="pref_show_activates"
label="&bool_show_activates.label;"
accesskey="&bool_show_activates.accesskey;"
tooltiptext="&bool_show_activates.tooltip;"/>
label="&show_activates.label;"
accesskey="&show_activates.accesskey;"
tooltiptext="&show_activates.tooltip;"/>
<checkbox id="ui_remember_desktop" preference="pref_remember_desktop"
label="&bool_remember_desktop.label;"
accesskey="&bool_remember_desktop.accesskey;"/>
label="&remember_desktop.label;"
accesskey="&remember_desktop.accesskey;"/>
</vbox>
</tabpanel>
@ -113,8 +115,8 @@
</radiogroup>
<checkbox id="ui_show_icon_on_hide" preference="pref_show_icon_on_hide"
label="&bool_show_icon_on_hide.label;"
accesskey="&bool_show_icon_on_hide.accesskey;"/>
label="&show_icon_on_hide.label;"
accesskey="&show_icon_on_hide.accesskey;"/>
<checkbox id="ui_scroll_hides" preference="pref_scroll_hides"
label="&enable_mouse_scroll.label;"
@ -278,6 +280,17 @@
</vbox>
</tabpanel>
<tabpanel id="chat_tabpanel" flex="1">
<vbox align="left" flex="1">
<checkbox id="ui_chat_icon_enable" preference="pref_chat_icon_enable"
label="&chat_icon_enable.label;"
accesskey="&chat_icon_enable.accesskey;"
oncommand="firetrayUIOptions.toggleChat(this.checked);"/>
</vbox>
</tabpanel>
</tabpanels>
</tabbox>

View File

@ -7,24 +7,25 @@
<!ENTITY windows_options "Windows">
<!ENTITY icon_options "Icon">
<!ENTITY mail_options "Mail">
<!ENTITY chat_options "Chat">
<!ENTITY bool_hides_on_close.label "Closing window hides to tray">
<!ENTITY bool_hides_on_close.accesskey "C">
<!ENTITY bool_hides_on_minimize.label "Minimizing window hides to tray">
<!ENTITY bool_hides_on_minimize.accesskey "M">
<!ENTITY bool_hides_single_window.label "Hide windows individually">
<!ENTITY bool_hides_single_window.tooltip "not all windows at once">
<!ENTITY bool_hides_single_window.accesskey "H">
<!ENTITY bool_start_hidden.label "Start application hidden to tray">
<!ENTITY bool_start_hidden.accesskey "S">
<!ENTITY bool_show_activates.label "Activate restored windows">
<!ENTITY bool_show_activates.accesskey "e">
<!ENTITY bool_show_activates.tooltip "restored windows raise on top and get focus">
<!ENTITY bool_remember_desktop.label "Remember desktop (per-window)">
<!ENTITY bool_remember_desktop.accesskey "R">
<!ENTITY hides_on_close.label "Closing window hides to tray">
<!ENTITY hides_on_close.accesskey "C">
<!ENTITY hides_on_minimize.label "Minimizing window hides to tray">
<!ENTITY hides_on_minimize.accesskey "M">
<!ENTITY hides_single_window.label "Hide windows individually">
<!ENTITY hides_single_window.tooltip "not all windows at once">
<!ENTITY hides_single_window.accesskey "H">
<!ENTITY start_hidden.label "Start application hidden to tray">
<!ENTITY start_hidden.accesskey "S">
<!ENTITY show_activates.label "Activate restored windows">
<!ENTITY show_activates.accesskey "e">
<!ENTITY show_activates.tooltip "restored windows raise on top and get focus">
<!ENTITY remember_desktop.label "Remember desktop (per-window)">
<!ENTITY remember_desktop.accesskey "R">
<!ENTITY bool_show_icon_on_hide.label "Show tray icon only if a window is hidden">
<!ENTITY bool_show_icon_on_hide.accesskey "w">
<!ENTITY show_icon_on_hide.label "Show tray icon only if a window is hidden">
<!ENTITY show_icon_on_hide.accesskey "w">
<!ENTITY app_icon_type "Application icon type">
<!ENTITY app_icon_themed.label "Default themed">
<!ENTITY app_icon_themed.accesskey "D">
@ -77,3 +78,6 @@
<!ENTITY account_or_server_type_excluded.tooltip "Includes accounts or types into unread messages count">
<!ENTITY account_or_server_type_order "Order">
<!ENTITY account_or_server_type_order.tooltip "Order in which mail server types are displayed. Double-clic to edit.">
<!ENTITY chat_icon_enable.label "Enable chat icon">
<!ENTITY chat_icon_enable.accesskey "E">

View File

@ -20,6 +20,7 @@ pref("extensions.firetray.new_mail_icon_names", '["indicator-messages-new", "mai
pref("extensions.firetray.show_icon_on_hide", false);
pref("extensions.firetray.scroll_hides", true);
pref("extensions.firetray.scroll_mode", "down_hides");
pref("extensions.firetray.chat_icon_enable", true);
pref("extensions.firetray.message_count_type", 0);
pref("extensions.firetray.mail_notification_enabled", true);

View File

@ -10,7 +10,6 @@ Cu.import("resource:///modules/imServices.jsm");
Cu.import("resource://firetray/commons.js");
Cu.import("resource://firetray/linux/FiretrayChatStatusIcon.jsm");
// FIXME: rename to firetray.Chat
firetray.Chat = {
initialized: false,
observedTopics: {},
@ -118,27 +117,32 @@ firetray.Chat = {
},
updateIcon: function() {
let userStatus = Services.core.globalUserStatus.statusType;
let globalConnectedStatus = this.globalConnectedStatus();
let userStatus;
if (globalConnectedStatus)
userStatus = Services.core.globalUserStatus.statusType;
else
userStatus = Ci.imIStatusInfo.STATUS_OFFLINE;
F.LOG("IM status="+userStatus);
let iconName;
switch (userStatus) {
case Ci.imIStatusInfo.STATUS_OFFLINE:
case Ci.imIStatusInfo.STATUS_OFFLINE: // 1
iconName = FIRETRAY_IM_STATUS_OFFLINE;
break;
case Ci.imIStatusInfo.STATUS_IDLE:
case Ci.imIStatusInfo.STATUS_AWAY:
case Ci.imIStatusInfo.STATUS_IDLE: // 4
case Ci.imIStatusInfo.STATUS_AWAY: // 5
iconName = FIRETRAY_IM_STATUS_AWAY;
break;
case Ci.imIStatusInfo.STATUS_AVAILABLE:
case Ci.imIStatusInfo.STATUS_AVAILABLE: // 7
iconName = FIRETRAY_IM_STATUS_AVAILABLE;
break;
case Ci.imIStatusInfo.STATUS_UNAVAILABLE:
case Ci.imIStatusInfo.STATUS_UNAVAILABLE: // 6
iconName = FIRETRAY_IM_STATUS_BUSY;
break;
case Ci.imIStatusInfo.STATUS_UNKNOWN:
case Ci.imIStatusInfo.STATUS_INVISIBLE:
case Ci.imIStatusInfo.STATUS_MOBILE:
case Ci.imIStatusInfo.STATUS_UNKNOWN: // 0
case Ci.imIStatusInfo.STATUS_INVISIBLE: // 2
case Ci.imIStatusInfo.STATUS_MOBILE: // 3
default:
// ignore
}
@ -146,6 +150,18 @@ firetray.Chat = {
F.LOG("IM status changed="+iconName);
if (iconName)
firetray.ChatStatusIcon.setIconImage(iconName);
},
globalConnectedStatus: function() {
let accounts = Services.accounts.getAccounts();
let globalConnected = false;
while (accounts.hasMoreElements()) {
let account = accounts.getNext().QueryInterface(Ci.imIAccount);
F.LOG("account="+account+" STATUS="+account.statusInfo.statusType+" connected="+account.connected);
globalConnected = globalConnected || account.connected;
}
F.LOG("globalConnected="+globalConnected);
return globalConnected;
}
};

View File

@ -43,8 +43,9 @@ firetray.Messaging = {
MailServices.mailSession.AddFolderListener(that.mailSessionListener,
that.mailSessionListener.notificationFlags);
// FIXME: add im-icon pref
if (Services.prefs.getBoolPref("mail.chat.enabled") && this.existsIMAccount())
if (Services.prefs.getBoolPref("mail.chat.enabled") &&
firetray.Utils.prefService.getBoolPref("chat_icon_enable") &&
this.existsChatAccount())
firetray.Chat.init();
this.initialized = true;
@ -68,7 +69,7 @@ firetray.Messaging = {
// this._items is undefined' when calling method:
// [nsISimpleEnumerator::hasMoreElements]"), and we're unsure if we should
// initAccounts() ourselves...
existsIMAccount: function() {
existsChatAccount: function() {
let accounts = new this.Accounts();
for (let accountServer in accounts)
if (accountServer.type === 'im') {
@ -84,7 +85,7 @@ firetray.Messaging = {
switch (topic) {
case "account-removed":
this.cleanExcludedAccounts();
if (subject.QueryInterface(Ci.imIAccount) && !this.existsIMAccount())
if (subject.QueryInterface(Ci.imIAccount) && !this.existsChatAccount())
firetray.Chat.shutdown();
break;
case "account-added":