Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed crash problem when computer is locked #253

Merged
merged 2 commits into from
Jun 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.6.0)
project(win-vind VERSION 5.13.0)
project(win-vind VERSION 5.13.1)
set(INTERNAL_VERSION ${PROJECT_VERSION}.0)

if(NOT CMAKE_BUILD_TYPE)
Expand Down
39 changes: 20 additions & 19 deletions libs/fluent_tray/fluent_tray.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -937,26 +937,24 @@ namespace fluent_tray
}

POINT pos ;
if(!GetCursorPos(&pos)) {
return false ;
}

if(pos.x != previous_mouse_pos_.x || pos.y != previous_mouse_pos_.y) {
// The mouse cursor is moved, so switch to the mouse-mode.
for(int i = 0 ; i < static_cast<int>(menus_.size()) ; i ++) {
auto& menu = menus_[i] ;
auto detected_hwnd = WindowFromPoint(pos) ;
if(!detected_hwnd) {
return false ;
}
// Checks whether the mouse cursor is over the menu or not.
if(detected_hwnd == menu.window_handle()) {
// Start selection by key from the currently selected menu.
select_index_ = i ;
break ;
if(GetCursorPos(&pos)) {
if(pos.x != previous_mouse_pos_.x || pos.y != previous_mouse_pos_.y) {
// The mouse cursor is moved, so switch to the mouse-mode.
for(int i = 0 ; i < static_cast<int>(menus_.size()) ; i ++) {
auto& menu = menus_[i] ;
auto detected_hwnd = WindowFromPoint(pos) ;
if(!detected_hwnd) {
return false ;
}
// Checks whether the mouse cursor is over the menu or not.
if(detected_hwnd == menu.window_handle()) {
// Start selection by key from the currently selected menu.
select_index_ = i ;
break ;
}
}
previous_mouse_pos_ = pos ;
}
previous_mouse_pos_ = pos ;
}

if(select_index_ < 0) {
Expand Down Expand Up @@ -1422,7 +1420,10 @@ namespace fluent_tray
if(!Shell_NotifyIconW(NIM_ADD, &icon_data_)) {
return false ;
}
hide_menu_window() ;

if(!hide_menu_window()) {
return false ;
}

return true ;
}
Expand Down
12 changes: 9 additions & 3 deletions src/bind/emu/motion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ namespace vind

auto solver = ihub.get_solver(Mode::EDI_NORMAL) ;
while(true) {
pimpl->bg_.update() ;
if(!pimpl->bg_.update()) {
continue ;
}

core::CmdUnit::SPtr input ;
std::uint16_t in_count ;
Expand Down Expand Up @@ -118,7 +120,9 @@ namespace vind

auto solver = ihub.get_solver(Mode::EDI_NORMAL) ;
while(true) {
pimpl->bg_.update() ;
if(!pimpl->bg_.update()) {
continue ;
}

core::CmdUnit::SPtr input ;
std::uint16_t in_count ;
Expand Down Expand Up @@ -178,7 +182,9 @@ namespace vind

auto solver = ihub.get_solver(Mode::EDI_NORMAL) ;
while(true) {
pimpl->bg_.update() ;
if(!pimpl->bg_.update()) {
continue ;
}

core::CmdUnit::SPtr input ;
std::uint16_t in_count ;
Expand Down
4 changes: 3 additions & 1 deletion src/bind/emu/replacetext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ namespace
}

while(true) {
bg_.update() ;
if(!bg_.update()) {
continue ;
}

if(igate.is_pressed(KEYCODE_ESC)) {
return ;
Expand Down
4 changes: 3 additions & 1 deletion src/bind/mode/command_mode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,9 @@ namespace vind
auto result = SystemCall::SUCCEEDED ;
ac.apply(core::get_enter_event(core::Mode::COMMAND)) ;
while(true) {
pimpl->bg_.update() ;
if(!pimpl->bg_.update()) {
continue ;
}

bool break_flag = false ;
do {
Expand Down
4 changes: 3 additions & 1 deletion src/bind/mode/instant_mode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@ namespace vind

auto res = SystemCall::SUCCEEDED ;
while(true) {
pimpl->bg_.update() ;
if(!pimpl->bg_.update()) {
continue ;
}

std::vector<core::CmdUnit::SPtr> inputs ;
std::vector<std::uint16_t> in_counts ;
Expand Down
4 changes: 3 additions & 1 deletion src/bind/mouse/hinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,9 @@ namespace vind
points, hint_texts, start_indices, mtxes) ;

while(true) {
pimpl->bg_.update() ;
if(!pimpl->bg_.update()) {
continue ;
}

// To use combined macros like <easyclick><click_left>,
// get the keys from the input queue rather than the mapped queue.
Expand Down
4 changes: 3 additions & 1 deletion src/bind/mouse/jump_keybrd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@ namespace vind
auto toggle_keys = igate.pressed_list() ;

while(true) {
pimpl->bg_.update() ;
if(!pimpl->bg_.update()) {
continue ;
}

core::CmdUnit::SPtr inputs ;
std::uint16_t count ;
Expand Down
4 changes: 3 additions & 1 deletion src/bind/window/switch_win.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,9 @@ namespace vind
auto mode = core::get_global_mode() ;

while(true) {
pimpl->bg_.update() ;
if(!pimpl->bg_.update()) {
continue ;
}

bool break_flag = false ;
do {
Expand Down
4 changes: 3 additions & 1 deletion src/bind/window/winresizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,9 @@ namespace vind

core::InstantKeyAbsorber ika ;
while(true) {
pimpl->bg_.update() ;
if(!pimpl->bg_.update()) {
continue ;
}

bool break_flag = false ;
do {
Expand Down
33 changes: 28 additions & 5 deletions src/core/background.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,19 @@ namespace vind
{
struct Background::Impl {
std::vector<opt::Option::SPtr> opts_ ;
bool screen_is_locked_ ;

template <typename T>
Impl(T&& opts)
: opts_(std::forward<T>(opts))
: opts_(std::forward<T>(opts)),
screen_is_locked_(false)
{}

bool is_screen_locked() {
// GetCursorPos fails when the screen is locked.
POINT pos ;
return GetCursorPos(&pos) == 0 ;
}
} ;

Background::Background()
Expand All @@ -35,22 +43,37 @@ namespace vind

Background::~Background() noexcept = default ;

void Background::update() {
util::get_win_message() ;

bool Background::update() {
auto& igate = InputGate::get_instance() ;
Sleep(5) ;

if(pimpl->is_screen_locked()) {
if(!pimpl->screen_is_locked_) {
// Release all keys when the screen is locked.
for(auto& key : igate.pressed_list()) {
igate.release_virtually(key) ;
}
pimpl->screen_is_locked_ = true ;
}
return false ;
}
else if(pimpl->screen_is_locked_) {
pimpl->screen_is_locked_ = false ;
}

util::get_win_message() ;

for(const auto& op : pimpl->opts_) {
op->process() ;
}

auto& igate = InputGate::get_instance() ;
igate.refresh_toggle_state() ;

if(igate.is_really_pressed(KEYCODE_F8) && \
igate.is_really_pressed(KEYCODE_F9)) {
throw SafeForcedTermination() ;
}
return true ;
}
}
}
3 changes: 2 additions & 1 deletion src/core/background.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ namespace vind

// If you make some loop functions, the function is needed to call.
// It includes Sleep().
void update() ;
// If this function returns false, should skip an iteration.
bool update() ;

Background(const Background&) = delete ;
Background& operator=(const Background&) = delete ;
Expand Down
6 changes: 4 additions & 2 deletions src/core/entry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,10 @@ namespace vind
static const auto desktop_hwnd = GetDesktopWindow() ;
static const auto taskbar_hwnd = FindWindowA("Shell_TrayWnd", NULL) ;

if(!pimpl->bg_.update()) {
return ;
}

auto& ac = AutoCmd::get_instance() ;
auto hwnd = util::get_foreground_window() ;
auto procid = static_cast<DWORD>(0) ;
Expand All @@ -343,8 +347,6 @@ namespace vind
}
}

pimpl->bg_.update() ;

// TODO: It is necessary to add exclusive handling when
// write and read operations are performed at the same
// time by multiple processes. However, these are extremely
Expand Down
2 changes: 1 addition & 1 deletion src/core/version.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#ifndef _VERSION_HPP
#define _VERSION_HPP

#define WIN_VIND_VERSION "5.13.0.0"
#define WIN_VIND_VERSION "5.13.1.0"

#endif
Loading