summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/.cvsignore5
-rw-r--r--tools/Makefile.am10
-rw-r--r--tools/obsetroot.cc66
3 files changed, 81 insertions, 0 deletions
diff --git a/tools/.cvsignore b/tools/.cvsignore
new file mode 100644
index 00000000..b0f0d99e
--- /dev/null
+++ b/tools/.cvsignore
@@ -0,0 +1,5 @@
+.libs
+.deps
+obsetroot
+Makefile.in
+Makefile
diff --git a/tools/Makefile.am b/tools/Makefile.am
new file mode 100644
index 00000000..1785c009
--- /dev/null
+++ b/tools/Makefile.am
@@ -0,0 +1,10 @@
+bin_PROGRAMS=obsetroot
+
+obsetroot_LDADD=$(XFT_LIBS) -L../otk -lotk @LIBINTL@
+obsetroot_CPPFLAGS=$(XFT_CFLAGS) -I..
+obsetroot_SOURCES=obsetroot.cc
+
+MAINTAINERCLEANFILES=Makefile.in
+
+distclean-local:
+ $(RM) *\~ *.orig *.rej .\#*
diff --git a/tools/obsetroot.cc b/tools/obsetroot.cc
new file mode 100644
index 00000000..286a61e4
--- /dev/null
+++ b/tools/obsetroot.cc
@@ -0,0 +1,66 @@
+#include <otk/otk.hh>
+
+int main(int argc, char **argv)
+{
+ otk::initialize();
+
+ int screen = DefaultScreen(**otk::display);
+
+ Pixmap old;
+ Window root = otk::display->screenInfo(screen)->rootWindow();
+
+ otk::Surface *s = new otk::Surface(screen,
+ otk::display->screenInfo(screen)->size());
+ otk::RenderTexture *tx = new otk::RenderTexture(screen, false,
+ otk::RenderTexture::Flat,
+ otk::RenderTexture::Bevel1,
+ false,
+ otk::RenderTexture::Solid,
+ false, 0x202020, 0x0000ff,
+ 0, 0);
+ otk::display->renderControl(screen)->drawBackground(*s, *tx);
+
+ otk::display->grab();
+
+ otk::display->setIgnoreErrors(true);
+ // get the current pixmap and free it
+ if (otk::Property::get(root, otk::Property::atoms.rootpmapid,
+ otk::Property::atoms.pixmap, &old) && old) {
+ XKillClient(**otk::display, old);
+ XSync(**otk::display, false);
+ XFreePixmap(**otk::display, old);
+ }
+ if (otk::Property::get(root, otk::Property::atoms.esetrootid,
+ otk::Property::atoms.pixmap, &old) && old)
+ XFreePixmap(**otk::display, old);
+ otk::display->setIgnoreErrors(false);
+
+ // XSetWindowBackground(**display, root, color.pixel());
+
+ // don't kill us when someone wants to change the background!!
+ Pixmap pixmap = XCreatePixmap(**otk::display, root, s->size().width(),
+ s->size().height(),
+ otk::display->screenInfo(screen)->depth());
+ XCopyArea(**otk::display, s->pixmap(), pixmap,
+ DefaultGC(**otk::display, screen), 0, 0,
+ s->size().width(), s->size().height(), 0, 0);
+
+ // set the new pixmap
+ XSetWindowBackgroundPixmap(**otk::display, root, pixmap);
+ XClearWindow(**otk::display, root);
+
+ otk::Property::set(root, otk::Property::atoms.rootpmapid,
+ otk::Property::atoms.pixmap, pixmap);
+ otk::Property::set(root, otk::Property::atoms.esetrootid,
+ otk::Property::atoms.pixmap, pixmap);
+
+ otk::display->ungrab();
+
+ delete tx;
+ delete s;
+
+ XSetCloseDownMode(**otk::display, RetainPermanent);
+ XKillClient(**otk::display, AllTemporary);
+
+ otk::destroy();
+}