* Make closing the translator settings window thread-safe

* Insert a forgotten B_TRANSLATE
* Style fixes

Thanks to Axel Dörfler for reviewing the code.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37726 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Wim van der Meer
2010-07-24 02:22:48 +00:00
parent a3f665982e
commit 80b909c924
+28 -21
View File
@@ -57,7 +57,8 @@ enum {
kLocationChanged, kLocationChanged,
kChooseLocation, kChooseLocation,
kSaveScreenshot, kSaveScreenshot,
kSettings kSettings,
kCloseTranslatorSettings
}; };
@@ -66,21 +67,21 @@ enum {
class QuitMessageFilter : public BMessageFilter { class QuitMessageFilter : public BMessageFilter {
public: public:
QuitMessageFilter(BWindow** window) QuitMessageFilter(BWindow* window)
: :
BMessageFilter((uint32)B_QUIT_REQUESTED), BMessageFilter((uint32)B_QUIT_REQUESTED),
fWindow(window) fWindow(window)
{ {
} }
virtual filter_result Filter(BMessage* message, BHandler** target)
{ virtual filter_result Filter(BMessage* message, BHandler** target)
*fWindow = NULL; {
return B_DISPATCH_MESSAGE; BMessenger(fWindow).SendMessage(kCloseTranslatorSettings);
} return B_SKIP_MESSAGE;
}
private: private:
BWindow** fWindow; BWindow* fWindow;
}; };
@@ -93,11 +94,11 @@ public:
{ {
} }
virtual bool Filter(const entry_ref* ref, BNode* node, virtual bool Filter(const entry_ref* ref, BNode* node,
struct stat_beos* stat, const char* filetype) struct stat_beos* stat, const char* filetype)
{ {
return node->IsDirectory(); return node->IsDirectory();
} }
}; };
@@ -343,6 +344,11 @@ ScreenshotWindow::MessageReceived(BMessage* message)
_ShowSettings(true); _ShowSettings(true);
break; break;
case kCloseTranslatorSettings:
fSettingsWindow->Lock();
fSettingsWindow->Quit();
fSettingsWindow = NULL;
default: default:
BWindow::MessageReceived(message); BWindow::MessageReceived(message);
break; break;
@@ -636,10 +642,11 @@ ScreenshotWindow::_ShowSettings(bool activate)
if (activate) if (activate)
fSettingsWindow->Activate(); fSettingsWindow->Activate();
} else { } else {
fSettingsWindow = new BWindow(rect, "Translator Settings", fSettingsWindow = new BWindow(rect,
B_TRANSLATE("Translator Settings"),
B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
B_NOT_ZOOMABLE | B_NOT_RESIZABLE); B_NOT_ZOOMABLE | B_NOT_RESIZABLE);
fSettingsWindow->AddFilter(new QuitMessageFilter(&fSettingsWindow)); fSettingsWindow->AddFilter(new QuitMessageFilter(this));
fSettingsWindow->AddChild(view); fSettingsWindow->AddChild(view);
fSettingsWindow->CenterOnScreen(); fSettingsWindow->CenterOnScreen();
fSettingsWindow->Show(); fSettingsWindow->Show();