
Crystal
Source (link to git-repo or to original if based on someone elses unmodified work):
For 3.x version see:
http://www.kde-look.org/content/show.php/Crystal?content=13969
Main features:
* Uses compositing features of KDE4 for transparency with ability to use the blur plugin
* Supports grouping/tabbing of windows
* Ability to choose the blending colors of buttons as well as title bar and border size
* Right click on minimize button toggles shade mode
* Middle click on minimize button sends window to below
* Double click on program symbol closes window
* Support for button themes. Basic button theme is included, feel free to swamp me with cool themes
* Can show a tooltip for the caption
* Right click on close button can run kdocker, if installed, to minimize the application to the system tray
-- INSTALL ---------------------
Basic Installation (from the console):
- Step 1 (as user)
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr ..
$ make
- Step 3 (as root)
# make install
If you installed crystal while it was running, you would need to restart kwin for the changes to take effect: kwin --replace
--------------------------------
Feedback and patches well appreciated. ;-)
Follow me on GitHub!
https://github.com/shlusiak/kwin-style-crystal
This version of crystal needs KDE 4.9 or higher!
Have fun,
Sascha Hlusiak
2.2.1 (KDE 4.9):
* Fix tabbing after window shading
2.2.0 (KDE 4.9 only):
* Use API for KDE 4.9
2.1.1 (KDE 4.:
* Improved compatibility with KDE 4.8
* Fixed possible glitches without compositing in KDE 4.8
* Draws own shadows
2.1.0:
* Support of KDE's cool window tabbing / grouping feature!!
* Fix working with kdocker >= 4.5, if installed (right click on close button to run)
* Fix glitch of round corners in compositing mode introduced in 2.0.6. Reduced options of round corners to 1 for code simplification.
2.0.6:
* Use Blur effect for transparent borders when kwin-plugin is enabled (needs KDE >= 4.6.0)
* Updated aqua button theme
* New button theme: glass-pill
* Fix some compile warnings
2.0.5:
* Use KDecoration again instead of KDecorationUnstable; hopefully fixes compile problems
* Remove some probably unnecessary redrawing
2.0.4:
* Built-in logos for various distros
* Some experimental transparency support (requires KDE4 compositing)
* Fix not showing shadow in compositing mode (whiteliste abilities now, not blacklist them; thanks to Zarin for pointing that out)
2.0.3:
* Possibility to stretch or scale overlay images
* Fix showing logo on active window only
* Disable caption shadow for inactive windows so it's easier to read
* Work around "hollow" border glitches when using half-maximized states
* Added backported Kubuntu-Hardy button theme (thanks to Kubuntu team)
* Little nicer default settings
2.0.2:
* Adding back button images in configuration dialog
* Set tooltip of decoration to caption right from the beginning
* Creating and using embedtool again to create tiles.h
2.0.1:
* Scrolling through open windows works again (if option is enabled)
* Link to this page in the info dialog
* Minimizing to systray using kdocker works again
2.0.0:
* Initial release of KDE 4.x port
Ratings & Comments
152 Comments
Any chance you will port this to Plasma 5? I still think it's the best out there, and I miss it.
+ here... Plasma 5 looks really cool but they can't touch the subtlety and refinement of the crystel window decoration. At all.
I'm a fan of this decoration, but since updating Kubuntu to Version 15.04 it's gone and compiling the source didn't work. Do you plan to migrate this to Plasma 5 ?
I was looking for something similar to Aero that Windows has for some time and found this gem. Downloaded it, compiled and installed it as soon as I could. Really quality work done here, thank you and happy birthday!
I installed kde-style-crystal on Linux Mint 15 KDE 4.11, it had to remove kde-window-manager which I didn't notice. A couple of days later my system is unusable (I just hibernate instead of rebooting most of the time...) I messed around a lot before finding out that kde-window-manager was missing. It seems to me it's probably an error in setting the dependencies...
Crystal is by far my favorite window decoration. However, ever since about KDE 4.8 I've noticed an odd issue when using it with the proprietary nVidia driver. Essentially, after opening several application windows, when I then maximize one of the windows (by double-clicking the titlebar) it takes about 2 seconds before it responds and then maximizes. I've experimented and I can say for certain that the issue only happens with the proprietary nVidia driver. I'm currently running version 310.44 of the nVidia driver, KDE 4.10.2, x11-server-xorg 1.13.3 and version 3.8.6 of the kernel. I've never seen the issue with any of the following scenarios: a) The open source Nouveau driver b) The ATI fglrx driver (on my Radeon machines) c) KDE effects turned off d) Other window decorations (w/proprietary nVidia driver and effects enabled) I tend to think that it might have something to do with how it draws it's window shadows, but that's just my gut feeling.
This is a really beautiful window decoration! I love how it will take on from your selected color theme. I did find that I had to install the kde-workspace dev package as well as cmake to compile it as it doesn't come installed in Linux Mint 14 KDE (upgraded to KDE 4.10). But after those installs it compiled fine and works beautifully. Thank you!
Hi, i would like to add my own button style. How to do this?
Anyone notice the bug where you use the WD tabbing feature and you add two windows to a tabbed group. You can click between the tabs just fine on the Window Decoration titlebar. However if you shade to titlebar then unshade, then try to switch between the tabs -> you can only go to one more tab "click". Every subsequent time you try to click afterwards it wont work (until you shade/unshade again - and then it'll only work for one more click). This bug isnt present in Oxygen WD. Those are the only two WD I've used that support the window tabbing.. I love Crystal and have used it on and off for many years. I hope they can fix this problem. Is there anywhere I can file a bug report?
Thank you for the detailled information. It helped me track it down and fix the weird tabbing issues after a window has been shaded/unshaded. Please try crystal-2.2.1. Sorry I had so little time for crystal, lately. :-(
awesome! it works great! thank you very much!
I compiled version 2.2 on a Linux Mint 13 system, running KDE 4.9.4. There are some nasty graphical glitches: there's a curved white line in the title bar and the windows are surrounded by white lines. The compilation didn't produce any errors though. What can I do to get crystal running?
I did some experimenting and I've discovered that those graphical mistakes only occur when I choose anything else then "no outline" for the background settings. When I choose "no outline" everything looks like it is supposed to do.
I like this decoration. Which version is the latest that will work on KDE 4.5 and where can I get it? Thanks in advance! (P.S.: I know that this is a very old version of KDE, but I can't update that machine! And yet I'd like to use this window decoration.)
I've compiled the version with KDE 4.9.0, but I can't see it in my decoration list. It compiles without any error. The same behavior with Ubuntu 12.04 and Fedora 17.
The build folders are empty in the archive??
Yes, it's just a prepared folder to build, so my instructions can be followed blindly. ;-) Did you try the cmake .. command? That'll populy the build folder with Makefiles.
V2.2.0 in KDE 4.9 RC1 [ 53%] Building CXX object client/CMakeFiles/kwin3_crystal.dir/crystalclient.o /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp: En la función miembro ‘bool CrystalClient::mouseReleaseEvent(QMouseEvent*)’: /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:538:27: error: ‘tabId’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:538:28: error: ‘setCurrentTab’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp: En la función miembro ‘void CrystalClient::paintTab(QPainter&, const QRect&, int, bool, bool)’: /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:644:42: error: no se encontró una función coincidente para la llamada a ‘CrystalClient::caption(int&)’ /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:644:42: nota: el candidato es: In file included from /home/mcder3/src/crystal-2.2.0/client/crystalfactory.h:27:0, from /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:44: /usr/include/kdecoration.h:549:13: nota: QString KDecoration::caption() const /usr/include/kdecoration.h:549:13: nota: el candidato espera 0 argumentos, se proporcionaron 1 /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:652:65: error: no se encontró una función coincidente para la llamada a ‘CrystalClient::caption(int&)’ /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:652:65: nota: el candidato es: In file included from /home/mcder3/src/crystal-2.2.0/client/crystalfactory.h:27:0, from /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:44: /usr/include/kdecoration.h:549:13: nota: QString KDecoration::caption() const /usr/include/kdecoration.h:549:13: nota: el candidato espera 0 argumentos, se proporcionaron 1 /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:659:15: error: no se encontró una función coincidente para la llamada a ‘CrystalClient::caption(int&)’ /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:659:15: nota: el candidato es: In file included from /home/mcder3/src/crystal-2.2.0/client/crystalfactory.h:27:0, from /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:44: /usr/include/kdecoration.h:549:13: nota: QString KDecoration::caption() const /usr/include/kdecoration.h:549:13: nota: el candidato espera 0 argumentos, se proporcionaron 1 /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp: En la función miembro ‘void CrystalClient::paint(QPainter&)’: /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:872:23: error: ‘class CrystalClient’ no tiene un miembro llamado ‘tabCount’ /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:916:25: error: ‘tabId’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:916:43: error: ‘currentTabId’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:927:20: error: ‘class CrystalClient’ no tiene un miembro llamado ‘tabCount’ /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp: En la función miembro ‘bool CrystalClient::mouseMoveEvent(QMouseEvent*)’: /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1069:82: error: ‘TabDragOp’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1078:40: error: ‘tabDragMimeType’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1078:73: error: ‘tabId’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1084:62: error: ‘tabCount’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1114:35: error: ‘untab’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp: En la función miembro ‘bool CrystalClient::dragEnterEvent(QDragEnterEvent*)’: /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1265:68: error: ‘tabDragMimeType’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp: En la función miembro ‘bool CrystalClient::dropEvent(QDropEvent*)’: /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1284:46: error: ‘tabDragMimeType’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1292:26: error: ‘tabCount’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1293:32: error: ‘tabId’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1293:57: error: ‘tab_A_behind_B’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1295:32: error: ‘tabId’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1295:47: error: ‘tab_A_before_B’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1302:45: error: ‘tabCount’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1302:49: error: ‘tabId’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1302:51: error: ‘tab_A_behind_B’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1304:40: error: ‘tabId’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1304:42: error: ‘tab_A_before_B’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp: En la función miembro ‘bool CrystalClient::dragMoveEvent(QDragMoveEvent*)’: /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1316:49: error: ‘tabDragMimeType’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1322:16: error: ‘tabCount’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1332:25: error: ‘tabCount’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1333:36: error: ‘tabId’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1333:60: error: ‘tab_A_behind_B’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1335:36: error: ‘tabId’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1335:51: error: ‘tab_A_before_B’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1343:25: error: ‘tabCount’ no se declaró en este ámbito /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp: En la función miembro ‘int CrystalClient::itemClicked(const QPoint&, bool)’: /home/mcder3/src/crystal-2.2.0/client/crystalclient.cpp:1364:22: error: ‘tabCount’ no se declaró en este ámbito make[2]: *** [client/CMakeFiles/kwin3_crystal.dir/crystalclient.o] Error 1 make[1]: *** [client/CMakeFiles/kwin3_crystal.dir/all] Error 2 make: *** [all] Error 2
Do you also have the latest -devel package installed, which bring the kwin header files? what distribution are you using? Maybe the installed binary and the develop packages do not match.
I use archlinux and I have installed the package "base-devel" and required to compile an application for KDE I`m using KDE RC1 that are in the repositories [kde-unstable]
KDE Version: 4.8.95
Can you check the package containing "kdecoration.h"? I suspect it still being from 4.8 instead of 4.9rc.
you are correct [mcder3@mcder3-host ~]$ sudo pacman -Qo /usr/include/kdecoration.h Contraseña: /usr/include/kdecoration.h es propiedad de kdebase-workspace 4.8.4-2 Now if I can compile thanks for your help :-)
But one thing i would like to see: Windowtitle in full widh centered:)
v2.10 fails to build under KDE 4.8.90 (4.9 Beta 2), with... Scanning dependencies of target kwin3_crystal [ 33%] Building CXX object client/CMakeFiles/kwin3_crystal.dir/kwin3_crystal_automoc.o In file included from /home/riz/develop/kwin_crystal/crystal-2.1.0/build/client/../../client/crystalbutton.h:27:0, from /home/riz/develop/kwin_crystal/crystal-2.1.0/build/client/moc_crystalbutton.cpp:10, from /home/riz/develop/kwin_crystal/crystal-2.1.0/build/client/kwin3_crystal_automoc.cpp:4: /home/riz/develop/kwin_crystal/crystal-2.1.0/client/crystalclient.h:89:54: error: ‘ClientGroupItem’ has not been declared make[2]: *** [client/CMakeFiles/kwin3_crystal.dir/kwin3_crystal_automoc.o] Error 1 make[1]: *** [client/CMakeFiles/kwin3_crystal.dir/all] Error 2 make: *** [all] Error 2