Skip to content

Commit

Permalink
b4709 -- продолжение 4697
Browse files Browse the repository at this point in the history
  • Loading branch information
w17 committed Jun 16, 2016
1 parent 53f2b8f commit a741220
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 38 deletions.
7 changes: 7 additions & 0 deletions far/changelog
@@ -1,3 +1,10 @@
w17 16.06.2016 19:27:33 +0300 - build 4709

1. Снова уточнение 4697.
Отслеживание переключения полноэкранного режима Win10 с настройкой консоли: [ ] Wrap text output on resize
Восстановление оригинального размера консольного буфера при выходе
Не должен ломаться ConEmu для System.WindowMode = false

zg 15.06.2016 22:27:05 +0200 - build 4708

1. с форума: ShiftEnd и ShiftHome в панелях тормозят.
Expand Down
2 changes: 1 addition & 1 deletion far/console.cpp
Expand Up @@ -152,7 +152,7 @@ virtual bool SetSize(COORD Size) const override
}
else
{
Result=SetConsoleScreenBufferSize(GetOutputHandle(), Size)!=FALSE;
Result = SetConsoleScreenBufferSize(GetOutputHandle(), Size) != FALSE;
}
return Result;
}
Expand Down
7 changes: 2 additions & 5 deletions far/execute.cpp
Expand Up @@ -1033,16 +1033,13 @@ bool Execute(execute_info& Info, bool FolderRun, bool Silent, const std::functio
CONSOLE_CURSOR_INFO cci = { CursorSize, Visible };
Console().SetCursorInfo(cci);

COORD ConSize;
Console().GetSize(ConSize);
if(ConSize.X!=ScrX+1 || ConSize.Y!=ScrY+1)
if (IsConsoleSizeChanged())
{
ChangeVideoMode(ConSize.Y, ConSize.X);
ChangeVideoMode(ScrY, ScrX);
}

if (Global->Opt->Exec.RestoreCPAfterExecute)
{
// восстановим CP-консоли после исполнения проги
Console().SetInputCodepage(ConsoleCP);
Console().SetOutputCodepage(ConsoleOutputCP);
}
Expand Down
42 changes: 25 additions & 17 deletions far/interf.cpp
Expand Up @@ -285,6 +285,7 @@ void RegisterConsoleScrollHook()
registered = true;
}
}

void InitConsole(int FirstInit)
{
RegisterConsoleScrollHook();
Expand Down Expand Up @@ -312,46 +313,39 @@ void InitConsole(int FirstInit)
Console().SetControlHandler(CtrlHandler, true);
Console().GetMode(Console().GetInputHandle(),InitialConsoleMode);
Global->strInitTitle = Console().GetPhysicalTitle();
Console().GetWindowRect(InitWindowRect);
Console().GetSize(InitialSize);
CONSOLE_SCREEN_BUFFER_INFO cbi;
GetConsoleScreenBufferInfo(Console().GetOutputHandle(), &cbi);
InitWindowRect = cbi.srWindow;
InitialSize = cbi.dwSize;
Console().GetCursorInfo(InitialCursorInfo);

SetFarConsoleMode();

/* $ 09.04.2002 DJ
если размер консольного буфера больше размера окна, выставим
их равными
*/
if (FirstInit)
{
SMALL_RECT WindowRect;
Console().GetWindowRect(WindowRect);
Console().GetSize(InitSize);
InitSize = InitialSize;

if(Global->Opt->WindowMode)
{
Console().ResetPosition();
}
else
{
if (WindowRect.Left || WindowRect.Top || WindowRect.Right != InitSize.X-1 || WindowRect.Bottom != InitSize.Y-1)
if (InitWindowRect.Left || InitWindowRect.Top || InitWindowRect.Right != InitSize.X-1 || InitWindowRect.Bottom != InitSize.Y-1)
{
COORD newSize;
newSize.X = WindowRect.Right - WindowRect.Left + 1;
newSize.Y = WindowRect.Bottom - WindowRect.Top + 1;
Console().SetSize(newSize);
Console().GetSize(InitSize);
Console().SetSize(InitSize);
}
}
if (IsZoomed(Console().GetWindow()))
ChangeVideoMode(1);
ChangeVideoMode(true);
}

GetVideoMode(CurSize);
Global->ScrBuf->FillBuf();

ConsoleIcons().setFarIcons();
}

void CloseConsole()
{
Global->ScrBuf->Flush();
Expand Down Expand Up @@ -484,7 +478,7 @@ void ChangeVideoMode(int NumLines,int NumColumns)
srWindowRect.Bottom = ySize-1;
srWindowRect.Left = srWindowRect.Top = 0;

COORD coordScreen={xSize,ySize};
COORD coordScreen = {xSize, ySize};

if (xSize>Size.X || ySize > Size.Y)
{
Expand Down Expand Up @@ -519,6 +513,20 @@ void ChangeVideoMode(int NumLines,int NumColumns)
GenerateWINDOW_BUFFER_SIZE_EVENT(NumColumns,NumLines);
}

bool IsConsoleSizeChanged()
{
COORD ConSize;
Console().GetSize(ConSize);
bool changed = ConSize.Y != ScrY+1 || ConSize.X != ScrX+1;
if (!changed && !Global->Opt->WindowMode)
{
SMALL_RECT sr;
Console().GetWindowRect(sr);
changed = sr.Top != 0 || sr.Left != 0 || sr.Bottom != ScrY || sr.Right != ScrX;
}
return changed;
}

void GenerateWINDOW_BUFFER_SIZE_EVENT(int Sx, int Sy)
{
COORD Size={};
Expand Down
1 change: 1 addition & 0 deletions far/interf.hpp
Expand Up @@ -201,6 +201,7 @@ string HiText2Str(const string& Str);
void RemoveHighlights(string& Str);

bool IsConsoleFullscreen();
bool IsConsoleSizeChanged();

class consoleicons:noncopyable
{
Expand Down
16 changes: 2 additions & 14 deletions far/keyboard.cpp
Expand Up @@ -865,19 +865,7 @@ static DWORD __GetInputRecord(INPUT_RECORD *rec,bool ExcludeMacro,bool ProcessMo
if (EnableShowTime)
ShowTime();

bool SizeChanged=false;
if(Global->Opt->WindowMode)
{
SMALL_RECT CurConRect;
Console().GetWindowRect(CurConRect);
if(CurConRect.Bottom-CurConRect.Top!=ScrY || CurConRect.Right-CurConRect.Left!=ScrX)
{
SizeChanged=true;
}
}

/*& 17.05.2001 OT Изменился размер консоли, генерим клавишу*/
if (rec->EventType==WINDOW_BUFFER_SIZE_EVENT || SizeChanged)
if (rec->EventType==WINDOW_BUFFER_SIZE_EVENT || IsConsoleSizeChanged())
{
int PScrX=ScrX;
int PScrY=ScrY;
Expand All @@ -896,7 +884,7 @@ static DWORD __GetInputRecord(INPUT_RECORD *rec,bool ExcludeMacro,bool ProcessMo

if (Global->WindowManager)
{
if (PScrX + 1 != CurSize.X || PScrY + 1 != CurSize.Y)
if ((PScrX + 1 != CurSize.X || PScrY + 1 != CurSize.Y) && IsWindows10OrGreater())
{
ChangeVideoMode(-CurSize.Y, CurSize.X);
}
Expand Down
2 changes: 1 addition & 1 deletion far/vbuild.m4
@@ -1 +1 @@
m4_define(BUILD,4708)m4_dnl
m4_define(BUILD,4709)m4_dnl

0 comments on commit a741220

Please sign in to comment.