diff --git a/include/eepp/ui/doc/textdocument.hpp b/include/eepp/ui/doc/textdocument.hpp index 6081ad8e8..b68968b14 100644 --- a/include/eepp/ui/doc/textdocument.hpp +++ b/include/eepp/ui/doc/textdocument.hpp @@ -327,6 +327,8 @@ class EE_API TextDocument { void selectLine(); + void selectSingleLine(); + void selectToNextWord(); void selectToPreviousLine(); diff --git a/include/eepp/window/window.hpp b/include/eepp/window/window.hpp index 1ff8d2653..66726ff41 100644 --- a/include/eepp/window/window.hpp +++ b/include/eepp/window/window.hpp @@ -193,12 +193,18 @@ class EE_API Window { /** @return true if the window is maximized */ virtual bool isMaximized(); + /** @return true if the window is minimized */ + virtual bool isMinimized(); + /** This will attempt to hide the window */ virtual void hide(); /** This will attempt to raise the window */ virtual void raise(); + /** This will attempt to restore the window */ + virtual void restore(); + /** Request a window to demand attention from the user. */ virtual void flash( WindowFlashOperation op ); diff --git a/src/eepp/ui/doc/textdocument.cpp b/src/eepp/ui/doc/textdocument.cpp index 4d62d0ae9..768a1ba3e 100644 --- a/src/eepp/ui/doc/textdocument.cpp +++ b/src/eepp/ui/doc/textdocument.cpp @@ -2031,6 +2031,16 @@ void TextDocument::selectLine() { mergeSelection(); } +void TextDocument::selectSingleLine() { + for ( size_t i = 0; i < mSelection.size(); ++i ) { + auto sel = getSelectionIndex( i ); + setSelection( i, { { sel.start().line(), 0 }, + { sel.start().line(), + eemax( (Int64)line( sel.start().line() ).size() - 1, (Int64)0 ) } } ); + } + mergeSelection(); +} + void TextDocument::selectToPreviousLine() { for ( size_t i = 0; i < mSelection.size(); ++i ) { TextPosition pos = getSelectionIndex( i ).start(); @@ -3520,6 +3530,7 @@ void TextDocument::initializeCommands() { mCommands["select-word"] = [this] { selectWord(); }; mCommands["select-all-words"] = [this] { selectAllWords(); }; mCommands["select-line"] = [this] { selectLine(); }; + mCommands["select-single-line"] = [this] { selectSingleLine(); }; mCommands["select-to-start-of-line"] = [this] { selectToStartOfLine(); }; mCommands["select-to-end-of-line"] = [this] { selectToEndOfLine(); }; mCommands["select-to-start-of-doc"] = [this] { selectToStartOfDoc(); }; diff --git a/src/eepp/window/backend/SDL2/windowsdl2.cpp b/src/eepp/window/backend/SDL2/windowsdl2.cpp index bf97fbb68..108565ef5 100644 --- a/src/eepp/window/backend/SDL2/windowsdl2.cpp +++ b/src/eepp/window/backend/SDL2/windowsdl2.cpp @@ -777,6 +777,10 @@ bool WindowSDL::isMaximized() { return SDL_GetWindowFlags( mSDLWindow ) & SDL_WINDOW_MAXIMIZED; } +bool WindowSDL::isMinimized() { + return SDL_GetWindowFlags( mSDLWindow ) & SDL_WINDOW_MINIMIZED; +} + void WindowSDL::hide() { SDL_HideWindow( mSDLWindow ); } @@ -785,6 +789,10 @@ void WindowSDL::raise() { SDL_RaiseWindow( mSDLWindow ); } +void WindowSDL::restore() { + SDL_RestoreWindow( mSDLWindow ); +} + void WindowSDL::flash( WindowFlashOperation op ) { #if EE_PLATFORM != EE_PLATFORM_EMSCRIPTEN #if SDL_VERSION_ATLEAST( 2, 0, 16 ) diff --git a/src/eepp/window/backend/SDL2/windowsdl2.hpp b/src/eepp/window/backend/SDL2/windowsdl2.hpp index be4b1e754..f41dc7261 100644 --- a/src/eepp/window/backend/SDL2/windowsdl2.hpp +++ b/src/eepp/window/backend/SDL2/windowsdl2.hpp @@ -63,10 +63,14 @@ class EE_API WindowSDL : public Window { virtual bool isMaximized(); + virtual bool isMinimized(); + virtual void hide(); virtual void raise(); + virtual void restore(); + virtual void flash( WindowFlashOperation op ); virtual void show(); diff --git a/src/eepp/window/window.cpp b/src/eepp/window/window.cpp index 1f9d06d3a..f1f13a5c7 100644 --- a/src/eepp/window/window.cpp +++ b/src/eepp/window/window.cpp @@ -534,10 +534,16 @@ bool Window::isMaximized() { return false; } +bool Window::isMinimized() { + return false; +} + void Window::hide() {} void Window::raise() {} +void Window::restore() {} + void Window::flash( WindowFlashOperation ) {} void Window::show() {} diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index 9c6ba808c..a7a6570df 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -3560,8 +3560,11 @@ void App::init( const LogLevel& logLevel, std::string file, const Float& pidelDe loadFileFromPathOrFocus( path, true, nullptr, getForcePositionFn( initialPosition ) ); } ); - if ( !mWindow->hasFocus() ) + if ( !mWindow->hasFocus() ) { + if ( mWindow->isMinimized() ) + mWindow->restore(); mWindow->raise(); + } } FileSystem::fileRemove( fi.getFilepath() ); } );