KDesktop transparency support

Various KDE 1.-4. Improvements

Source i (link to git-repo or to original if based on someone elses unmodified work):

Add the source-code for this project on opencode.net

0
Become a Fan
5.0

Available as/for:
Description:
This patch adds support for real transparency to kdesktop. It adds two new
composite manager related features. To activate the features kdesktop has to
be started with the "--bg-transparency" option.

The first one allows you to change the opacity of the background image. This
works currently with the beryl transparent cube and will also work with
compiz once the transparent cube gets applied. To activate the feature add
the following to your kdesktoprc:
[Background Common]
BackgroundOpacity=90 (0 = fully transparent / 100 = opaque)

The second feature allows compiz (and later maybe other composite managers) to
tell kdesktop not to paint the background image
("_COMPIZ_WALLPAPER_SUPPORTED" x atom). In this case compiz is able to paint
a viewport dependent background or to make it even animated. This feature
looks for changes to the x atom, so that kdesktop will automatically switch
back to normal background if kwin gets started or compiz stops to render the
wallpaper.

This patch is against the current kde3 svn.

Regards
Dennis

Ratings & Comments

24 Comments

javielillo

Please, somebody can tell me what the hell I'm doing wrong to compile without errors? In my case I use Kubuntu: 1º) I install every dependency (build-essential, ) sudo aptitude install build-essential fakeroot debhelper debconf kdebase-dev kdelibs-dev 2º) downloading the source: sudo apt-get build-dep kdebase sudo apt-get source kdebase 3º) I go to the kdebase-3.5.8 source code sub-folder called kdesktop & I apply the patch (before I copied the patch inside that kdesktop folder) 4º) I patch it with the order: patch -p1 < kdesktop-transparency.patch 5º) I get some questions to modify or not some original files. but 2 of them not exist in the kdesktop folder and can't continue patching (kdesktopapp.h and kdesktopapp.cpp). The solution? I create 2 text files without data with those 2 names & I continue patching without problems on every required file. 6º) I go to the main kdebase-3.5.8 folder & I write: ./configure ./make 7º) After a long process I get errors & can't continue compiling kcontrol or kconsole (depending if I compile first the full kdebase-3.5.8 package or only kdesktop) because I think that other things not have been compiled before. I do a "make clean" & I restart compiling, this time I try directly compiling into kdesktop folder "./make". After few minutes I get similar errors like before. My last attempt was go to every folder that was showed in every compilation error and execute the "make" in those folders. If more errors happen I visit those new folders & I compile, repeating the process until kdesktop show an error about: ./.libs/libkdeinit_kdesktop: undefined reference to `KDesktopApp::KDesktopApp(_XDisplay*, unsigned long, unsigned long)' ./.libs/libkdeinit_kdesktop: undefined reference to `KDesktopApp::KDesktopApp()' collect2: ld returned 1 exit status I remember in the past that I used kdebase from the official kde download website before to learn these steps & without success... why I can't compile :S ????

javielillo

And I forgot to say that I tried too (of course, without success) building the kdebase .deb packets with: dpkg-buildpackage -rfakeroot -uc -b If I get this working I would like help other newbies sharing the patch binaries or .deb files & sharing the steps of how to compile "without errors" :P

Junon

I was able to fix the konsole issue by removing line 167 "virtual bool setPtyFd(int master_pty) = 0;" from /usr/include/kde/kde_terminal_interface.h I don't know whether this causes further problems, because currently the compiler's still doing its dirty work. But at least it doesn't stumble across konsole anymore. A further, possibly Kubuntu-specific problem was caused by the location of the kbookmarknotifier.h file. Even with the correct KDE-prefix configured, /kdebase-3.5.8/konqueror/keditbookmarks/Makefile was created pointing to /usr/include/kbookmarknotifier.h instead of the correct /usr/include/kde/kbookmarknotifier.h path. Fixed by editing the Makefile's lines 980 and 981, replacing "$(includedir)/kbookmarknotifier.h" by "$(includedir)/kde/kbookmarknotifier.h". Let's see whether the make process finally finishes this time...

Junon

About this issue: "./.libs/libkdeinit_kdesktop: undefined reference to `KDesktopApp::KDesktopApp(_XDisplay*, unsigned long, unsigned long)' ./.libs/libkdeinit_kdesktop: undefined reference to `KDesktopApp::KDesktopApp()" By comparing '~/kdebase-3.5.8/kdesktop/.libs/libkdeinit_kdesktop.la' to the already installed '/usr/lib/libkdeinit_kdesktop.la' I noticed that the latter references to libkdeinit_kdesktop.so instead of libkdeinit_kdesktop. Hence I did a "cp /usr/lib/libkdeinit_kdesktop.so ~/kdebase-3.5.8/kdesktop/.libs/" and modified lines 8 and 11 in '~/kdebase-3.5.8/kdesktop/.libs/libkdeinit_kdesktop.la' by adding the .so to every libkdeinit_kdesktop entry. Compiling kdesktop finished then, though I haven't tested if this breaks anything yet.

