From a155e9f88218060c207cf6a152d78b0e47fc7d2d Mon Sep 17 00:00:00 2001
From: enselic <enselic@f606c939-3180-4ac9-a4b8-4b8779d57d0a>
Date: Fri, 5 Jun 2009 16:26:52 +0000
Subject: Apply patch from Dominic Evans that fixes capturing of window
 decorations when compiz is running.

git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@600 f606c939-3180-4ac9-a4b8-4b8779d57d0a
---
 gtk-recordmydesktop/src/rmdSimple.py | 43 +++++++++++++++++++++++++++++-------
 1 file changed, 35 insertions(+), 8 deletions(-)

(limited to 'gtk-recordmydesktop/src')

diff --git a/gtk-recordmydesktop/src/rmdSimple.py b/gtk-recordmydesktop/src/rmdSimple.py
index 1cdf17d..eb85b84 100644
--- a/gtk-recordmydesktop/src/rmdSimple.py
+++ b/gtk-recordmydesktop/src/rmdSimple.py
@@ -39,7 +39,9 @@ from rmdTrayIcon import *
 import gtk.gdk
 import gobject
 import gc
+import sys
 import re
+from subprocess import Popen,PIPE
 import rmdPrefsWidget as pW
 import rmdSelectThumb as sT
 from rmdStrings import *
@@ -217,14 +219,39 @@ class simpleWidget(object):
         self.__fileSelQuit__()
 
     def __select_window__(self,button):
-        xwininfo_com=['xwininfo','-frame']
-        if self.values[21]==1:
-            xwininfo_com=['xwininfo']
-        (stdin,stdout,stderr)=os.popen3(xwininfo_com,'t')
-        wid=stdout.readlines()
-        stdin.close()
-        stdout.close()
-        stderr.close()
+        # check user has not disabled capture of window decoration
+        if self.values[21]!=1:
+            # else work out the size including decoration (also taking into account compiz)
+            p = Popen(['xwininfo','-frame'],stdout=PIPE)
+            pattern = re.compile('^xwininfo: Window id: (0x[0-9a-fA-F]+)')
+
+            while True:
+               o = p.stdout.readline()
+               if o == '' and p.poll() != None: break
+               match = pattern.search(o)
+               if match:
+                   fid = match.group(1)
+                   break
+
+            p = Popen(['xprop','-id',fid,'_NET_FRAME_WINDOW'],stdout=PIPE)
+            pattern = re.compile('^_NET_FRAME_WINDOW\(WINDOW\): window id # (0x[0-9a-fA-F]+)')
+
+            while True:
+               o = p.stdout.readline()
+               if o == '' and p.poll() != None: break
+               match = pattern.search(o)
+               if match:
+                   wid = match.group(1)
+                   break
+               else:
+                   print pattern
+                   print o
+
+        if wid: xwininfo_com = ['xwininfo','-id',wid]
+        else: xwininfo_com = ['xwininfo']
+        p = Popen(xwininfo_com,stdout=PIPE)
+        wid=p.stdout.readlines()
+
         x=y=width=height=None
         for i in wid:
             if i.lstrip().startswith('Absolute upper-left X:'):
-- 
cgit v1.2.3