Issue 101
9th March 2008 by Danny AllenThis Week...
Qt includes its own OpenGL module, so why is KGLLib better? Qt's module is quite limited, as it only provides very basic things. It also doesn't have an object-oriented design, for example there is no "Texture" class which would make some operations easier. Instead, you will need to use OpenGL texture ID's.
KGLLib is divided into two big parts: "core" and "extras". Core includes classes which are useful to a wide range of applications. Examples of this include Texture and Program classes. Core classes are also more stable and complete, having already reached some level of maturity. Extras, on the other hand, also includes parts which are interesting only to a few applications or which are still under heavy development, and therefore we cannot guarantee future binary or source compatibility.
KGLLib is built with extensibility in mind. The existing classes should provide building blocks on top of which additional (sometimes application-dependent) functionality can be developed. Those extended parts could then be contributed back into the KGLLib extras library, so that it could be used by other interested parties. KGLLib depends on Qt, Eigen and GLEW. Probably all the readers already know what Qt is! Eigen is an excellent lightweight library for vector and matrix math, already used in quite a few KDE projects. GLEW is an OpenGL extension library, taking care of initializing OpenGL extensions and function pointers. Together they form a good basis for any OpenGL application.
KGLLib lives in KDE SVN at /trunk/playground/libs/kgllib/. It also has some examples to demonstrate how to use the API to build smaller OpenGL applications. For now, the API documentation for KGLLib can be found at http://freehackers.org/~rivo/kgllib/html/. I'm hoping that KGLLib will become a standard for KDE OpenGL applications. KWin will probably start using it instead of its own little internal OpenGL library. KGLLib is also using some code from the Avogadro project, and it is possible that they'll start using KGLLib after it matures some more.
As a sidenote, I'm looking for a *Cool* name for KGLLib, so if you've got a candidate, let me know!
At first, we would only deal with the list of subscriptions: adding the new feeds, updating the existing feeds (the name and the category for example) and removing (optionally) the feeds that are not in the source. But in the future, it would be interesting to mark the articles as read or at least to mark an article as important if it is present in the other reader. We began the work with Google Reader because the Google API is really simple, but it would be obviously be nice to deal with other readers.
At mid-term, something like this should be based on Akonadi, but as a version of Akregator based on Akonadi won't be released before KDE-PIM 4.2, a simple synchronization of the feed list (as opposed to a full sync, including items/item states) could be implemented on the current codebase and would already be available for KDE 4.1.
From a technical perspective, there is not a lot to deal with. All aggregators include more or less the same set of features. There can be some differences in the vocabulary (for example Google calls "starred" something others would call "important") but that's not a problem. The main difference we have seen so far is the feed hierachy: for example Google uses labels and Akregator uses folders. That's a difference but in such cases the only thing that we need is to agree on a simple mapping rule between both systems.
Statistics
Commits | 2412 by 226 developers, 4864 lines modified, 1194 new files |
Open Bugs | 16175 |
Open Wishes | 13763 |
Bugs Opened | 321 in the last 7 days |
Bugs Closed | 297 in the last 7 days |
Commit Summary
Module | Commits |
/trunk/KDE |
342
|
/trunk/l10n-kde4 |
262
|
/branches/stable |
145
|
/trunk/extragear |
114
|
/branches/KDE |
97
|
/trunk/playground |
82
|
/trunk/kdesupport |
57
|
/branches/work |
36
|
/trunk/www |
34
|
/trunk/koffice |
34
|
Lines | Developer | Commits |
243
|
Gilles Caulier |
105
|
152
|
Dan Meltzer |
55
|
54
|
Yiwen Mao |
54
|
50
|
Chusslove Illich |
50
|
111
|
David Faure |
42
|
99
|
Allen Winter |
39
|
59
|
Sebastian Sauer |
33
|
57
|
Sebastian Trueg |
32
|
31
|
Sergiu Bivol |
31
|
36
|
Christian Ehrlicher |
29
|
Internationalization (i18n) Status
Language | Percentage Complete |
Portuguese (pt) |
100%
|
Greek (el) |
99%
|
Swedish (sv) |
94%
|
Japanese (ja) |
93%
|
German (de) |
90%
|
Dutch (nl) |
89%
|
Polish (pl) |
86%
|
Low Saxon (nds) |
86%
|
Brazilian Portuguese (pt_BR) |
85%
|
Estonian (et) |
85%
|
Bug Killers and Buzz
Person | Bugs Closed |
Peter Rockai |
53
|
Thomas McGuire |
30
|
Pino Toscano |
19
|
Harald Sitter |
17
|
Dan Meltzer |
15
|
Maks Orlovich |
14
|
Luboš Luňák |
12
|
Leonardo Finetti |
11
|
Tristan Hoffmann |
11
|
Peter Penz |
10
|
Program | Buzz |
Amarok |
9815
|
K3B |
4875
|
KMail |
4840
|
Kopete |
3320
|
KDevelop |
2595
|
Plasma |
2489
|
Kaffeine |
2037
|
Kate |
2001
|
Solid |
1873
|
Kontact |
1790
|
Person | Buzz |
David Faure |
2110
|
Stephan Kulow |
1749
|
Aaron J. Seigo |
1390
|
Torsten Rahn |
1367
|
Jonathan Riddell |
1132
|
Laurent Montel |
1030
|
Stephan Binner |
782
|
Thiago Macieira |
668
|
Zack Rusin |
638
|
Adriaan de Groot |
631
|
Commit Countries
Commit Demographics
Sex
Age
Contents
Bug Fixes | Features | Optimization | Security | Other | |
---|---|---|---|---|---|
Accessibility | |||||
Development Tools | [] | [] | |||
Educational | [] | ||||
Graphics | [] | [] | |||
KDE Base | [] | [] | [] | [] | |
KDE-PIM | [] | [] | [] | ||
Office | [] | ||||
Konqueror | |||||
Multimedia | [] | [] | [] | ||
Networking Tools | [] | [] | |||
User Interface | [] | ||||
Utilities | [] | [] | |||
Games | [] | [] | [] | ||
Other | [] | [] |
There are 92 selections this week
Bug Fixes
KDE Base
I keep hitting KConfig bugs while trying to implement filetypes stuff...
This time: do create the parent directory if necessary. Seems canonicalPath returns empty for a non-existing dir.
React to folder being empty or not when the bookmark icon has a "-full" version.
This allows to react to the trash state for instance.
KDE-PIM
Fix the "clean spaces" function in KMail and also fix changing identities - now the signature is properly changed, even if it is a HTML signature.
Changes to KMeditor:
- Add new functions: cleanWhitespace() and replaceSignature(...) + helper functions for those
- Remove some unused virtual functions
- Remove a unused variable
- Small style fixes
- Rename parent to q, as this is the standard
- Small fixes for insertSignature
Changes to KMail:
- Use the new functions of KMeditor and remove own implementations
Changes to KNode
- Follow KMeditor change
Still TODO:
- Move the HTML mode mess completely into KMeditor instead of having 3 different implementations in KMeditor, KMComposeWin and KMCompoerEditor
- Fix the highlighter
Waiting for the server response might be a good idea instead of just assuming the operation faild if the server is too slow.
Now sieve actually works (and thus also the out-of-office reply stuff).
I'm wondering though why this isn't a problem in 3.5, the code is exactly the same there...
Multimedia
Actually.... having to do that for every single service sucks, so lets just fix it for all Meta items that desend from ServiceTrack in one fell swoop!
This should cover all services, perhaps with the exception of last.fm
Games
Set the update timer's interval to 20ms (previously 0).
It keeps Kollision from using 100% cpu.
Features
Development Tools
* CTRL+C copies the seleted item's url into the clipboard
* tooltips show the url
Graphics
New Scan Parameters. These are named sets of scanner settings which be saved and recalled at any time. So, for example, you could define (among others) sets named "Hi-Res Photo" and "Lo-Res Document" with appropriate scan settings, and switch between them with a couple of clicks.
All operations are available from the "Scan - Scan Parameters..." menu, when Kooka is not in gallery mode.
Originally requested as bug/wish 68530.
Kooka:
* More polishing of "Configure Kooka" dialogue
* Don't clear or unload selected image when renamed, bug 68532
* Keyboard shortcuts for Preview (F3) and Scan (F4)
* New files newscanparams.{cpp,h}, scanparamsdialog.{cpp,h}
libkscan:
* Properly expand data buffer if needed in KScanOption::configLine()
- precise selection of edges
- kill without error the current dot process when startting a new one
- rename some methods to avoid lexical hiding warnings
- new message boxes and new whatsthis that were delayed during 4.0 string freeze
- individual attribute changing mechanism
- new signals to inform of the current selection
- compiler warnings removal
libkdcraw from trunk (KDE4) : update internal dcraw to version 8.83. New cameras supported :
- Apple QuickTake 200
- Fuji IS-1
- Sony DSLR-A350
- Pentax K20D
- Nokia N95
- Canon PowerShots A460
- Canon PowerShots A530
- Canon PowerShots A650.
More interaction between Okular and the KDE Text To Speech system:
a) "Speak While Document" action to speak the content of the whole document
b) "Speak Current Page" to just speak the content of the currently shown page
c) "Speak Text" action in the right click menu of the editor-like text selection
(a) also implements KPDF's bug #118872.
digiKam from KDE3 branch : full color scheme theme support everywhere in interface "à la Amarok" (albumgui, lighttable, camera interface, editor, image plugins and kipi-plugins)
A demo is available here: <a href="/issues/2008-03-09/files/fullcolorschemesupport-desserttheme.png">http://digikam3rdparty.free.fr/Screenshots/fullcolorschemesupport-desserttheme.png</a>
KDE Base
* When opening logout dialog from kickoff, an action is already pre-selected. If the user does not do anything, the action will be executed automatically after 60 seconds. i18n stuff reviewed by Chusslove.
* Fix issue with recent Qt 4.4 snapshot: use QPalette for text color instead of HTML
* Fix issue with very long user names: cut them off if they would require more than two lines #157182
* Fix some krazy issues
KRatingPainter is now public API. It allows to paint a graphical representation of a rating using any QPainter as well as determining a rating value from a position in a rating paint rect.
It supports all alignment combinations, RTL layout, custom icons or pixmaps, arbitrary resizing, and convenience features such as spacing, maximum rating change, and static methods for quick usage in most common situations.
The straight forward usecase is in a widget: KRatingWidget. It has nearly the same API as KRatingPainter.
I also wrote a nice little testapp which allows to test all features interactively.
Allow to define new mimetype groups
Now you can also type a part of the mimetype name in the search lineedit. Label and whatsthis adjusted.
Add label in right-side widget to show the name of the mimetype being edited. Not too sure about the wording of that label though.
Pickup JSC storage improvements (work of Darin @ Apple), part 1.
This makes sparse arrays use a hashmap and not the normal property map, which means access to them doesn't require string conversions anymore, making a huge difference on array-heavy benchmarks such as 3d-morph and access-nseive.
Introduce a new class Kross::ScriptingPlugin wich extends KParts::Plugin with aditional logic to load Kross actions in the GUI.
One can create .rc files describing scripting actions that Kross can understand, e.g.:
<KrossScripting>
<collection name="file" text="File">
<script name="dummy_script" text="Dummy Script" comment="Dummy Script" interpreter="python" file="dummy_script.py" />
</collection>
</KrossScripting>
This plugin class will append this information to its XMLGUI, i.e., will create a new action named "Dummy Script" in the "File" menu.
There are to additional slots in this class:
virtual void slotEditScriptActions();
virtual void slotResetScriptActions();
The first one edit or create an user actions file, which will override/extends the default script actions.
The second one deletes the user actions file, which has the effect of falling back to the default script actions (if any)
Later, slotEditScriptActions() function can be improved to offer some kind of visual editor similar to Qt Designer.
Besides the possibility of extending applications by exposing a scripting interface, this will allow to extend the GUI with scripting actions which, IMHO, is a very powerful concept.
This patch adds the ability to Kickoff to set its layout according to the direction the popup is appearing relative to the launcher button, to improve the ergonomics of kickoff when its launcher is not in the standard position.
Assumption 1: The hardcoded tab order defines a desirable priority order
Goal 1: TabBar alignment is perpendicular to direction of mouse travel from launcher to target, to prevent mousing over non-target tabs and potential unnecessary tab switches
Goal 2 the movie: Tabs are ordered by decreasing priority along the mouse travel vector away from the launcher Constraint: The search widget is different to the tabs and the footer is of lowest priority so these should always be situated furthest away from the origin
This gives vertical tabs when Kickoff is used in a vertical panel, and it reorders the tabs so the Favourites tab is always closest to the launcher, etc.
Paint code still needs fixing to paint tabs right when vertical.
Odd glitch when resizing kickoff on a vertical panel with launcher in SW or SE position, causes the menu to slide off the screen - debug to handle this is left in intentionally.
Allow spellcheck highlighting of richtext content.
This essentially reverts commit 667328:
>Spell checking doesn't work with html
inspired by beat wolf's patch on review board, this makes the device notifier behave a lot better on the desktop (still proxy widget issues to work out, but nothing beyond the ordinary) and now dragging between desktop and panel work properly.
it's a slightly easier and more straightforward approach than what was there before (no "isOnDesktop", which really doesn't make a lot of sense unless one assumes that plasma is a desktop, which is not a safe assumption) and once that was straightened out, beat wolf's patch becomes a lot easier to implement straight forward ...
Added window icons support.
Start using local slots for special variables, for now only in ActivationImp.
JSVariableObject is next. When done, this should simplify the allocation picture, making it much easier to do stack allocation..
KDE-PIM
Adding a web interface to ktimetracker. Adding a konsole mode to ktimetracker.
Finally port the following:
- Make it possible to manually insert the signature at the start or at the cursor position
- Make it possible to automatically prepend instead of appending the signature
- Make it possible to disable the signature separator
Based on patch by Scott, many thanks!
Add feature which makes it possible to store all attachments in a certain folder. I can't test it currently due to some bug in Akonadi, but I'll do that later on.
Also I need to add a check for an existing file with that name and a md5 comparisation to see if it is the same file, if not, save it with another name, But at least it is a start.
Killer feature from Eudora from the past for me.
Add a System Tray, it will need to also hold the unread count on top of it and when you hover it I want the subjects of the unread mails, but that's the next step.
By the way, I thought the X was automatically mapped to minimize to systray, need to find out what's standard for KDE4 and how to implement it.
Make the systemtray display the amount of unread messages, needs love from an artist I think.
Add a special role to sort on. This makes it possible to prevent sorting the dates based on the qstring, but on the qdatetime.
iow: now it is grouped by date of the week instead of the actual date.
Office
* introduce an OpenCTL based color space and profile, both of which doesn't do much if at all
* port LMS color space to be based on the not doing much OpenCTL based color space and profile
* move some functions form KoColorSpaceAbstracts to traits (this might have the side effect to allow to use KoColorSpaceAbstracts with channels of different types)
Multimedia
Introduce a nice ugly workaround to allow oneclick playing of neighbour radio/personal radio from the lastfm service.
I cannot figure out the proper way to do it so I'll just add buttons to click to do it automagically :)
Add a set of default, singleton, meta classes that can be used to give meta tracks a valid pointer for any fields which they in reality dont care about.
Also add a default Composer and Year to all Magnatune tracks.
This fixes a number of crashes, especially in the tag dialog.
Now to add this stuff for all the other services
Cumulative updates from 4.4.
- Refactored videowidget into render classes
- Basic support for usage in graphicsview
- Some behavior changes:
- Error state with NormalError now behave as stopped state to allow for some recovering.
- MediaObject goes to PausedState instead of stopped on finish
- Some improved stability
Enable the selection of preferred streaming file type for the Magnatune service. this was mainly prompted by the addition of a new ogg stream by Magnatune, but while I was at it, I also added support for the low bitrate mp3 stream for people on a slow connection.
The gui for this is on the magnatune service settings screen. Ogg is now set as the default as in general mp3 is evil! :-)
NOTE: this requires that the magnatune database is updated or it _WILL_ crash
Also a small general fixes
Add a capability to allow tracks to add custom actions to the context menu, and potentially other places, when they are the currently playing track.
Use this to rip out last.fm specific code in the system tray and actually make "love", "skip" and "ban" options available and work.
Networking Tools
Make it actually work. Also some changes:
- removed support for helper protocols. They don't belong to ioslave - maybe plasma applet
- use hardcoded protocols. Configurability is good but let's not go overboard.
- added fish:// support
- temporarily removed support for multiple domains (default domain is always used) - kdirmodel does not like listing zeroconf://domain/_ftp._tcp/name from inside zeroconf:/_ftp._tcp/
FloatingToolBar inherits now from QToolBar instead of QWidget:
* possibility to add widgets to the toolbar
* all size calculation is done by QToolBar now (-> less code)
Show URL of current session in toolbar.
User Interface
Utilities
Implement signing of multiple files from command line at once
Games
- implement several of the protocol opcodes to enable at least the start of the game
Other
Support most more useful signals now, including signal 0 which is used for checking for existence of a process - we can now expect ESRCH result when there is no process for a given PID.
This is good for and various other unique processes, e.g. for KMail which will no longer display confusing "KMail already seems to be running on another display on this machine." message.
Reviewed by Christian (15 Feb).
* Added support for a comma initializer: mat.block(i,j,2,2) << 1, 2, 3, 4;
If the number of coefficients does not match the matrix size, then an assertion is raised.
No support for xpr on the right side for the moment.
* Added support for assertion checking. This allows to test that an assertion is indeed raised when it should be.
* Fixed a mistake in the CwiseUnary example.
Optimization
KDE Base
- Don't store List* in ExecState, not needed.
- Don't store a copy of argument list in Activations, since its possible use can not outlive the function running, and so a pointer is fine... This clarifies its livetime semantics somewhat.
As a bonus, this is also a ~2% speedup.
Other
Development Tools
This is a GUI start for KAppTemplate. KAppTemplate, in kdesdk, currently generates three KDE 4 different projects templates on the command line, as a bash script. These templates help you starting programming for KDE.
This relook of this utility is based on QWizard. The model/view interface that displays available project templates is done but the project generation is still to be done as well as the GUI which is just started.
Continue porting of Kommander to KDE4:
- restructure the libraries: have one Kommander library, make the standard widgets part of a plugin
- add the new widgets from Kommander 1.3
- fix layouting issue
- fix reading and setting of properties
- fix a bug that cause string properties to be "translated" to empty strings
Depending on your luck, some dialogs may show up and work, but this is still pre-alpha.
Educational
Provide some conceptual information on the new practice interface
* I removed the density from the database. After a long discussion we (BlueObelisk) agreed that it is a compound property and thus does not belong into Kalzium.
Example: Carbon exists at least in three forms: graphite, diamond and buckyballs (Fullerene).
This means I need at least three (3) values for the density as all three forms of carbon are "carbon". The same applies for S, P and many many other elements.
Krazy fixes while waiting for coworkers to come to lunch
Graphics
new digiKam 0.9.4 splashscreen from Michel Pottier
digiKam from trunk : revert to use old FolderView/FolderItem class with TagFilterView/TagFolderView.
Marcel, Using Qt3 coding style with QT4 class work but is not enough flexible. We need to use pure Qt4 Model/View instead to use directly QTreeWidget.
Still in my TODO list.
Note: I have factorized D&D code here and used pure Qt4 D&D implementation.
KDE Base
Dim the screen if kdesu or kdesudo ask for the password for adminstrator mode
moving luna applet from kdereview to extragear.
reworked how shaped windows with svg backgrounds are obtained:
there is a new function PanelSvg::mask() that returns a qbitmap of the areas of the svg with alpha=0 that can be used to create the mask of the window, at the moment used in tooltip and dialog (krunner still to come).
so now windows that uses svg backgrounds should always set PanelSvg::mask() as their own mask, regardless if composite is active or not.In this commit there are also two (identical) svgs for opaque tooltips and dialogs with pixelated rounded borders that looks good without antialiasing (and unlike the previous version they are vector based now).
Enables ScriptEngine's like Apple's Dashboard Widgets or SuperKaramba's to implement containments too.
Right, that means you are now able to write your own Panel or even Desktop using a scripting language :)
Move contacts runner to kdereview as requested by Aaron Seigo.
* make the add widgets widget a bit more sane size (it changed in libplasma)
* make the dashboard go away when the active window changes
* context menu is sensible now with window awareness
move converter to review
don't show the clear button, even if requested, when we don't have enough room inside the line edit to make it useful
tested with: kspread's toolbar font size combo, resizing konqi's location edit by sizing the window, okular's zoom controls and kfiledialog.
works as expected now in all situations.
KDE-PIM
Add the transport and identity to the status bar. And for the advanced users: just click on them to change it ;-)
O how I love make cool features which I'm going to use daily.
Multimedia
Don't allow the lyrics to be editable, we don't implement saving yet so this could only do bad things.
Remove the Engine config dialog.
This is the first step of my plan to make Phonon the only available engine; Everything else is going to be removed.
The reasoning is that I'm convinced we'd anyway do this sooner or later, because noone really wants to maintain the huge mess that xine-engine became, so we should really focus on Phonon.
Put the Internet browser tab right below the Collection tab, to emphasize its importance.
IMHO it's the second most important tab, so this fits.
Rename OSD to "On Screen Display", which is much easier to understand, especially for non-native English speakers.
If anyone can come up with an even better name, I'm open to suggestions.
Here is one that should cause just a little bit of controversy :-)
Add Global tags and personal streams to the tree view in the last.fm service to faicilitate a bit of interface discussion. All streams are playable from here, but as the observant user will notice, there is a slight problem with track names getting updated a little too well...
Also fix a small bug in LastFm::Track that caused global tag track names to show up wrong
Largish changeset that unfortunately had to be all done before it was worth commiting
1. Move all the toolbar code from MainWindow to MainToolbar, as this is where it really belongs
2. No longer use a layout to position items in the toolbar but position them manually. In this case, this is less of a hack than adding invisible items to make things line up. It was alpos needed for bullet point 3.
3. Add a small sub toolbar that only appears when the currently playing track has CurrentTrackActionsCapability. For now it is only used for last.fm tracks, but it makes the "skip", "love" and "ban" actions very easilly available. This should also be usable for many other things.
It is not perfect yet as it needs some work on positioning of the actions if there are more or less than 3, and it really should also have a fade in/out animation.
Networking Tools
Add directory to hold telepathy-qt (as discussed with Allen and on the release-team ML).
Import Telepathy-Qt as seen in SVN rev. 2093 on
<a href="https://tapioca-voip.svn.sf.net/svnroot/tapioca-voip/branches/work/telepathy-qt-autogen">https://tapioca-voip.svn.sf.net/svnroot/tapioca-voip/branches/work/telepathy-qt-autogen</a>
This is a version of Telepathy-Qt that is about 98% generated directly from the Telepathy spec. While currently still incompatible to Decibel this version is where we are heading as the currently used Telepathy-Qt is severly outdated.
I did not import any history as this is the first mostly working version found in the telepathy-qt-autogen branch and it hardly related to the formerly released versions of telepathy-qt.
Cleanup, removed some unuseful things, fixed others ones, fixed some notes, dumped the version.
Lots of work to do to fix the new bugs I found and to give more flexible interface different from wireshark... I've got all in mind I have to find some time to code
Fixed for real the "losting packet from the view": ksniff was closed not cleany cause of the lack of a wait on the KProcess pointer :) ... The more difficult things are always the simpler. It's been enough to add a wait() :) . Great! Just one line to fix it :)
Utilities
Remove kfontdialog and add more specific font actions to the text toolbar:
Font colour, font background colour, font family, font size.
Games
Added new default theme for KSame and renamed the old one as old_theme.svgz.
Other
- booth posters as used at CLT2008, based on templates by ruphy
- embedded screenshots are missing, just roll your own :)