From 623eab27a838d0486556efc36a1436a57d9379d8 Mon Sep 17 00:00:00 2001 From: David Capello Date: Fri, 29 Oct 2010 11:26:32 -0300 Subject: [PATCH] Do not process keyboard shortcuts (e.g. tools shortcuts) when a foreground window is on top. --- src/gui/jmanager.cpp | 8 ++++++++ src/gui/jmanager.h | 2 ++ src/modules/gui.cpp | 13 ++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/gui/jmanager.cpp b/src/gui/jmanager.cpp index 2953b3137..0b63e6430 100644 --- a/src/gui/jmanager.cpp +++ b/src/gui/jmanager.cpp @@ -679,6 +679,14 @@ void jmanager_enqueue_message(JMessage msg) jmessage_free(msg); } +JWidget jmanager_get_top_window() +{ + if (default_manager) + return TOPWND(default_manager); + else + return NULL; +} + JWidget jmanager_get_focus() { return focus_widget; diff --git a/src/gui/jmanager.h b/src/gui/jmanager.h index f951652eb..2709e951d 100644 --- a/src/gui/jmanager.h +++ b/src/gui/jmanager.h @@ -31,6 +31,8 @@ bool jmanager_timer_is_running(int timer_id); void jmanager_enqueue_message(JMessage msg); +JWidget jmanager_get_top_window(); + JWidget jmanager_get_focus(); JWidget jmanager_get_mouse(); JWidget jmanager_get_capture(); diff --git a/src/modules/gui.cpp b/src/modules/gui.cpp index 0ef7de117..94c1e4e4c 100644 --- a/src/modules/gui.cpp +++ b/src/modules/gui.cpp @@ -1173,7 +1173,17 @@ static bool manager_msg_proc(JWidget widget, JMessage msg) } break; - case JM_KEYPRESSED: + case JM_KEYPRESSED: { + Frame* toplevel_frame = dynamic_cast(jmanager_get_top_window()); + + // If there is a foreground window as top level... + if (toplevel_frame && + toplevel_frame != app_get_top_window() && + toplevel_frame->is_foreground()) { + // We just do not process keyboard shortcuts for menus and tools + break; + } + for (std::vector::iterator it = shortcuts->begin(); it != shortcuts->end(); ++it) { Shortcut* shortcut = *it; @@ -1266,6 +1276,7 @@ static bool manager_msg_proc(JWidget widget, JMessage msg) } } break; + } }