From 381629a7b6d4c88f2fe857b6220dca8438fcfdb1 Mon Sep 17 00:00:00 2001 From: John Scipione Date: Sun, 10 Feb 2013 19:30:45 -0500 Subject: [PATCH] Close about window on escape --- src/kits/shared/AboutWindow.cpp | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/kits/shared/AboutWindow.cpp b/src/kits/shared/AboutWindow.cpp index 363e6f302a..d8e66c262c 100644 --- a/src/kits/shared/AboutWindow.cpp +++ b/src/kits/shared/AboutWindow.cpp @@ -20,7 +20,10 @@ #include #include #include +#include #include +#include +#include #include #include #include @@ -42,6 +45,46 @@ using BPrivate::gSystemCatalog; #define B_TRANSLATION_CONTEXT "AboutWindow" +class EscapeFilter : public BMessageFilter { + public: + EscapeFilter(BWindow* target) + : + BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE), + fTarget(target) + { + } + virtual ~EscapeFilter() + { + } + virtual filter_result + Filter(BMessage* message, BHandler** target) + { + filter_result result = B_DISPATCH_MESSAGE; + switch (message->what) { + case B_KEY_DOWN: + case B_UNMAPPED_KEY_DOWN: { + uint32 key; + if (message->FindInt32("raw_char", + (int32*)&key) >= B_OK) { + if (key == B_ESCAPE) { + result = B_SKIP_MESSAGE; + fTarget->PostMessage( + B_QUIT_REQUESTED); + } + } + break; + } + default: + break; + } + + return result; + } + private: + BWindow* fTarget; +}; + + class StripeView : public BView { public: StripeView(BBitmap* icon); @@ -366,6 +409,8 @@ BAboutWindow::BAboutWindow(const char* appName, const char* signature) AddChild(fAboutView); MoveTo(AboutPosition(Frame().Width(), Frame().Height())); + + AddCommonFilter(new EscapeFilter(this)); }