Terminal will issue an alert, if there are active processes and the
user closes the window (doesn't work if the user closes only a tab, yet). Active by default but can be disabled by a checkbox. - The preference window needs to be reworked. - Wording of the alert and the option can be improved (I accept advices). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37754 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
f700bfd569
commit
6491fb598a
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include <Button.h>
|
||||
#include <Catalog.h>
|
||||
#include <CheckBox.h>
|
||||
#include <ColorControl.h>
|
||||
#include <GridLayoutBuilder.h>
|
||||
#include <GroupLayoutBuilder.h>
|
||||
|
@ -85,6 +86,9 @@ AppearancePrefView::AppearancePrefView(const char* name,
|
|||
|
||||
SetLayout(new BGroupLayout(B_HORIZONTAL));
|
||||
|
||||
fWarnOnExit = new BCheckBox(B_TRANSLATE("Warn on Exit"),
|
||||
new BMessage(MSG_WARN_ON_EXIT_CHANGED));
|
||||
|
||||
BMenu* fontMenu = _MakeFontMenu(MSG_HALF_FONT_CHANGED,
|
||||
PrefHandler::Default()->getString(PREF_HALF_FONT_FAMILY),
|
||||
PrefHandler::Default()->getString(PREF_HALF_FONT_STYLE));
|
||||
|
@ -124,6 +128,7 @@ AppearancePrefView::AppearancePrefView(const char* name,
|
|||
.AddGlue()
|
||||
.Add(fColorControl = new BColorControl(BPoint(10, 10),
|
||||
B_CELLS_32x8, 8.0, "", new BMessage(MSG_COLOR_CHANGED)))
|
||||
.Add(fWarnOnExit)
|
||||
.End()
|
||||
.End();
|
||||
|
||||
|
@ -137,6 +142,8 @@ AppearancePrefView::AppearancePrefView(const char* name,
|
|||
fColorControl->SetEnabled(false);
|
||||
fColorControl->SetValue(PrefHandler::Default()->getRGB(PREF_TEXT_FORE_COLOR));
|
||||
|
||||
fWarnOnExit->SetValue(PrefHandler::Default()->getBool(PREF_WARN_ON_EXIT));
|
||||
|
||||
BTextControl* redInput = (BTextControl*)fColorControl->ChildAt(0);
|
||||
BTextControl* greenInput = (BTextControl*)fColorControl->ChildAt(1);
|
||||
BTextControl* blueInput = (BTextControl*)fColorControl->ChildAt(2);
|
||||
|
@ -161,6 +168,9 @@ AppearancePrefView::GetPreferredSize(float* _width, float* _height)
|
|||
void
|
||||
AppearancePrefView::Revert()
|
||||
{
|
||||
fWarnOnExit->SetValue(PrefHandler::Default()->getBool(
|
||||
PREF_WARN_ON_EXIT));
|
||||
|
||||
fColorSchemaField->Menu()->ItemAt(0)->SetMarked(true);
|
||||
fColorControl->SetValue(PrefHandler::Default()->
|
||||
getRGB(PREF_TEXT_FORE_COLOR));
|
||||
|
@ -175,6 +185,8 @@ AppearancePrefView::Revert()
|
|||
void
|
||||
AppearancePrefView::AttachedToWindow()
|
||||
{
|
||||
fWarnOnExit->SetTarget(this);
|
||||
|
||||
fFontSize->Menu()->SetTargetForItems(this);
|
||||
fFont->Menu()->SetTargetForItems(this);
|
||||
|
||||
|
@ -261,6 +273,14 @@ AppearancePrefView::MessageReceived(BMessage* msg)
|
|||
fColorField->Menu()->FindMarked()->Label()));
|
||||
break;
|
||||
|
||||
case MSG_WARN_ON_EXIT_CHANGED:
|
||||
if (PrefHandler::Default()->getBool(PREF_WARN_ON_EXIT)
|
||||
!= fWarnOnExit->Value()) {
|
||||
PrefHandler::Default()->setBool(PREF_WARN_ON_EXIT,
|
||||
fWarnOnExit->Value());
|
||||
modified = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
BView::MessageReceived(msg);
|
||||
return;
|
||||
|
|
|
@ -21,7 +21,7 @@ const ulong MSG_COLOR_FIELD_CHANGED = 'mccf';
|
|||
const ulong MSG_COLOR_CHANGED = 'mcbc';
|
||||
const ulong MSG_COLOR_SCHEMA_CHANGED = 'mccs';
|
||||
|
||||
|
||||
const ulong MSG_WARN_ON_EXIT_CHANGED = 'mwec';
|
||||
const ulong MSG_COLS_CHANGED = 'mccl';
|
||||
const ulong MSG_ROWS_CHANGED = 'mcrw';
|
||||
const ulong MSG_HISTORY_CHANGED = 'mhst';
|
||||
|
@ -34,6 +34,7 @@ class BColorControl;
|
|||
class BMenu;
|
||||
class BMenuField;
|
||||
class BPopUpMenu;
|
||||
class BCheckBox;
|
||||
|
||||
class AppearancePrefView : public BView {
|
||||
public:
|
||||
|
@ -65,6 +66,7 @@ private:
|
|||
static BPopUpMenu* _MakeColorSchemaMenu(uint32 msg, const color_schema **schemas,
|
||||
const color_schema *defaultItemName);
|
||||
|
||||
BCheckBox *fWarnOnExit;
|
||||
BMenuField *fFont;
|
||||
BMenuField *fFontSize;
|
||||
|
||||
|
|
|
@ -58,6 +58,9 @@ static const pref_defaults kTermDefaults[] = {
|
|||
|
||||
{ PREF_GUI_LANGUAGE, "English"},
|
||||
{ PREF_IM_AWARE, "0"},
|
||||
|
||||
{ PREF_WARN_ON_EXIT, PREF_TRUE },
|
||||
|
||||
{ NULL, NULL},
|
||||
};
|
||||
|
||||
|
@ -425,6 +428,7 @@ PrefHandler::_LoadFromFile(const char* path)
|
|||
setRGB(PREF_SELECT_BACK_COLOR, prefs.selbg);
|
||||
setRGB(PREF_SELECT_FORE_COLOR, prefs.selfg);
|
||||
setString(PREF_TEXT_ENCODING, EncodingAsString(prefs.encoding));
|
||||
setBool(PREF_WARN_ON_EXIT, prefs.warn_on_exit);
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
|
|
@ -41,7 +41,8 @@ struct termprefs {
|
|||
rgb_color selbg;
|
||||
rgb_color selfg;
|
||||
char encoding; // index in the menu (0 = UTF-8)
|
||||
char unknown[3];
|
||||
bool warn_on_exit;
|
||||
char unknown[2];
|
||||
};
|
||||
|
||||
struct pref_defaults {
|
||||
|
|
|
@ -130,6 +130,8 @@ const char* const PREF_SHELL = "Shell";
|
|||
const char* const PREF_TEXT_ENCODING = "Text encoding";
|
||||
const char* const PREF_GUI_LANGUAGE = "Language";
|
||||
|
||||
const char* const PREF_WARN_ON_EXIT = "Warn on exit";
|
||||
|
||||
// Color type
|
||||
enum {
|
||||
TEXT_FOREGROUND_COLOR,
|
||||
|
|
|
@ -233,6 +233,30 @@ TermWindow::_InitWindow()
|
|||
bool
|
||||
TermWindow::QuitRequested()
|
||||
{
|
||||
bool warnOnExit = PrefHandler::Default()->getBool(PREF_WARN_ON_EXIT);
|
||||
|
||||
if (!warnOnExit)
|
||||
return BWindow::QuitRequested();
|
||||
|
||||
bool isBusy = false;
|
||||
for (int32 i = 0; i < fSessions.CountItems(); i++) {
|
||||
if (_TermViewAt(i)->IsShellBusy()) {
|
||||
isBusy = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isBusy) {
|
||||
const char *alertMessage = B_TRANSLATE("A process is still running.\n"
|
||||
"If you close the Terminal the process will be killed.");
|
||||
BAlert *alert = new BAlert(B_TRANSLATE("Really quit?"),
|
||||
alertMessage, B_TRANSLATE("OK"), B_TRANSLATE("Cancel"), NULL,
|
||||
B_WIDTH_AS_USUAL, B_WARNING_ALERT);
|
||||
int32 result = alert->Go();
|
||||
if (result == 1)
|
||||
return false;
|
||||
}
|
||||
|
||||
return BWindow::QuitRequested();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue