From 83dce11f608f8de2dd08123a1450626e3ec4930b Mon Sep 17 00:00:00 2001
From: Alexander Golubev <fatzer2@gmail.com>
Date: Sat, 11 Apr 2026 04:13:37 +0300
Subject: tdeui/kcharselect: key navigation improvements

* Reverse  PgUp/PgDown keys so they better reflect direction of the
  recently added slider movements
* Allow arrow keys to move to the next/prev page

Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
---
 tdeui/kcharselect.cpp | 26 ++++++++++++++++++--------
 tdeui/kcharselect.h   | 12 +++++++-----
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/tdeui/kcharselect.cpp b/tdeui/kcharselect.cpp
index 77d3da0b1..347165016 100644
--- a/tdeui/kcharselect.cpp
+++ b/tdeui/kcharselect.cpp
@@ -177,6 +177,8 @@ void KCharSelectTable::setTableNum( int _tableNum )
 
     vTableNum = _tableNum;
     repaintContents( false );
+
+    emit tableNumChanged(vTableNum);
 }
 
 //==================================================================
@@ -337,10 +339,14 @@ void KCharSelectTable::keyPressEvent( TQKeyEvent *e )
 	gotoDown();
 	break;
     case Key_Next:
-	emit tableDown();
+        if ( tableNum() < 255 ) {
+            setTableNum( tableNum() + 1 );
+        }
 	break;
     case Key_Prior:
-	emit tableUp();
+        if ( tableNum() > 0 ) {
+            setTableNum( tableNum() - 1 );
+        }
 	break;
     case Key_Space:
 	emit activated( ' ' );
@@ -386,6 +392,10 @@ void KCharSelectTable::gotoUp()
 {
     if ( focusPos.y() > 0 ) {
         doGoto(0, -1);
+    } else if ( tableNum() > 0 ) {
+        emit tableNumChanged(--vTableNum);
+        doGoto(0, numRows()-1);
+        repaintContents( false );
     }
 }
 
@@ -394,6 +404,10 @@ void KCharSelectTable::gotoDown()
 {
     if ( focusPos.y() < numRows()-1 ) {
         doGoto(0, +1);
+    } else if ( tableNum() < 255 ) {
+        emit tableNumChanged(++vTableNum);
+        doGoto(0, -(numRows()-1));
+        repaintContents( false );
     }
 }
 
@@ -483,10 +497,8 @@ KCharSelect::KCharSelect( TQWidget *parent, const char *name, const TQString &_f
     setTableNum( _tableNum );
 
     connect( tableSpinBox, TQ_SIGNAL( valueChanged( int ) ), this, TQ_SLOT( tableChanged( int ) ) );
-    connect( tableSpinBox, TQ_SIGNAL( valueChanged( int ) ), d->scrollBar, TQ_SLOT( setValue( int ) ) );
-
     connect( d->scrollBar, TQ_SIGNAL( valueChanged( int ) ), this, TQ_SLOT( tableChanged( int ) ) );
-    connect( d->scrollBar, TQ_SIGNAL( valueChanged( int ) ), tableSpinBox, TQ_SLOT( setValue( int ) ) );
+    connect( charTable, TQ_SIGNAL( tableNumChanged( int ) ), this, TQ_SLOT( tableChanged( int ) ) );
 
     connect( charTable, TQ_SIGNAL( highlighted( const TQChar & ) ), this, TQ_SLOT( slotUpdateUnicode( const TQChar & ) ) );
     connect( charTable, TQ_SIGNAL( highlighted( const TQChar & ) ), this, TQ_SLOT( charHighlighted( const TQChar & ) ) );
@@ -496,8 +508,6 @@ KCharSelect::KCharSelect( TQWidget *parent, const char *name, const TQString &_f
     connect( charTable, TQ_SIGNAL( focusItemChanged( const TQChar & ) ),
 	     this, TQ_SLOT( charFocusItemChanged( const TQChar & ) ) );
     connect( charTable, TQ_SIGNAL( focusItemChanged() ), this, TQ_SLOT( charFocusItemChanged() ) );
-    connect( charTable, TQ_SIGNAL( tableUp() ), this, TQ_SLOT( charTableUp() ) );
-    connect( charTable, TQ_SIGNAL( tableDown() ), this, TQ_SLOT( charTableDown() ) );
 
     connect( charTable, TQ_SIGNAL(doubleClicked()),this,TQ_SLOT(slotDoubleClicked()));
 
@@ -567,7 +577,7 @@ void KCharSelect::fontSelected( const TQString &_font )
 //==================================================================
 void KCharSelect::tableChanged( int _value )
 {
-    charTable->setTableNum( _value );
+    setTableNum( _value );
 }
 
 //==================================================================
diff --git a/tdeui/kcharselect.h b/tdeui/kcharselect.h
index 60a067e1e..5ffd7cc67 100644
--- a/tdeui/kcharselect.h
+++ b/tdeui/kcharselect.h
@@ -61,9 +61,10 @@ public:
     virtual void setChar( const TQChar &_chr );
     virtual void setTableNum( int _tableNum );
 
+    TQString font() const { return vFont; }
     virtual TQChar chr() const { return vChr; }
+    int tableNum() const { return vTableNum; }
 
-    TQString font() const { return vFont; }
     TQChar charAt( int row, int col ) const;
 
 protected:
@@ -98,8 +99,9 @@ signals:
     void activated();
     void focusItemChanged();
     void focusItemChanged( const TQChar &c );
-    void tableUp();
-    void tableDown();
+    void tableUp();   //< BCI: remove me
+    void tableDown(); //< BCI: remove me
+    void tableNumChanged( int tableNum );
     void doubleClicked();
 
 private:
@@ -244,8 +246,8 @@ protected slots:
     void charActivated() { emit activated(); }
     void charFocusItemChanged() { emit focusItemChanged(); }
     void charFocusItemChanged( const TQChar &c ) { emit focusItemChanged( c ); }
-    void charTableUp() { if ( tableNum() < 255 ) setTableNum( tableNum() + 1 ); }
-    void charTableDown() { if ( tableNum() > 0 ) setTableNum( tableNum() - 1 ); }
+    void charTableUp() { if ( tableNum() < 255 ) setTableNum( tableNum() + 1 ); } //< BCI: remove me
+    void charTableDown() { if ( tableNum() > 0 ) setTableNum( tableNum() - 1 ); } //< BCI: remove me
     void slotDoubleClicked() { emit doubleClicked(); }
     void slotUnicodeEntered();
     void slotUpdateUnicode( const TQChar &c );
-- 
cgit v1.2.3