Junon

Well, don't do this, since it does break the kdesktop patch. The --bg-transparency option isn't recognized at all.

Dreid

First of all i tried to compile it with dpkg-buildpackage and got the same error. Then, i went into kdesktop target dir and compiled missing .o manualy: 1. Added missing cpp to libkdeinit_kdesktop_la.all_cpp.cpp (append line #include "kdesktopapp.cpp") 2. Created moc file: /usr/share/qt3/bin/moc ~/kdebase-3.5.8.dfsg.1/./kdesktop/kdesktopapp.h -o kdesktopapp.moc After that, make completed successfully. I plan to investigate what source file to edit for properly Makefile generation and post it as a patch :)

Dreid

Looks like it is enough to edit kdesktop/Makefile.in: 1. find line starting with "for file in minicli.cpp" and insert kdesktopapp.cpp into list of cpp-files 2. to the end of line starting with "libkdeinit_kdesktop_la.all_cpp.cpp:" add "kdesktopapp.moc" 3. Before previous line add kdesktopapp.moc: $(srcdir)/kdesktopapp.h $(MOC) $(srcdir)/kdesktopapp.h -o kdesktopapp.moc After this corrections, Quote:

dpkg-buildpackage -rfakeroot -uc -b
worked for me. PS: I'm using Debian, not kubuntu - line numbers in Makefile.in wouldn't match, so i don't post them. One more time. To make everything work in Debian: 1. apt-get everything 2. apply patch 3. edit one hunk in debian/patches/98_buildprep.diff started at line 182164 to look like this: Quote:
@@ -1453,11 +1454,14 @@ libkdeinit_kdesktop_la.all_cc.cc: $(srcd rm -f libkdeinit_kdesktop_la.all_cc.final libkdeinit_kdesktop_la.all_cc.files #>+ 11 +kdesktopapp.moc: $(srcdir)/kdesktopapp.h + $(MOC) $(srcdir)/kdesktopapp.h -o kdesktopapp.moc + -libkdeinit_kdesktop_la.all_cpp.cpp: $(srcdir)/Makefile.in $(srcdir)/minicli.cpp kdesktopsettings.h $(srcdir)/startupid.cpp klaunchsettings.h $(srcdir)/kshadowengine.cpp $(srcdir)/kshadowsettings.cpp $(srcdir)/kdesktopshadowsettings.cpp $(srcdir)/kfileividesktop.cpp krootwm.moc minicli.moc startupid.moc lockeng.moc desktop.moc pixmapserver.moc kdiconview.moc kcustommenu.moc bgmanager.moc xautolock.moc +libkdeinit_kdesktop_la.all_cpp.cpp: $(srcdir)/Makefile.in $(srcdir)/minicli.cpp kdesktopsettings.h $(srcdir)/startupid.cpp klaunchsettings.h $(srcdir)/kshadowengine.cpp $(srcdir)/kshadowsettings.cpp $(srcdir)/kdesktopshadowsettings.cpp $(srcdir)/kfileividesktop.cpp krootwm.moc minicli.moc startupid.moc lockeng.moc desktop.moc kdiconview.moc kcustommenu.moc pixmapserver.moc bgmanager.moc xautolock.moc kdesktopapp.moc @echo 'creating libkdeinit_kdesktop_la.all_cpp.cpp ...'; \ rm -f libkdeinit_kdesktop_la.all_cpp.files libkdeinit_kdesktop_la.all_cpp.final; \ echo "#define KDE_USE_FINAL 1" >> libkdeinit_kdesktop_la.all_cpp.final; \ - for file in minicli.cpp startupid.cpp kshadowengine.cpp kshadowsettings.cpp kdesktopshadowsettings.cpp kfileividesktop.cpp ; do \ + for file in kdesktopapp.cpp minicli.cpp startupid.cpp kshadowengine.cpp kshadowsettings.cpp kdesktopshadowsettings.cpp kfileividesktop.cpp ; do \ echo "#include \"$$file\"" >> libkdeinit_kdesktop_la.all_cpp.files; \ test ! -f $(srcdir)/$$file || egrep '^#pragma +implementation' $(srcdir)/$$file >> libkdeinit_kdesktop_la.all_cpp.final; \ done; \
4. dpkg-buildpackage -rfakeroot -uc -b

javielillo

Thanks Dred!!! (and of course who made the patch :-) ) Finally I made deb packages for Kubuntu Gusty, your explanation of how find the lines to modify was very precise. Then the Kubuntu steps should be those: 1º) I install every dependency (build-essential, ...) sudo aptitude install build-essential fakeroot debhelper debconf kdebase-dev kdelibs-dev 2º) Download the source (in my case the sources was downloaded & unpacked automatically in my home folder): sudo apt-get build-dep kdebase sudo apt-get source kdebase 3º) I go to the kdebase-3.5.8 source code sub-folder called kdesktop & I apply the patch (before I copied the patch inside that kdesktop folder, exactly in ~/kdebase-3.5.8/kdesktop/). I patch it with the order: patch -p1 < kdesktop-transparency.patch Note: I don't know if is normal or not but I was forced to create manually 2 text files without data inside called kdesktopapp.h and kdesktopapp.cpp to continue patching the required files... 4º) Open the kdesktop/Makefile.in & edit the next things: 1. Find line starting with "for file in minicli.cpp" Quote:

