CtrlCore, ide: DeactivateBy(Ctrl *), improved save on deactivate in ide

git-svn-id: svn://ultimatepp.org/upp/trunk@8482 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2015-05-28 18:05:59 +00:00
parent 4d10e102c9
commit 19d2116a26
6 changed files with 18 additions and 4 deletions

View file

@ -47,6 +47,8 @@ int Ctrl::OverPaint() const { return 0; }
void Ctrl::Activate() {}
void Ctrl::Deactivate() {}
void Ctrl::DeactivateBy(Ctrl *) {}
void Ctrl::CancelMode() {}
void Ctrl::MouseEnter(Point p, dword keyflags) {}
void Ctrl::LeftDown(Point p, dword keyflags) {}

View file

@ -796,6 +796,7 @@ public:
virtual void Activate();
virtual void Deactivate();
virtual void DeactivateBy(Ctrl *new_focus);
virtual Image FrameMouseEvent(int event, Point p, int zdelta, dword keyflags);
virtual Image MouseEvent(int event, Point p, int zdelta, dword keyflags);

View file

@ -144,6 +144,7 @@ void Ctrl::DoDeactivate(Ptr<Ctrl> pfocusCtrl, Ptr<Ctrl> nfocusCtrl)
Ctrl *ntop = nfocusCtrl ? nfocusCtrl->GetTopCtrl() : NULL;
LLOG("DoDeactivate " << UPP::Name(ptop) << " in favor of " << UPP::Name(ntop));
if(ntop != ptop && !ptop->destroying) {
ptop->DeactivateBy(ntop);
ptop->Deactivate();
if(ptop)
ptop->StateH(DEACTIVATE);

View file

@ -293,6 +293,16 @@ foreground or changing its caption).&]
[s5;:Ctrl`:`:Deactivate`(`):%- [@(0.0.255) virtual] [@(0.0.255) void]_[* Deactivate]()&]
[s2;b17;a17; This method is called when Ctrl is top`-level and is
deactivated `- focus has gone outside of Ctrl and its child Ctrls.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:Ctrl`:`:DeactivateBy`(Upp`:`:Ctrl`*`):%- [@(0.0.255) virtual]
[@(0.0.255) void]_[* DeactivateBy]([_^Upp`:`:Ctrl^ Ctrl]_`*[*@3 new`_focus])&]
[s2; Similar to Deactivate without parameter, but if a widget that
caused deactivation by getting a focus is part of the same appliaction,
[%-*@3 new`_focus] contains a pointer to it. If deactivation is
caused by switching to another application, this parameter is
NULL. Both variants of Deactivate are called, the variant with
paremeter is called first.&]
[s3;%- &]
[s4;%- &]
[s5;:Ctrl`:`:FrameMouseEvent`(int`,Point`,int`,dword`):%- [@(0.0.255) virtual]

View file

@ -354,14 +354,14 @@ void Ide::CycleFiles()
}
}
void Ide::Deactivate()
void Ide::DeactivateBy(Ctrl *new_focus)
{
if(deactivate_save && issaving == 0) {
if(deactivate_save && issaving == 0 && !new_focus && editor.GetLength() < 1000000) {
DeactivationSave(true);
SaveFile();
DeactivationSave(false);
}
TopWindow::Deactivate();
TopWindow::DeactivateBy(new_focus);
}
void Ide::Activate()

View file

@ -329,7 +329,7 @@ public:
virtual void FileRename(const String& nm);
virtual bool FileRemove();
virtual void DragAndDrop(Point p, PasteClip& d);
virtual void Deactivate();
virtual void DeactivateBy(Ctrl *new_focus);
virtual void Activate();
virtual void Layout();