Skip to content
This repository has been archived by the owner on Apr 25, 2024. It is now read-only.

Commit

Permalink
add isStatusWindowShowCapsLock
Browse files Browse the repository at this point in the history
  • Loading branch information
tekezo committed Mar 31, 2015
1 parent eadfdc6 commit 6fcddb2
Show file tree
Hide file tree
Showing 8 changed files with 122 additions and 75 deletions.
1 change: 1 addition & 0 deletions src/bridge/include/bridge.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ enum {
BRIDGE_USERCLIENT_STATUS_MESSAGE_NONE,
BRIDGE_USERCLIENT_STATUS_MESSAGE_EXTRA,
BRIDGE_USERCLIENT_STATUS_MESSAGE_MODIFIER_LOCK,
BRIDGE_USERCLIENT_STATUS_MESSAGE_MODIFIER_CAPS_LOCK,
BRIDGE_USERCLIENT_STATUS_MESSAGE_MODIFIER_STICKY,
BRIDGE_USERCLIENT_STATUS_MESSAGE_POINTING_BUTTON_LOCK,
BRIDGE_USERCLIENT_STATUS_MESSAGE__END__,
Expand Down
3 changes: 1 addition & 2 deletions src/core/kext/Classes/CommonData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ void CommonData::send_notification_statusmessage(int index) {
org_pqrs_driver_Karabiner_UserClient_kext::send_notification_to_userspace(BRIDGE_USERCLIENT_NOTIFICATION_TYPE_STATUS_MESSAGE_UPDATED, index);
}

const char*
CommonData::get_statusmessage(int index) {
const char* CommonData::get_statusmessage(int index) {
if (index <= BRIDGE_USERCLIENT_STATUS_MESSAGE_NONE) return NULL;
if (index >= BRIDGE_USERCLIENT_STATUS_MESSAGE__END__) return NULL;

Expand Down
50 changes: 36 additions & 14 deletions src/core/kext/Classes/FlagStatus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,11 @@ void FlagStatus::Item::reset(void) {
lazy_enabled_ = false;

/*
preserve lock_count, negative_lock_count_ and sticky_count_.
preserve lock_count, negative_lock_count_ and sticky_count_.
FlagStatus::reset is called when PressingPhysicalKeys is empty,
so we need remember the status of CapsLock.
*/
FlagStatus::reset is called when PressingPhysicalKeys is empty,
so we need remember the status of CapsLock.
*/
}

void FlagStatus::Item::increase(void) {
Expand Down Expand Up @@ -107,18 +107,21 @@ void FlagStatus::set(void) {
for (size_t i = 0; i < item_.size(); ++i) {
item_[i].set();
}
updateStatusMessage();
}

void FlagStatus::set(KeyCode key, Flags flags) {
for (size_t i = 0; i < item_.size(); ++i) {
item_[i].set(key, flags);
}
updateStatusMessage();
}

void FlagStatus::reset(void) {
for (size_t i = 0; i < item_.size(); ++i) {
item_[i].reset();
}
updateStatusMessage();
}

bool FlagStatus::isOn(ModifierFlag modifierFlag) const {
Expand Down Expand Up @@ -209,20 +212,29 @@ FlagStatus::getFlag(size_t index) const {
for (size_t i = 0; i < item_.size(); ++i) { \
if (modifierFlag == item_[i].flag_) { \
item_[i].METHOD(); \
if (item_[i].flag_ == ModifierFlag::CAPSLOCK) { \
updateStatusMessage(); \
} \
} \
} \
} \
void FlagStatus::METHOD(ModifierFlag modifierFlag, const Vector_ModifierFlag& modifierFlags) { \
for (size_t i = 0; i < item_.size(); ++i) { \
if (modifierFlag == item_[i].flag_ || modifierFlags.is_include(item_[i].flag_)) { \
item_[i].METHOD(); \
if (item_[i].flag_ == ModifierFlag::CAPSLOCK) { \
updateStatusMessage(); \
} \
} \
} \
} \
void FlagStatus::METHOD(const Vector_ModifierFlag& modifierFlags) { \
for (size_t i = 0; i < item_.size(); ++i) { \
if (modifierFlags.is_include(item_[i].flag_)) { \
item_[i].METHOD(); \
if (item_[i].flag_ == ModifierFlag::CAPSLOCK) { \
updateStatusMessage(); \
} \
} \
} \
}
Expand Down Expand Up @@ -344,20 +356,29 @@ void FlagStatus::updateStatusMessage(unsigned int statusMessageIndex) {
CommonData::clear_statusmessage(statusMessageIndex);

for (size_t i = 0; i < item_.size(); ++i) {
// Skip caps lock.
if (item_[i].flag_ == ModifierFlag::CAPSLOCK) continue;

const char* name = ModifierName::getName(item_[i].flag_);
if (name) {
switch (statusMessageIndex) {
case BRIDGE_USERCLIENT_STATUS_MESSAGE_MODIFIER_LOCK:
if (item_[i].negative_lock_count_ > 0) {
CommonData::append_statusmessage(statusMessageIndex, "-");
CommonData::append_statusmessage(statusMessageIndex, name);
CommonData::append_statusmessage(statusMessageIndex, " ");
} else if (item_[i].lock_count_ > 0) {
CommonData::append_statusmessage(statusMessageIndex, name);
CommonData::append_statusmessage(statusMessageIndex, " ");
// Skip caps lock.
if (item_[i].flag_ != ModifierFlag::CAPSLOCK) {
if (item_[i].negative_lock_count_ > 0) {
CommonData::append_statusmessage(statusMessageIndex, "-");
CommonData::append_statusmessage(statusMessageIndex, name);
CommonData::append_statusmessage(statusMessageIndex, " ");
} else if (item_[i].lock_count_ > 0) {
CommonData::append_statusmessage(statusMessageIndex, name);
CommonData::append_statusmessage(statusMessageIndex, " ");
}
}
break;

case BRIDGE_USERCLIENT_STATUS_MESSAGE_MODIFIER_CAPS_LOCK:
if (item_[i].flag_ == ModifierFlag::CAPSLOCK) {
if (item_[i].lock_count_ > 0) {
CommonData::append_statusmessage(statusMessageIndex, name);
CommonData::append_statusmessage(statusMessageIndex, " ");
}
}
break;

Expand All @@ -375,6 +396,7 @@ void FlagStatus::updateStatusMessage(unsigned int statusMessageIndex) {
void FlagStatus::updateStatusMessage(void) {
int indexes[] = {
BRIDGE_USERCLIENT_STATUS_MESSAGE_MODIFIER_LOCK,
BRIDGE_USERCLIENT_STATUS_MESSAGE_MODIFIER_CAPS_LOCK,
BRIDGE_USERCLIENT_STATUS_MESSAGE_MODIFIER_STICKY,
};
for (size_t i = 0; i < sizeof(indexes) / sizeof(indexes[0]); ++i) {
Expand Down
2 changes: 1 addition & 1 deletion src/core/kext/Classes/ModifierName.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ void ModifierName::clearVirtualModifiers(void) {
items_.clear();

// Register normal modifiers.
items_.push_back(Item(ModifierFlag::CAPSLOCK, "caps lock"));
items_.push_back(Item(ModifierFlag::CAPSLOCK, "caps"));
items_.push_back(Item(ModifierFlag::SHIFT_L, "shift"));
items_.push_back(Item(ModifierFlag::SHIFT_R, "shift"));
items_.push_back(Item(ModifierFlag::CONTROL_L, "control"));
Expand Down
1 change: 1 addition & 0 deletions src/core/server/Classes/PreferencesKeys.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#define kConfigListSelectedIndex @"selectedIndex"
#define kCheckForUpdates @"isCheckUpdate"
#define kIsStatusWindowEnabled @"isStatusWindowEnabled"
#define kIsStatusWindowShowCapsLock @"isStatusWindowShowCapsLock"
#define kIsStatusWindowShowStickyModifier @"isStatusWindowShowStickyModifier"
#define kIsStatusWindowShowPointingButtonLock @"isStatusWindowShowPointingButtonLock"
#define kStatusWindowType @"statusWindowType"
Expand Down
1 change: 1 addition & 0 deletions src/core/server/Classes/PreferencesManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ + (void)initialize {
kConfigListSelectedIndex : @0,
kCheckForUpdates : @1,
kIsStatusWindowEnabled : @YES,
kIsStatusWindowShowCapsLock : @NO,
kIsStatusWindowShowStickyModifier : @NO,
kIsStatusWindowShowPointingButtonLock : @YES,
kStatusWindowType : @0, // Normal
Expand Down
11 changes: 11 additions & 0 deletions src/core/server/Classes/StatusMessage/StatusMessageManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,17 @@ - (IBAction)refresh:(id)sender;
}

NSString* message = lines_[idx];

// append caps lock status to modifier lock.
if ([defaults boolForKey:kIsStatusWindowShowCapsLock]) {
if (idx == BRIDGE_USERCLIENT_STATUS_MESSAGE_MODIFIER_LOCK) {
NSString* capslock = lines_[BRIDGE_USERCLIENT_STATUS_MESSAGE_MODIFIER_CAPS_LOCK];
if ([capslock length] > 0) {
message = [NSString stringWithFormat:@"%@%@", capslock, message];
}
}
}

if ([message length] > 0) {
NSString* name = nil;
switch (idx) {
Expand Down
Loading

0 comments on commit 6fcddb2

Please sign in to comment.