for file in minicli.cpp startupid.cpp kshadowengine.cpp kshadowsettings.cpp kdesktopshadowsettings.cpp kfileividesktop.cpp ; do \
and insert kdesktopapp.cpp into list of cpp-files (in my case was located at the line 1464). Quote:
for file in kdesktopapp.cpp minicli.cpp startupid.cpp kshadowengine.cpp kshadowsettings.cpp kdesktopshadowsettings.cpp kfileividesktop.cpp ; do \
2. to the end of line starting with "libkdeinit_kdesktop_la.all_cpp.cpp:" Quote:
libkdeinit_kdesktop_la.all_cpp.cpp: $(srcdir)/Makefile.in $(srcdir)/minicli.cpp kdesktopsettings.h $(srcdir)/startupid.cpp klaunchsettings.h $(srcdir)/kshadowengine.cpp $(srcdir)/kshadowsettings.cpp $(srcdir)/kdesktopshadowsettings.cpp $(srcdir)/kfileividesktop.cpp krootwm.moc minicli.moc startupid.moc lockeng.moc desktop.moc pixmapserver.moc kdiconview.moc kcustommenu.moc bgmanager.moc xautolock.moc
add "kdesktopapp.moc" (in my case was located at the line 1460). Quote:
libkdeinit_kdesktop_la.all_cpp.cpp: $(srcdir)/Makefile.in $(srcdir)/minicli.cpp kdesktopsettings.h $(srcdir)/startupid.cpp klaunchsettings.h $(srcdir)/kshadowengine.cpp $(srcdir)/kshadowsettings.cpp $(srcdir)/kdesktopshadowsettings.cpp $(srcdir)/kfileividesktop.cpp krootwm.moc minicli.moc startupid.moc lockeng.moc desktop.moc pixmapserver.moc kdiconview.moc kcustommenu.moc bgmanager.moc xautolock.moc kdesktopapp.moc
3. Just before previous line add Quote:
kdesktopapp.moc: $(srcdir)/kdesktopapp.h $(MOC) $(srcdir)/kdesktopapp.h -o kdesktopapp.moc
5º) After these changes on the kdebase folder build the deb packages, Dred wrote: Quote:
dpkg-buildpackage -rfakeroot -uc -b
but I used Quote:
dpkg-buildpackage -rsudo -uc -b
(and because I made some wrong things I was forced to run "make distclean" command before the dpkg-buildpackage command) 6º) The new .deb packages are located on the home folder. I installed the new created package called kdesktop_3.5.8-0ubuntu2_i386.deb (where is located the changes): sudo dpkg -i kdesktop_3.5.8-0ubuntu2_i386.deb (in my case I was forced to downgrade from *ubuntu2.1_i386.deb packages to *ubuntu2_i386.deb using the command "sudo dpkg -i *.deb", installing ALL the .deb packages from the home folder. If you had other .deb files in the home folder be aware about what more will be installed :P ) 7º) Go to the ~/.kde/share/config/ folder and edit the kdesktoprc file to include the next code: Quote:
[Background Common] BackgroundOpacity=90 (0 = fully transparent / 100 = opaque)
8º) I made a script to kill & restart the kdesktop with the command "--bg-transparency" that xonestonex wrote. Save it in a text file with execution permission and copy it to the ~/.kde/Autostart/ folder to be loaded at the KDE start, the script code could be more optimized but works for me and I called it kdesktop-transparency.sh, test it before you copy the file into that folder to verify that works. Quote:
#!/bin/sh # Kills KDesktop & after is re-launched with the command "kdesktop --bg-transparency". # Should be loaded at the start of KDE load. # Be sure that .kde/share/config/kdesktoprc has this new section: # [Background Common] # BackgroundOpacity=90 (0 = fully transparent / 100 = opaque) local pid pid=$(ps ax |grep "kdesktop " |grep -v grep|awk '{print $1;}') echo -n "Killing Kdesktop (process $pid)... " kill -9 $pid echo "Killed." kdesktop --bg-transparency 2> /dev/null echo "Kdesktop ON with transparency support for Compiz's Wallpaper plugin)"
This script must be started before Compiz is loaded, then you could put the Compiz command at the end of the file or use the Fusion-icon after the script execution (I tried with success both methods). If Compiz-Fusion not have the Wallpaper plugin visit the tutorial page for install additional plugins: http://forum.compiz-fusion.org/showthread.php?t=5303 From the list of plugins we only need the wallpaper.tar.gz download (I no post the download link because it could be modified & here could become outdated/obsolete :P ) Here is the link to download the binaries for Kubuntu (I had to downgrade the KDE packages from *ubuntu2.1_i386.deb to *ubuntu2_i386.deb so I would like to try later how to build the latests sources): http://massmirror.com/df3d3bf528463823e2a1466e8734a082.html Happy holidays! ;-)

