[Libreoffice-commits] core.git: include/vcl vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Wed Jul 8 20:06:54 UTC 2020


 include/vcl/vclmedit.hxx      |    3 +++
 include/vcl/weld.hxx          |   10 ++++++++++
 vcl/source/app/salvtables.cxx |   12 ++++++++++++
 vcl/source/edit/vclmedit.cxx  |   16 ++++++++++++++++
 vcl/unx/gtk3/gtk3gtkinst.cxx  |   18 ++++++++++++++++++
 5 files changed, 59 insertions(+)

New commits:
commit 253d4c15e73b0a22320dbebb4bdf17f8fdb03649
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Wed Jul 8 17:08:51 2020 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Wed Jul 8 22:06:05 2020 +0200

    query if the cursor can be moved up or down
    
    Change-Id: I47c09ff5f76c873cf30e608a134f90b42040a0c3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98387
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/vcl/vclmedit.hxx b/include/vcl/vclmedit.hxx
index 307d218a5846..caec816bd4b3 100644
--- a/include/vcl/vclmedit.hxx
+++ b/include/vcl/vclmedit.hxx
@@ -134,6 +134,9 @@ public:
     virtual OUString    GetSelected() const override;
     OUString            GetSelected( LineEnd aSeparator ) const;
 
+    bool CanUp() const;
+    bool CanDown() const;
+
     virtual void    Cut() override;
     virtual void    Copy() override;
     virtual void    Paste() override;
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 7649accf8b2d..73f27cd9a517 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -2041,6 +2041,16 @@ public:
         m_aCursorPositionHdl = rLink;
     }
 
+    // returns true if pressing up would move the cursor
+    // doesn't matter if that move is to a previous line or to the start of the
+    // current line just so long as the cursor would move
+    virtual bool can_move_cursor_with_up() const = 0;
+
+    // returns true if pressing down would move the cursor
+    // doesn't matter if that move is to a next line or to the end of the
+    // current line just so long as the cursor would move
+    virtual bool can_move_cursor_with_down() const = 0;
+
     virtual void cut_clipboard() = 0;
     virtual void copy_clipboard() = 0;
     virtual void paste_clipboard() = 0;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 893a7f4f0b49..e30bbd057c71 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -5500,6 +5500,18 @@ public:
         weld::TextView::connect_cursor_position(rLink);
     }
 
+    virtual bool can_move_cursor_with_up() const override
+    {
+        bool bNoSelection = !m_xTextView->GetSelection();
+        return !bNoSelection || m_xTextView->CanUp();
+    }
+
+    virtual bool can_move_cursor_with_down() const override
+    {
+        bool bNoSelection = !m_xTextView->GetSelection();
+        return !bNoSelection || m_xTextView->CanDown();
+    }
+
     virtual void cut_clipboard() override
     {
         m_xTextView->Cut();
diff --git a/vcl/source/edit/vclmedit.cxx b/vcl/source/edit/vclmedit.cxx
index 021ef7658837..fe459ba59a0d 100644
--- a/vcl/source/edit/vclmedit.cxx
+++ b/vcl/source/edit/vclmedit.cxx
@@ -1515,6 +1515,22 @@ void VclMultiLineEdit::EnableCursor( bool bEnable )
     GetTextView()->EnableCursor( bEnable );
 }
 
+bool VclMultiLineEdit::CanUp() const
+{
+    TextView* pTextView = GetTextView();
+    const TextSelection& rTextSelection = pTextView->GetSelection();
+    TextPaM aPaM(rTextSelection.GetEnd());
+    return aPaM != pTextView->CursorUp(aPaM);
+}
+
+bool VclMultiLineEdit::CanDown() const
+{
+    TextView* pTextView = GetTextView();
+    const TextSelection& rTextSelection = pTextView->GetSelection();
+    TextPaM aPaM(rTextSelection.GetEnd());
+    return aPaM != pTextView->CursorDown(aPaM);
+}
+
 TextWindow* VclMultiLineEdit::GetTextWindow()
 {
     return pImpVclMEdit->GetTextWindow();
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 5ba41f9e028a..1cba75f751e2 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -12553,6 +12553,24 @@ public:
         g_signal_handler_unblock(m_pVAdjustment, m_nVAdjustChangedSignalId);
     }
 
+    // in gtk, 'up' when on the first line, will jump to the start of the line
+    // if not there already
+    virtual bool can_move_cursor_with_up() const override
+    {
+        GtkTextIter start, end;
+        gtk_text_buffer_get_selection_bounds(m_pTextBuffer, &start, &end);
+        return !gtk_text_iter_equal(&start, &end) || !gtk_text_iter_is_start(&start);
+    }
+
+    // in gtk, 'down' when on the first line, will jump to the end of the line
+    // if not there already
+    virtual bool can_move_cursor_with_down() const override
+    {
+        GtkTextIter start, end;
+        gtk_text_buffer_get_selection_bounds(m_pTextBuffer, &start, &end);
+        return !gtk_text_iter_equal(&start, &end) || !gtk_text_iter_is_end(&end);
+    }
+
     virtual void cut_clipboard() override
     {
         GtkClipboard *pClipboard = gtk_widget_get_clipboard(GTK_WIDGET(m_pTextView),


More information about the Libreoffice-commits mailing list