Archive for the ‘KDocker’ Category
Posted on August 4th, 2012 by John. Filed under KDocker.
Version 4.6 is now available for direct download.
This release adds a few new features which I hope will be very helpful.
The biggest new feature is really an enhancement to an existing feature. Matching by name now supports using regular expressions (regex). The -e option was added which allows specifying the matching type. Normal substring matching is still supported and is the default. Regex, unix wildcard, wildcard and xml schema 1.1 are additional choices. Matching has been further enhanced with the addition of the -j option to enable case sensitive matching. The -k option was added to all for regex (when specified) to perform minimal matching.
Another new feature is the ability to hide and show a docked application by using the mouse scroll wheel. When scrolling over the docked icon in the system tray mouse wheel up will show and mouse wheel down will hide.
Finally, the help options are now wrapped at 79 characters. This is a purely aesthetic change and is intended to make the help text easier to read.
Posted on June 23rd, 2012 by John. Filed under KDocker.
Let me start of by saying that KDocker is not dead and I’m not abandoning it. The past few releases have had minimal changes. This is mainly because I believe KDocker is pretty must feature complete at this point. It docks apps and does a pretty good job doing so. The past few releases have been small (very small) maintenance releases.
For a while I was worried about the relevancy of an application like KDocker. Gnome 3 and Unity attempted to drastically change the desktop metaphor. When both projects were announced and initially released it looked like an application to dock other applications was no longer necessary. This doesn’t seem to be the case in Unity at least. KDE appears to be sicking to the classic desktop metaphor and it doesn’t look like any other desktop environments are following in Gnome 3 and Unity’s foot steps. So KDocker looks like it will be useful for years to come.
One of the biggest problems of developing an open source project is knowing who is using it and how it’s being used. Any small change can potentially have a drastic and unforeseen impact. This hasn’t stopped me from making changes in the past but I at least want to state my intentions to give people a chance to comment. There are two major (somewhat) changes I’ve been thinking about making for quite some time now.
Currently KDocker uses the QtSingleApplication solution to ensure only one instance of KDocker is running. The solution handles checking if KDocker is running and if it is the solution messages the running instance to preform whatever action the user requested. I’ve been thinking about replacing the solution with DBus. The drawback are KDocker would depend on DBus and possibily some type of security issue. KDocker can be used to launch other applications so I would need to look into this further. The advantages of DBus are: it would reduce complexity, it should fix a race condition that can cause two instance of KDocker to be running, and it would allow other applications to message KDocker. The big question is how many people are using KDocker that do not have DBus installed. Any KDE, Gnome, or Unity users will have DBus but the same cannot be said about some other environments.
The other big change is related to how window title matching happens. The current method is substring matching. I’ve been thinking about supporting regular expressions (regex) as part of the name matching. Qt has a regex engine as part of the API. It is not a Perl compatible regular expression engine (PCRE) but it would be good enough in this case. The disadvantage is increased complexity in name matching. The user would need to worry about using a regex instead of a simple substring. This could be mitigated by doing substring matching then regex matching if substring matching doesn’t find a match. However, this could cause false positives. The advantage is there should be less instances of users having trouble docking certain applications. Especially in cases where there is no common substring in the window title.
Posted on June 5th, 2012 by John. Filed under KDocker.
Small maintenance release. No new features. Just a fix for building with GCC 4.7 and fix the icon for the .desktop file. Get it here.
Posted on May 30th, 2011 by John. Filed under KDocker.
I’ve updated the Ubuntu PPA for KDocker. It now includes the 4.6 release for Lucid, Maveric and Natty. Amd64 and i386 architectures have packages ready to go.
Posted on May 29th, 2011 by John. Filed under KDocker.
Version 4.6 is now available for direct download.
This release focus on fixing two bugs when using KDocker with the KWin window manager. It fixes and issue with windows not restoring when the “iconify when minimized” option is set. There is also a small change in how windows are focused after being restored as KWin often didn’t focus restored windows.
Posted on November 7th, 2010 by John. Filed under KDocker.
Matching by name handling has been simplified in this release. The -y option to force matching by name has been removed. The -n NAME option now works the same as the -n -y combination. Also, name based matching now works whenever -n is used. Previously it would only work when KDocker is used to launch an application. These changes was at user request to make name based matching more intuitive.
Posted on October 17th, 2010 by John. Filed under KDocker.
I’ve updated the Ubuntu PPA for KDocker. 4.4 is now packaged for Ubuntu 10.04 and 10.10. I wasn’t planning on continuing with the PPA but it was requested by a user.
I plan to keep the PPA going for the latest released version and the latest LTS version until Ubuntu decides to include non-borken and up to date (at least the version released months before the Ubuntu release) packages.
Posted on July 17th, 2010 by John. Filed under KDocker.
I’ve released KDocker 4.4 today. It is mostly bug fixes and clean up. However, there is one major change. The feature to dock when the window decorator close button (the x in the upper corner) is clicked has been removed. This feature was introduced in 4.3 and I really like how it. It gives KDocker a feature that no similar application has. However, I was not able to keep it due to a number of issues it introduced.
The dock when closed feature was implemented via XEmbed. Basically I was creating my own window mimicking the window border of the application’s window. I would then remove the border from the application’s window and embed it into my window. Events would be passed from my window into the embedded window. This should work just fine in theory but it didn’t work out so nicely. Embedding caused five issues. The first four are serious and the last is only an annoyance.
The most serious issue was, it broke drag and drop. This looks to be an issue with X itself because I could recreate the problem using Qt and GTK’s embed support as well as writing the embed calls myself using xlib.
Another issue it caused related to support windows. When the main window was embedded it broke the connection between the main window and it’s support windows. So when docking the main window there were issues docking the applications other windows. This is an issue for applications such as XMMS and the Gimp.
Embedding didn’t get along very well with borderless windows. Applications like Chrome and XMMS draw their own window border in place of using the window manager’s decorations. These applications have special handling for moving when clicking and dragging their border. When they are embedded you end up with one of two situations. You can click and drag the window but only in the container window. So instead of moving the window you just move the window’s contents. The other situation is moving via the border doesn’t work at all. In this case resizing doesn’t work either. Oh, and the minimize, maximize, close buttons might not work either. In both cases you can still move the window using alt+left mouse button but this isn’t ideal.
Focus handling with embedded windows didn’t work correctly between different window managers and possibly different versions of Xorg. Some combinations it was fine. Others focus handling only followed the mouse. There were issues with the embedded window never getting focus or only getting focus when using alt+tab to select the window after it was docked.
The only annoying issue that I was okay with having was when undocking a window the window manager (compiz) would cause it to move a little bit. When undocking the position of the container window is recorded, the embedded window is removed from the container and moved to it’s location. Then the container window is destroyed. Compiz didn’t like placing two windows in the exact same place and kept moving the second window down and right by the size of the decoration and frame. This isn’t a very big issue but I really don’t want to have window manager specific work arounds in the code base.
The decision to remove iconify on close wasn’t taken lightly. It was only due to the large number of issues it created. There is not point in using KDocker if it is only going to make docked applications unusable. I have created a branch for iconify on close so I can hopefully get it working properly.
Posted on November 10th, 2009 by John. Filed under KDocker.
Large parts of the application have been restructured. For instance QtSingleApplication is now being used. The major new feature is the window manager decoration close button (X at the top right) can now optionally iconify the window when clicked. The -c command line option has also changed. It no longer creates a borderless window it now disables the iconify behavior of the decoration close button.
Note: There is one known issue with this release. Drag and Drop is partly broken for docked windows.
In my X11 Intercept Window Close Event post I left out one very important piece of information. How to actually close the embedded window after intercepting the WM_DELETE_WINDOW message. The best thing to do is send our own WM_DELETE_WINDOW message to the embedded window. This will keep the embedded window embedded until it actually closes. Meaning any question dialogs that might stop the window from closing (Gedit asking to save for instance) can be answered and it keeps the window embedded if the user decides not to close.
In the previous post we overrode the WM_DELETE_WINDOW message. All we need to do is send it on to the embedded window. This will keep it embedded until it actually closes. Sending a this message entails setting the type to ClinetMessage, message type to the WM_PROTOCOLS Atom, the first l data value to the WM_DELETE_WINDOW Atom, and the second l data value to CurrentTime. The format of course if 32. Send the message to the embedded window and it will try to close.
#include <QX11Info> #include <X11/XLib.h> Display *display = QX11Info::display(); XEvent ev; memset(&ev, 0, sizeof (ev)); ev.xclient.type = ClientMessage; ev.xclient.window = window; ev.xclient.message_type = XInternAtom(display, "WM_PROTOCOLS", true); ev.xclient.format = 32; ev.xclient.data.l = XInternAtom(display, "WM_DELETE_WINDOW", false); ev.xclient.data.l = CurrentTime; XSendEvent(display, window, False, NoEventMask, &ev);
- April 2013 (1)
- March 2013 (1)
- February 2013 (1)
- December 2012 (2)
- October 2012 (1)
- August 2012 (1)
- July 2012 (1)
- June 2012 (2)
- April 2012 (1)
- March 2012 (1)
- February 2012 (3)
- January 2012 (3)
- December 2011 (2)
- November 2011 (1)
- October 2011 (3)
- September 2011 (9)
- August 2011 (15)
- July 2011 (5)
- June 2011 (3)
- May 2011 (4)
- April 2011 (2)
- March 2011 (2)
- February 2011 (4)
- January 2011 (4)
- December 2010 (2)
- November 2010 (1)
- October 2010 (1)
- August 2010 (3)
- July 2010 (4)
- June 2010 (1)
- May 2010 (2)
- March 2010 (1)
- January 2010 (8)
- December 2009 (5)
- November 2009 (6)
- October 2009 (4)
- September 2009 (2)
- August 2009 (6)
- July 2009 (6)
- June 2009 (4)
- May 2009 (6)
- April 2009 (4)
- March 2009 (2)
- February 2009 (4)
- January 2009 (4)
- December 2008 (7)
- November 2008 (2)