javielillo

And I post the download link of all kdebase .deb packages for Kubuntu that I got: http://massmirror.com/05bc6f62c9e2f5006ff9730696922aba.html

votequimby

Dreid, I have followed your steps repeatedly with the kdebase-3.5.8.dfsg.1 downloaded from the debian source website; yet my edits always result in 98_buildprep.diff failing whilst trying to build (works fine without edits). The 98_buildprep log displays this: Quote:

Hunk #11 FAILED at 1454. 1 out of 11 hunks FAILED -- saving rejects to file kdesktop/Makefile.in.rej
Do you have any idea what i can do? I have been racking my head trying your steps over and over, with no success....

gettinther

Hi, I'm just after patching kdebase to fix the screensaver issue (KDE screensaver only covers a portion of the screen). The result works fine except that your patch does not work anymore. Here is the patch (Ubuntu) if you want to have a look (when the wallpaper plugin is activated, the icon and screen menus disapear). --- kdesktop/lock/lockprocess.cc.orig 2007-09-26 21:39:57.000000000 +0200 +++ kdesktop/lock/lockprocess.cc 2007-09-26 21:34:42.000000000 +0200 @@ -417,7 +417,7 @@ { Visual* visual = CopyFromParent; XSetWindowAttributes attrs; - int flags = 0; + int flags = CWOverrideRedirect; #ifdef HAVE_GLXCHOOSEVISUAL if( mOpenGLVisual ) { @@ -461,6 +461,8 @@ } } #endif + + attrs.override_redirect = 1; Window w = XCreateWindow( x11Display(), RootWindow( x11Display(), x11Screen()), x(), y(), width(), height(), 0, x11Depth(), InputOutput, visual, flags, &attrs ); create( w );

