adium/adium
Clone
Summary
Browse
Changes
Graph
Updated Sparkle to 1.17.0, to fix a problem when copying broken symlinks.
adium-1.5.10.4
2017-04-23, Thijs Alkemade
5883c460b8cb
Updated Sparkle to 1.17.0, to fix a problem when copying broken symlinks.
/*
* Adium is the legal property of its developers, whose names are listed in the copyright file included
* with this source distribution.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the GNU
* General Public License as published by the Free Software Foundation; either version 2 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program; if not,
* write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#import "AIChatCyclingPlugin.h"
#import <Adium/AIInterfaceControllerProtocol.h>
#import <Adium/AIMenuControllerProtocol.h>
#import "ESGeneralPreferencesPlugin.h"
#import <AIUtilities/AIMenuAdditions.h>
#import <AIUtilities/AIDictionaryAdditions.h>
#define PREVIOUS_MESSAGE_MENU_TITLE AILocalizedString(@"Previous Chat",nil)
#define NEXT_MESSAGE_MENU_TITLE AILocalizedString(@"Next Chat",nil)
#define DEFAULT_CHAT_CYCLING_PREFS @"ChatCyclingDefaults"
#define OLD_DEFAULT_CHAT_CYCLING_PREFS @"ChatCyclingDefaults-Old"
/*!
* @class AIChatCyclingPlugin
* @brief Component to manage the chat cycling menu items
*
* Adium supports several different key combinations for switching tabs, configuring via the General Preferences.
*/
@implementation
AIChatCyclingPlugin
/*!
* @brief Install
*/
-
(
void
)
installPlugin
{
id
<
AIMenuController
>
menuController
=
adium
.
menuController
;
//Cycling menu items
previousChatMenuItem
=
[[
NSMenuItem
alloc
]
initWithTitle
:
PREVIOUS_MESSAGE_MENU_TITLE
target
:
self
action
:
@selector
(
previousChat
:
)
keyEquivalent
:
@""
];
[
menuController
addMenuItem
:
previousChatMenuItem
toLocation
:
LOC_Window_Commands
];
nextChatMenuItem
=
[[
NSMenuItem
alloc
]
initWithTitle
:
NEXT_MESSAGE_MENU_TITLE
target
:
self
action
:
@selector
(
nextChat
:
)
keyEquivalent
:
@""
];
[
menuController
addMenuItem
:
nextChatMenuItem
toLocation
:
LOC_Window_Commands
];
/* Adium 1.5.8+ use the new defaults for chat switching, ctrl+tab, to match Safari's default user-visible behavior */
NSDictionary
*
defaults
=
[
NSDictionary
dictionaryNamed
:
(([
adium
compareVersion
:
adium
.
earliestLaunchedAdiumVersion
toVersion
:
@"1.5.8"
]
==
NSOrderedAscending
)
?
OLD_DEFAULT_CHAT_CYCLING_PREFS
:
DEFAULT_CHAT_CYCLING_PREFS
)
forClass
:[
self
class
]];
[
adium
.
preferenceController
registerDefaults
:
defaults
forGroup
:
PREF_GROUP_CHAT_CYCLING
];
//Prefs
[
adium
.
preferenceController
registerPreferenceObserver
:
self
forGroup
:
PREF_GROUP_CHAT_CYCLING
];
}
-
(
void
)
uninstallPlugin
{
[
adium
.
preferenceController
unregisterPreferenceObserver
:
self
];
}
/*!
* @brief Preferences changed
*
* Update the key equivalents for our previous and next chat menu items
*/
-
(
void
)
preferencesChangedForGroup:
(
NSString
*
)
group
key:
(
NSString
*
)
key
object
:(
AIListObject
*
)
object
preferenceDict:
(
NSDictionary
*
)
prefDict
firstTime:
(
BOOL
)
firstTime
{
//Configure our tab switching hotkeys
unichar
left
=
NSLeftArrowFunctionKey
;
unichar
right
=
NSRightArrowFunctionKey
;
NSString
*
leftKey
,
*
rightKey
;
NSUInteger
leftKeyMask
=
NSCommandKeyMask
,
rightKeyMask
=
NSCommandKeyMask
;
switch
([[
prefDict
objectForKey
:
KEY_TAB_SWITCH_KEYS
]
integerValue
])
{
case
AISwitchArrows
:
default
:
leftKey
=
[
NSString
stringWithCharacters
:&
left
length
:
1
];
rightKey
=
[
NSString
stringWithCharacters
:&
right
length
:
1
];
break
;
case
AISwitchShiftArrows
:
leftKey
=
[
NSString
stringWithCharacters
:&
left
length
:
1
];
rightKey
=
[
NSString
stringWithCharacters
:&
right
length
:
1
];
leftKeyMask
=
rightKeyMask
=
(
NSCommandKeyMask
|
NSShiftKeyMask
);
break
;
case
AIBrackets
:
leftKey
=
@"["
;
rightKey
=
@"]"
;
break
;
case
AIBraces
:
leftKey
=
@"{"
;
rightKey
=
@"}"
;
break
;
case
AIOptArrows
:
leftKey
=
[
NSString
stringWithCharacters
:&
left
length
:
1
];
rightKey
=
[
NSString
stringWithCharacters
:&
right
length
:
1
];
leftKeyMask
=
rightKeyMask
=
(
NSCommandKeyMask
|
NSAlternateKeyMask
);
break
;
case
AICtrlTab
:
leftKey
=
rightKey
=
@"
\t
"
;
leftKeyMask
=
(
NSControlKeyMask
|
NSShiftKeyMask
);
rightKeyMask
=
NSControlKeyMask
;
break
;
}
//Previous and nextMessage menuItems are in the same menu, so the setMenuChangedMessagesEnabled applies to both.
[[
previousChatMenuItem
menu
]
setMenuChangedMessagesEnabled
:
NO
];
[
previousChatMenuItem
setKeyEquivalent
:
@""
];
[
previousChatMenuItem
setKeyEquivalent
:
leftKey
];
[
previousChatMenuItem
setKeyEquivalentModifierMask
:
leftKeyMask
];
[
nextChatMenuItem
setKeyEquivalent
:
@""
];
[
nextChatMenuItem
setKeyEquivalent
:
rightKey
];
[
nextChatMenuItem
setKeyEquivalentModifierMask
:
rightKeyMask
];
[[
previousChatMenuItem
menu
]
setMenuChangedMessagesEnabled
:
YES
];
}
/*!
* @brief Menu item validation
*/
-
(
BOOL
)
validateMenuItem:
(
NSMenuItem
*
)
menuItem
{
if
(
!
adium
.
interfaceController
.
activeChat
)
return
NO
;
NSString
*
containerID
=
[
adium
.
interfaceController
containerIDForChat
:
adium
.
interfaceController
.
activeChat
];
return
([
adium
.
interfaceController
openChatsInContainerWithID
:
containerID
].
count
>
0
);
}
/*!
* @brief Select the next chat
*/
-
(
IBAction
)
nextChat:
(
id
)
sender
{
[
adium
.
interfaceController
nextChat
:
nil
];
}
/*!
* @brief Select the previous chat
*/
-
(
IBAction
)
previousChat:
(
id
)
sender
{
[
adium
.
interfaceController
previousChat
:
nil
];
}
@end