xref: /haiku/src/preferences/locale/LocalePreflet.cpp (revision 83b1a68c52ba3e0e8796282759f694b7fdddf06d)
1 /*
2  * Copyright 2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3  * Copyright 2010, Adrien Destugues <pulkomandy@pulkomandy.ath.cx>. All rightts reserved.
4  * Distributed under the terms of the MIT License.
5  */
6 
7 
8 #include <AboutWindow.h>
9 #include <Alert.h>
10 #include <Application.h>
11 #include <Catalog.h>
12 #include <Locale.h>
13 #include <Roster.h>
14 #include <TextView.h>
15 
16 #include "LocalePreflet.h"
17 #include "LocaleWindow.h"
18 
19 
20 #undef B_TRANSLATION_CONTEXT
21 #define B_TRANSLATION_CONTEXT "Locale Preflet"
22 
23 
24 const char* kAppName = B_TRANSLATE("Locale");
25 const char* kSignature = "application/x-vnd.Haiku-Locale";
26 
27 
28 class LocalePreflet : public BApplication {
29 	public:
30 							LocalePreflet();
31 		virtual				~LocalePreflet();
32 
33 		virtual	void		MessageReceived(BMessage* message);
34 
35 private:
36 		status_t			_RestartApp(const char* signature) const;
37 
38 		LocaleWindow*		fLocaleWindow;
39 };
40 
41 
42 //	#pragma mark -
43 
44 
45 LocalePreflet::LocalePreflet()
46 	:
47 	BApplication(kSignature),
48 	fLocaleWindow(new LocaleWindow())
49 {
50 	fLocaleWindow->Show();
51 }
52 
53 
54 LocalePreflet::~LocalePreflet()
55 {
56 }
57 
58 
59 void
60 LocalePreflet::MessageReceived(BMessage* message)
61 {
62 	switch (message->what) {
63 		case B_LOCALE_CHANGED:
64 			BLocaleRoster::Default()->Refresh();
65 			fLocaleWindow->PostMessage(message);
66 			break;
67 
68 		case kMsgRestartTrackerAndDeskbar:
69 			if (message->FindInt32("which") == 1) {
70 				_RestartApp("application/x-vnd.Be-TRAK");
71 				_RestartApp("application/x-vnd.Be-TSKB");
72 			}
73 			break;
74 
75 		case B_ABOUT_REQUESTED:
76 		{
77 			BAboutWindow* window;
78 
79 			const char* authors[] = {
80 				"Axel Dörfler",
81 				"Adrien Destugues",
82 				"Oliver Tappe",
83 				NULL
84 			};
85 
86 			window = new BAboutWindow(kAppName, kSignature);
87 			window->AddCopyright(2005, "Haiku, Inc.");
88 			window->AddAuthors(authors);
89 
90 			window->Show();
91 
92 			break;
93 		}
94 
95 		default:
96 			BApplication::MessageReceived(message);
97 			break;
98 	}
99 }
100 
101 
102 status_t
103 LocalePreflet::_RestartApp(const char* signature) const
104 {
105 	app_info info;
106 	status_t status = be_roster->GetAppInfo(signature, &info);
107 	if (status != B_OK)
108 		return status;
109 
110 	BMessenger application(signature);
111 	status = application.SendMessage(B_QUIT_REQUESTED);
112 	if (status != B_OK)
113 		return status;
114 
115 	status_t exit;
116 	wait_for_thread(info.thread, &exit);
117 
118 	return be_roster->Launch(signature);
119 }
120 
121 
122 //	#pragma mark -
123 
124 
125 int
126 main(int argc, char** argv)
127 {
128 	LocalePreflet app;
129 	app.Run();
130 	return 0;
131 }
132 
133