[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    [Patch] Context menus with KStdAccell (was: CTRL+Y as shortcut for
From:       André_Wöbbeking <Woebbeking () onlinehome ! de>
Date:       2005-07-03 15:37:18
Message-ID: 200507031737.18418.Woebbeking () onlinehome ! de
[Download RAW message or body]

Hi,

can I commit the attached patch? It fixes some kdeui widgets to use 
KStdAccel for the shortcuts in their context menus. So we've
- CTRL+SHIFT+Z for redo AND
- CTRL+A for select all.

Some apps (i.e. KMail) use the deprecated KEdit which even hardcode
CTRL+Y to paste (yank) and CTRL+K to cut (kill) but display CTRL+Y for
redo what is definitely a bug.


Cheers,
André

["accel.diff" (text/x-diff)]

Index: kdelibs/kdeui/ktextbrowser.cpp
===================================================================
--- kdelibs/kdeui/ktextbrowser.cpp	(revision 428743)
+++ kdelibs/kdeui/ktextbrowser.cpp	(working copy)
@@ -21,6 +21,7 @@
 #include <qpopupmenu.h>
 #include <kapplication.h>
 #include <kglobalsettings.h>
+#include <kstdaccel.h>
 #include <ktextbrowser.h>
 #include <kcursor.h>
 #include <kurl.h>
@@ -120,20 +121,31 @@
 
 QPopupMenu *KTextBrowser::createPopupMenu( const QPoint & pos )
 {
-    enum { IdUndo, IdRedo, IdSep1, IdCut, IdCopy, IdPaste, IdClear, IdSep2, IdSelectAll };
-
     QPopupMenu *popup = QTextBrowser::createPopupMenu( pos );
 
-    if ( isReadOnly() )
-      popup->changeItem( popup->idAt(0), SmallIconSet("editcopy"), popup->text( popup->idAt(0) ) );
+    const int id = popup->idAt(0);
+    if ( isReadOnly() ) {
+      enum { IdCopy, IdSelectAll };
+
+      popup->changeItem( id -IdCopy, SmallIconSet("editcopy"), popup->text( id - IdCopy ) );
+      popup->setAccel( KStdAccel::copy(), id - IdCopy );
+      popup->setAccel( KStdAccel::selectAll(), id - IdSelectAll );
+    }
     else {
-      int id = popup->idAt(0);
+      enum { IdUndo, IdRedo, IdSep1, IdCut, IdCopy, IdPaste, IdClear, IdSep2, IdSelectAll };
+
       popup->changeItem( id - IdUndo, SmallIconSet("undo"), popup->text( id - IdUndo) );
       popup->changeItem( id - IdRedo, SmallIconSet("redo"), popup->text( id - IdRedo) );
       popup->changeItem( id - IdCut, SmallIconSet("editcut"), popup->text( id - IdCut) );
       popup->changeItem( id - IdCopy, SmallIconSet("editcopy"), popup->text( id - IdCopy) );
       popup->changeItem( id - IdPaste, SmallIconSet("editpaste"), popup->text( id - IdPaste) );
       popup->changeItem( id - IdClear, SmallIconSet("editclear"), popup->text( id - IdClear) );
+      popup->setAccel( KStdAccel::undo(), id - IdUndo );
+      popup->setAccel( KStdAccel::redo(), id - IdRedo );
+      popup->setAccel( KStdAccel::cut(), id - IdCut );
+      popup->setAccel( KStdAccel::copy(), id - IdCopy );
+      popup->setAccel( KStdAccel::paste(), id - IdPaste );
+      popup->setAccel( KStdAccel::selectAll(), id - IdSelectAll );
     }
 
     return popup;
Index: kdelibs/kdeui/klineedit.cpp
===================================================================
--- kdelibs/kdeui/klineedit.cpp	(revision 428743)
+++ kdelibs/kdeui/klineedit.cpp	(working copy)
@@ -840,13 +840,19 @@
 
     QPopupMenu *popup = QLineEdit::createPopupMenu();
 
-      int id = popup->idAt(0);
-      popup->changeItem( id - IdUndo, SmallIconSet("undo"), popup->text( id - IdUndo) );
-      popup->changeItem( id - IdRedo, SmallIconSet("redo"), popup->text( id - IdRedo) );
-      popup->changeItem( id - IdCut, SmallIconSet("editcut"), popup->text( id - IdCut) );
-      popup->changeItem( id - IdCopy, SmallIconSet("editcopy"), popup->text( id - IdCopy) );
-      popup->changeItem( id - IdPaste, SmallIconSet("editpaste"), popup->text( id - IdPaste) );
-      popup->changeItem( id - IdClear, SmallIconSet("editclear"), popup->text( id - IdClear) );
+    const int id = popup->idAt(0);
+    popup->changeItem( id - IdUndo, SmallIconSet("undo"), popup->text( id - IdUndo) );
+    popup->changeItem( id - IdRedo, SmallIconSet("redo"), popup->text( id - IdRedo) );
+    popup->changeItem( id - IdCut, SmallIconSet("editcut"), popup->text( id - IdCut) );
+    popup->changeItem( id - IdCopy, SmallIconSet("editcopy"), popup->text( id - IdCopy) );
+    popup->changeItem( id - IdPaste, SmallIconSet("editpaste"), popup->text( id - IdPaste) );
+    popup->changeItem( id - IdClear, SmallIconSet("editclear"), popup->text( id - IdClear) );
+    popup->setAccel( KStdAccel::undo(), id - IdUndo );
+    popup->setAccel( KStdAccel::redo(), id - IdRedo );
+    popup->setAccel( KStdAccel::cut(), id - IdCut );
+    popup->setAccel( KStdAccel::copy(), id - IdCopy );
+    popup->setAccel( KStdAccel::paste(), id - IdPaste );
+    popup->setAccel( KStdAccel::selectAll(), id - IdSelectAll );
 
     // If a completion object is present and the input
     // widget is not read-only, show the Text Completion
Index: kdelibs/kdeui/ktextedit.cpp
===================================================================
--- kdelibs/kdeui/ktextedit.cpp	(revision 428743)
+++ kdelibs/kdeui/ktextedit.cpp	(working copy)
@@ -212,21 +212,32 @@
 
 QPopupMenu *KTextEdit::createPopupMenu( const QPoint &pos )
 {
-    enum { IdUndo, IdRedo, IdSep1, IdCut, IdCopy, IdPaste, IdClear, IdSep2, IdSelectAll };
-
     QPopupMenu *menu = QTextEdit::createPopupMenu( pos );
 
-    if ( isReadOnly() )
-      menu->changeItem( menu->idAt(0), SmallIconSet("editcopy"), menu->text( menu->idAt(0) ) );
+    int id = menu->idAt(0);
+    if ( isReadOnly() ) {
+        enum { IdCopy, IdSelectAll };
+
+        menu->changeItem( id -IdCopy, SmallIconSet("editcopy"), menu->text( menu->idAt(0) ) );
+        menu->setAccel( KStdAccel::copy(), id - IdCopy );
+        menu->setAccel( KStdAccel::selectAll(), id - IdSelectAll );
+    }
     else {
-      int id = menu->idAt(0);
-      menu->changeItem( id - IdUndo, SmallIconSet("undo"), menu->text( id - IdUndo) );
-      menu->changeItem( id - IdRedo, SmallIconSet("redo"), menu->text( id - IdRedo) );
-      menu->changeItem( id - IdCut, SmallIconSet("editcut"), menu->text( id - IdCut) );
-      menu->changeItem( id - IdCopy, SmallIconSet("editcopy"), menu->text( id - IdCopy) );
-      menu->changeItem( id - IdPaste, SmallIconSet("editpaste"), menu->text( id - IdPaste) );
-      menu->changeItem( id - IdClear, SmallIconSet("editclear"), menu->text( id - IdClear) );
+        enum { IdUndo, IdRedo, IdSep1, IdCut, IdCopy, IdPaste, IdClear, IdSep2, IdSelectAll };
 
+        menu->changeItem( id - IdUndo, SmallIconSet("undo"), menu->text( id - IdUndo) );
+        menu->changeItem( id - IdRedo, SmallIconSet("redo"), menu->text( id - IdRedo) );
+        menu->changeItem( id - IdCut, SmallIconSet("editcut"), menu->text( id - IdCut) );
+        menu->changeItem( id - IdCopy, SmallIconSet("editcopy"), menu->text( id - IdCopy) );
+        menu->changeItem( id - IdPaste, SmallIconSet("editpaste"), menu->text( id - IdPaste) );
+        menu->changeItem( id - IdClear, SmallIconSet("editclear"), menu->text( id - IdClear) );
+        menu->setAccel( KStdAccel::undo(), id - IdUndo );
+        menu->setAccel( KStdAccel::redo(), id - IdRedo );
+        menu->setAccel( KStdAccel::cut(), id - IdCut );
+        menu->setAccel( KStdAccel::copy(), id - IdCopy );
+        menu->setAccel( KStdAccel::paste(), id - IdPaste );
+        menu->setAccel( KStdAccel::selectAll(), id - IdSelectAll );
+
         menu->insertSeparator();
         id = menu->insertItem( SmallIconSet( "spellcheck" ), i18n( "Check Spelling..." ),
                                    this, SLOT( checkSpelling() ) );
Index: kdelibs/kdeui/keditcl2.cpp
===================================================================
--- kdelibs/kdeui/keditcl2.cpp	(revision 428743)
+++ kdelibs/kdeui/keditcl2.cpp	(working copy)
@@ -39,6 +39,7 @@
 #include <klocale.h>
 #include <kdebug.h>
 #include <kiconloader.h>
+#include <kstdaccel.h>
 
 #include "keditcl.h"
 
@@ -1107,20 +1108,31 @@
 
 QPopupMenu *KEdit::createPopupMenu( const QPoint& pos )
 {
-    enum { IdUndo, IdRedo, IdSep1, IdCut, IdCopy, IdPaste, IdClear, IdSep2, IdSelectAll };
+    QPopupMenu *menu = QMultiLineEdit::createPopupMenu( pos );
 
-    QPopupMenu *menu = QMultiLineEdit::createPopupMenu( pos );
-    
-    if ( isReadOnly() )
-      menu->changeItem( menu->idAt(0), SmallIconSet("editcopy"), menu->text( menu->idAt(0) ) );
+    const int id = menu->idAt(0);
+    if ( isReadOnly() ) {
+        enum { IdCopy, IdSelectAll };
+
+        menu->changeItem( id - IdCopy, SmallIconSet("editcopy"), menu->text( id - IdCopy) );
+        menu->setAccel( KStdAccel::copy(), id - IdCopy );
+        menu->setAccel( KStdAccel::selectAll(), id - IdSelectAll );
+    }
     else {
-      int id = menu->idAt(0);
-      menu->changeItem( id - IdUndo, SmallIconSet("undo"), menu->text( id - IdUndo) );
-      menu->changeItem( id - IdRedo, SmallIconSet("redo"), menu->text( id - IdRedo) );
-      menu->changeItem( id - IdCut, SmallIconSet("editcut"), menu->text( id - IdCut) );
-      menu->changeItem( id - IdCopy, SmallIconSet("editcopy"), menu->text( id - IdCopy) );
-      menu->changeItem( id - IdPaste, SmallIconSet("editpaste"), menu->text( id - IdPaste) );
-      menu->changeItem( id - IdClear, SmallIconSet("editclear"), menu->text( id - IdClear) );
+        enum { IdUndo, IdRedo, IdSep1, IdCut, IdCopy, IdPaste, IdClear, IdSep2, IdSelectAll };
+
+        menu->changeItem( id - IdUndo, SmallIconSet("undo"), menu->text( id - IdUndo) );
+        menu->changeItem( id - IdRedo, SmallIconSet("redo"), menu->text( id - IdRedo) );
+        menu->changeItem( id - IdCut, SmallIconSet("editcut"), menu->text( id - IdCut) );
+        menu->changeItem( id - IdCopy, SmallIconSet("editcopy"), menu->text( id - IdCopy) );
+        menu->changeItem( id - IdPaste, SmallIconSet("editpaste"), menu->text( id - IdPaste) );
+        menu->changeItem( id - IdClear, SmallIconSet("editclear"), menu->text( id - IdClear) );
+        menu->setAccel( KStdAccel::undo(), id - IdUndo );
+        menu->setAccel( KStdAccel::redo(), id - IdRedo );
+        menu->setAccel( KStdAccel::cut(), id - IdCut );
+        menu->setAccel( KStdAccel::copy(), id - IdCopy );
+        menu->setAccel( KStdAccel::paste(), id - IdPaste );
+        menu->setAccel( KStdAccel::selectAll(), id - IdSelectAll );
     }
 
     return menu;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic