containment-mouse interaction ============================= this project is all about mouse events on desktop containments. currently, each containment offers its own static contextmenu, and a few wheel events are hardcoded in. yuck. I'm going to add plugins to replace the menus and wheel actions, and a nice UI to let the user configure it all (and discover what's there by default - I only found out ctrl+wheel does something by reading the source). these plugins would take priority over the wallpaper; only when no mouse plugin is configured for an event would the wallpaper be given a chance to react to it. this will restore the functionality we had in kde3, and hopefully people will find new things to do with it too. :) I won't be working on anything else this summer (although I'm going to linuxtag and akademy), and you all know me so I'll skip the "about me" part. :) use cases/scenarios ========= * Amy wants the k menu to pop up when she clicks on the desktop, like she had configured it in kde3. so she finds that plugin and adds it on that button. * Ben wants a list of useful applications to pop up when he right-clicks the desktop. on his main activity he configures it to show all applications, like alice. on his work activity, he configures a menu with only the applications he uses for work. * Cory doesn't care about this feature, and ignores it. everything stays the same when he upgrades from 4.3 to 4.4. * Pete likes a minimalist desktop. so minimalist that he's removed all panels and doesn't have any applets on his desktop. he configures plugins to show the application menu and windowlist on left and right click. ui === the UI will offer a way to define what happens on each event (button1, button2, button3 or wheel) with optional modifiers. quick&dirty mockup: http://chani.ccdevnet.org/sshots/soc09-mockup.png plugins ===== button plugins would provide a function to call on mouse-event that takes the mouse position (relative to the screen). wheel plugins would provide a function that also takes the delta, and handle scrolling both up and down. plugins can also provide an optional config UI. a set of useful default plugins would be provided. button plugins: -regular desktop actions: the desktop-specific stuff like lock/logout, the containment actions from libplasma, and the containment's contextActions. this would be configurable to add/remove entries. -kmenu: just the classic kmenu -custom quicklaunch: a customizable list of launchers from the kmenu -windowlist: list of windows on each desktop wheel plugins: -change desktop -change activity -zoom in/out schedule ====== week 1: git-svn setup, create skeleton Plasma::ContextMenu class based on Plasma::Wallpaper week 2: make Containment try to use it, and fallback to the old contextmenu because there's no plugins around week 3: make a dummy plugin and the main config UI week 4: add dummy configuration to the dummy plugin week 5: bugfixing/travel week 6: make the desktop-menu plugin so that I get the old behaviour back week 7: akademy! week 8: make wheel plugins week 9: make kmenu plugin week 10: make desktop-menu plugin configurable week 11: quicklaunch and windowlist plugins week 12: final bugfixing if there are any unexpected problems in the second half of the project (I'll try not to lose my laptop this time) one or more plugins could be cut, but I'd still have a working plugin framework, so other people can implement individual plugins if I get hit by a bus ;) something I just thought of that won't be done this summer, but might be neat: it would be possible to re-use this plugin framework and have something trigger it on a global keyboard shortcut using hte current mouse position. that would probably satisfy the user who wanted to be able to make a plasmoid appear by their mouse at any time... well, that combined with a plugin that shows a plasmoid... :)