From: Karai C. <ck...@us...> - 2007-02-03 08:42:22
|
Update of /cvsroot/krusader/krusader_kde3/krusader/KViewer In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv4738/krusader_kde3/krusader/KViewer Modified Files: krviewer.cpp krviewer.h Log Message: FIXED: Esc don't work in KrViewer on SVG files Index: krviewer.cpp =================================================================== RCS file: /cvsroot/krusader/krusader_kde3/krusader/KViewer/krviewer.cpp,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** krviewer.cpp 26 Jan 2007 12:59:26 -0000 1.59 --- krviewer.cpp 3 Feb 2007 08:42:15 -0000 1.60 *************** *** 54,58 **** KrViewer::KrViewer( QWidget *parent, const char *name ) : ! KParts::MainWindow( parent, name ), manager( this, this ), tabBar( this ), returnFocusTo( 0 ), returnFocusTab( 0 ) { //setWFlags(WType_TopLevel | WDestructiveClose); --- 54,59 ---- KrViewer::KrViewer( QWidget *parent, const char *name ) : ! KParts::MainWindow( parent, name ), manager( this, this ), tabBar( this ), returnFocusTo( 0 ), returnFocusTab( 0 ), ! reservedKeys(), reservedKeyIDs() { //setWFlags(WType_TopLevel | WDestructiveClose); *************** *** 98,103 **** viewerMenu->insertItem( copyAction->text(), this, SLOT( copy() ), copyAction->shortcut() ); viewerMenu->insertSeparator(); ! viewerMenu->insertItem( i18n( "&Close current tab" ), this, SLOT( tabCloseRequest() ), Key_Escape ); ! viewerMenu->insertItem( i18n( "&Quit" ), this, SLOT( close() ), CTRL + Key_Q ); //toolBar() ->insertLined("Edit:",1,"",this,"",true ,i18n("Enter an URL to edit and press enter")); --- 99,104 ---- viewerMenu->insertItem( copyAction->text(), this, SLOT( copy() ), copyAction->shortcut() ); viewerMenu->insertSeparator(); ! tabCloseID = viewerMenu->insertItem( i18n( "&Close current tab" ), this, SLOT( tabCloseRequest() ), Key_Escape ); ! closeID = viewerMenu->insertItem( i18n( "&Quit" ), this, SLOT( close() ), CTRL + Key_Q ); //toolBar() ->insertLined("Edit:",1,"",this,"",true ,i18n("Enter an URL to edit and press enter")); *************** *** 137,146 **** --- 138,205 ---- statusBar() ->show(); + // the KParts part may override the viewer shortcuts. We prevent it + // by installing an event filter on the menuBar() and the part + reservedKeys.clear(); + reservedKeyIDs.clear(); + + // getting the key sequences of the viewer menu + for( unsigned w=0; w != viewerMenu->count(); w++ ) + { + int id = viewerMenu->idAt( w ); + QKeySequence sequence = viewerMenu->accel( id ); + if( sequence.count() > 0 ) + { + reservedKeys.push_back( sequence[ 0 ] ); + reservedKeyIDs.push_back( id ); + } + } + // and "fix" the menubar menuBar() ->removeItem( 70 ); menuBar() ->insertItem( i18n( "&KrViewer" ), viewerMenu, 70 ); menuBar() ->show(); + + // filtering out the key events + menuBar() ->installEventFilter( this ); + part->installEventFilter( this ); } + bool KrViewer::eventFilter ( QObject * /* watched */, QEvent * e ) + { + if( e->type() == QEvent::AccelOverride ) + { + QKeyEvent* ke = (QKeyEvent*) e; + if( reservedKeys.contains( ke->key() ) ) + { + ke->accept(); + + int id = reservedKeyIDs[ reservedKeys.findIndex( ke->key() ) ]; + if( id != -1 ) + { + // don't activate the close functions immediately! + // it can cause crash + if( id == tabCloseID ) + QTimer::singleShot( 0, this, SLOT( tabCloseRequest() ) ); + else if( id == closeID ) + QTimer::singleShot( 0, this, SLOT( close() ) ); + else { + int index = viewerMenu->indexOf( id ); + viewerMenu->activateItemAt( index ); + } + } + return true; + } + } + else if( e->type() == QEvent::KeyPress ) + { + QKeyEvent* ke = (QKeyEvent*) e; + if( reservedKeys.contains( ke->key() ) ) + { + ke->accept(); + return true; + } + } + return false; + } void KrViewer::keyPressEvent( QKeyEvent *e ) { switch ( e->key() ) { Index: krviewer.h =================================================================== RCS file: /cvsroot/krusader/krusader_kde3/krusader/KViewer/krviewer.h,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** krviewer.h 26 Jan 2007 12:59:26 -0000 1.28 --- krviewer.h 3 Feb 2007 08:42:15 -0000 1.29 *************** *** 49,53 **** static void edit( KURL url, QWidget * parent ); static void edit( KURL url, Mode mode=Text, int new_window=-1, QWidget * parent = krApp ); ! public slots: --- 49,54 ---- static void edit( KURL url, QWidget * parent ); static void edit( KURL url, Mode mode=Text, int new_window=-1, QWidget * parent = krApp ); ! ! virtual bool eventFilter ( QObject * watched, QEvent * e ); public slots: *************** *** 101,105 **** --- 102,111 ---- KAction *copyAction; + int tabCloseID; + int closeID; + static QPtrList<KrViewer> viewers; // the first viewer is the active one + QValueList<int> reservedKeys; // the reserved key sequences + QValueList<int> reservedKeyIDs; // the IDs of the reserved keys }; |