KPopupMenu patch

Aaron J. Seigo aseigo at
Tue Dec 31 00:00:06 GMT 2002

Hash: SHA1


While working on another project I needed to modify KPopupMenu a bit, 
including nicer titles and context menus. I implemented the needed changes 
via a subclass of KPopupMenu. The attatched patch merges these changes into 

The context menu handling allows the application developer to define a context 
menu for a given menu by calling the QPopupMenu* contextMenu() method and 
filling that menu with the appropriate items. By connecting to the void 
aboutToShowContextMenu(KPopupMenu* menu, int menuItem, QPopupMenu* ctxMenu) 
signal, the application can fill the context menu on demand. By connecting to 
the context menu's activated signal and using the static KPopupMenu* 
contextMenuFocus() and int contextMenuFocusItem() methods to retrieve the 
menu and menu item the context menu was operating on, the application can 
take the appropriate actions. This approach also allows using a single slot 
to provide a common contextual functionality to many menus in the same 
application while keeping memory usage down. 

The cost in terms of processing is virtually nill, especially when a context 
menu has not been defined. The cost in terms of memory for an application is 
(9 + (4 * KPopupMenu Instances)) bytes plus whatever context menus are 
defined at run time, if any.

The second enhancement is in the handling of popup menu titles. Currently, 
they are drawn by a static bit of drawing code in the KPopupMenuTitle class. 
They do not follow the style settings and so look out of place. They do allow 
theming, although there is no GUI (that I know of?) to control those options 
and none of the applications in KDE's CVS takes advantage of these theming 
capability according to In this above patch, titles are now 
drawn in the style of a toolbar. Three snapshots showing the old and the new 
titles can be seen at the bottom of the page at:

The gains are quicker processing, a more consistent look, and the ability to 
remove 4 QColor, one KPixmap, one boolean and one KPixmapEffect::GradientType 
member in KDE4. There are also some code clean ups, such as using KMAX and 
kdWarning instead of their Qt equivalents.

I'd like to commit this for 3.2 if people are cool with the changes.

Hrm... speaking of which, I just realized I didn't mark the new methods as 
being new in 3.2. I'll do that before committing, of course...

- -- 
Aaron J. Seigo
GPG Fingerprint: 8B8B 2209 0C6F 7C47 B1EA  EE75 D6B7 2EB1 A7F1 DB43

"Everything should be made as simple as possible, but not simpler"
    - Albert Einstein
Version: GnuPG v1.0.7 (GNU/Linux)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: kpopupmenu_with_rmb.diff
Type: text/x-diff
Size: 14230 bytes
Desc: not available
URL: <>

More information about the kde-core-devel mailing list