gettinther

OK, forget about my previous post. The 2 patches are working fine. It the current git version of compiz that's broken. Sorry about that.

qdlaty

Hi, could you share a way how to get different wallpapers under KDE and Compiz-Fusion? I can not find a tip anywhere. Thanks in advance.

HTS

I gave a few tips in the following post on Gentoo Xeffects forums: http://forums.gentoo-xeffects.org/viewtopic.php?f=14&t=495&p=2175#p2175 However, this does not explain how to patch the source as we are using some Gentoo specific way for doing this. If you're happy to do so, you can download the source and apply the patch manually. NB: "man patch" is your friend.

qdlaty

Yes, it works! Thanks, I was missing the file: and :1.0 part in filename. Finally, the friendship with "man patch" has payed off.

McFarmer

How did you patch kdesktop on gentoo? i tried to download kdebase manually from svn, patched it, but how can i compile it? there is no configure or makefile? I'm running gentoo too, so how did you patch kdesktop on gentoo? your forum-post isn't available anymore

HTS

Yes the xeffects forums have been remade so my post doesn't exist anymore. On Gentoo, there is an xeffects overlay that includes the patch. For more information, ask questions on the xeffects forums: http://gentoo-xeffects.org/forums/ in the relevant section. Thanks

HTS

Patch applied cleanly against 3.5.7. Transparent background works modulo some repaint problems. However, how do you tell beryl to paint different wallpapers on each face of the cube? I don't understand.

HTS

different background per viewports are only available with compiz and the compiz fusion wallpaper plugin.

raven65az

added kdesktop, but you still aren't explaining how to add the patch.

Superstoned

If you've never worked with sourcecode, you'd better first look for a tutorial about building your own packages. Anyway, I can give some hints: When you have the sourcecode, you can apply this patch with the patch command: Go to the source folder, do: patch -p1 < [location&name_of_patch] then compile and install.

marcelkraan

How can i use this?

raven65az

I am using Kubuntu with Kubuntu-Desktop and Beryl. How do I apply this patch? Thanks Raven

xonestonex

You need to checkout the current version of kdebase from svn://anonsvn.kde.org:/home/kde/branches/KDE/3.5/kdebase and apply this patch to kdesktop.

Pling
0 Affiliates
Details
license
version 0.1
updated
added
downloads 24h 0
mediaviews 24h 0
pageviews 24h 0

Other Various KDE 1.-4. Improvements:

Slicker Debian Package for Woody
cirrusgr
last update date: 22 years ago

Score 5.0

Konqueror/kdesktop suggestion
PovMan
last update date: 22 years ago

Score 5.0

Biiig buttons
dbojan
last update date: 20 years ago

Score 5.0

Yet Another KControl
Frans
last update date: 21 years ago

Score 5.0

Next window and next/previos window
dbojan
last update date: 20 years ago

Score 5.0

Fantasie Toolbar
katoe
last update date: 20 years ago

Score 5.0