summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/inputmethods.cpp88
-rw-r--r--core/launcher/inputmethods.h1
2 files changed, 75 insertions, 14 deletions
diff --git a/core/launcher/inputmethods.cpp b/core/launcher/inputmethods.cpp
index d89a366..8f3e812 100644
--- a/core/launcher/inputmethods.cpp
+++ b/core/launcher/inputmethods.cpp
@@ -97,14 +97,14 @@ public:
97InputMethods::InputMethods( QWidget *parent ) : 97InputMethods::InputMethods( QWidget *parent ) :
98 QWidget( parent, "InputMethods", WStyle_Tool | WStyle_Customize ), 98 QWidget( parent, "InputMethods", WStyle_Tool | WStyle_Customize ),
99 mkeyboard(0), imethod(0) 99 mkeyboard(0), imethod(0)
100{ 100{
101 Config cfg( "Launcher" ); 101 Config cfg( "Launcher" );
102 cfg.setGroup( "InputMethods" ); 102 cfg.setGroup( "InputMethods" );
103 inputWidgetStyle = QWidget::WStyle_Customize | QWidget::WStyle_StaysOnTop | QWidget::WGroupLeader; 103 inputWidgetStyle = QWidget::WStyle_Customize | QWidget::WStyle_StaysOnTop | QWidget::WGroupLeader | QWidget::WStyle_Tool;
104 inputWidgetStyle |= cfg.readBoolEntry( "Float", false ) ? QWidget::WStyle_DialogBorder : QWidget::WStyle_Tool; 104 inputWidgetStyle |= cfg.readBoolEntry( "Float", false ) ? QWidget::WStyle_DialogBorder : 0;
105 inputWidgetWidth = cfg.readNumEntry( "Width", 100 ); 105 inputWidgetWidth = cfg.readNumEntry( "Width", 100 );
106 106
107 setBackgroundMode( PaletteBackground ); 107 setBackgroundMode( PaletteBackground );
108 QHBoxLayout *hbox = new QHBoxLayout( this ); 108 QHBoxLayout *hbox = new QHBoxLayout( this );
109 109
110 kbdButton = new IMToolButton( this); 110 kbdButton = new IMToolButton( this);
@@ -527,24 +527,72 @@ void InputMethods::qcopReceive( const QCString &msg, const QByteArray &data )
527} 527}
528 528
529 529
530void InputMethods::showKbd( bool on ) 530void InputMethods::showKbd( bool on )
531{ 531{
532 if ( !mkeyboard ) 532 if ( !mkeyboard )
533 return; 533 return;
534 534
535 if ( on ) { 535 if ( on )
536 mkeyboard->resetState(); 536 {
537 // HACK... Make the texteditor fit with all input methods 537 mkeyboard->resetState();
538 // Input methods should also never use more than about 40% of the screen 538
539 int height = QMIN( mkeyboard->widget->sizeHint().height(), 134 ); 539 int height = QMIN( mkeyboard->widget->sizeHint().height(), 134 );
540 mkeyboard->widget->resize( qApp->desktop()->width() * (inputWidgetWidth*0.01), height ); 540 int width = qApp->desktop()->width() * (inputWidgetWidth*0.01);
541 mkeyboard->widget->move( 0, mapToGlobal( QPoint() ).y() - height ); 541 int left = 0;
542 mkeyboard->widget->show(); 542 int top = mapToGlobal( QPoint() ).y() - height;
543 } else { 543
544 mkeyboard->widget->hide(); 544 if ( inputWidgetStyle & QWidget::WStyle_DialogBorder )
545 {
546 qDebug( "InputMethods: reading geometry." );
547 Config cfg( "Launcher" );
548 cfg.setGroup( "InputMethods" );
549 int l = cfg.readNumEntry( "absX", -1 );
550 int t = cfg.readNumEntry( "absY", -1 );
551 int w = cfg.readNumEntry( "absWidth", -1 );
552 int h = cfg.readNumEntry( "absHeight", -1 );
553
554 if ( l > -1 && t > -1 && w > -1 && h > -1 )
555 {
556 qDebug( "InputMethods: config values ( %d, %d, %d, %d ) are ok.", l, t, w, h );
557 left = l;
558 top = t;
559 width = w;
560 height = h;
561 }
562 else
563 {
564 qDebug( "InputMethods: config values are new or not ok." );
565 }
566 }
567 else
568 {
569 qDebug( "InputMethods: no floating selected." );
570 }
571 mkeyboard->widget->resize( width, height );
572 mkeyboard->widget->move( left, top );
573 mkeyboard->widget->show();
574 mkeyboard->widget->installEventFilter( this );
575 }
576 else
577 {
578 if ( inputWidgetStyle & QWidget::WStyle_DialogBorder )
579 {
580 QPoint pos = mkeyboard->widget->pos();
581 QSize siz = mkeyboard->widget->size();
582 qDebug( "InputMethods: saving geometry." );
583 Config cfg( "Launcher" );
584 cfg.setGroup( "InputMethods" );
585 cfg.writeEntry( "absX", pos.x() );
586 cfg.writeEntry( "absY", pos.y() );
587 cfg.writeEntry( "absWidth", siz.width() );
588 cfg.writeEntry( "absHeight", siz.height() );
589 cfg.write();
590 mkeyboard->widget->hide();
591 mkeyboard->widget->removeEventFilter( this );
592 }
545 } 593 }
546 594
547 emit inputToggled( on ); 595 emit inputToggled( on );
548} 596}
549 597
550bool InputMethods::shown() const 598bool InputMethods::shown() const
@@ -561,6 +609,18 @@ QString InputMethods::currentShown() const
561void InputMethods::sendKey( ushort unicode, ushort scancode, ushort mod, bool press, bool repeat ) 609void InputMethods::sendKey( ushort unicode, ushort scancode, ushort mod, bool press, bool repeat )
562{ 610{
563#if defined(Q_WS_QWS) 611#if defined(Q_WS_QWS)
564 QWSServer::sendKeyEvent( unicode, scancode, mod, press, repeat ); 612 QWSServer::sendKeyEvent( unicode, scancode, mod, press, repeat );
565#endif 613#endif
566} 614}
615
616bool InputMethods::eventFilter( QObject* o, QEvent* e )
617{
618 if ( e->type() == QEvent::Close )
619 {
620 ( (QCloseEvent*) e )->ignore();
621 showKbd( false );
622 kbdButton->setOn( false );
623 return true;
624 }
625 return false;
626}
diff --git a/core/launcher/inputmethods.h b/core/launcher/inputmethods.h
index 246661a..55ac020 100644
--- a/core/launcher/inputmethods.h
+++ b/core/launcher/inputmethods.h
@@ -70,12 +70,13 @@ public:
70 QString currentShown() const; // name of interface 70 QString currentShown() const; // name of interface
71 void showInputMethod(const QString& id); 71 void showInputMethod(const QString& id);
72 void showInputMethod(); 72 void showInputMethod();
73 void hideInputMethod(); 73 void hideInputMethod();
74 void unloadInputMethods(); 74 void unloadInputMethods();
75 void loadInputMethods(); 75 void loadInputMethods();
76 virtual bool eventFilter( QObject *, QEvent * );
76 77
77signals: 78signals:
78 void inputToggled( bool on ); 79 void inputToggled( bool on );
79 80
80private slots: 81private slots:
81 void chooseKbd(); 82 void chooseKbd();