[X2Go-Commits] [telekinesis] 01/01: Rework of "Supporting Services"
git-admin at x2go.org
git-admin at x2go.org
Tue Aug 26 12:48:15 CEST 2014
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository telekinesis.
commit be2bca6d3da02f7886a964609b91058849b715ea
Author: gznget <opensource at gznianguan.com>
Date: Tue Aug 26 09:58:14 2014 +0200
Rework of "Supporting Services"
---
X2Go/Telekinesis/Client/Supporting_Services.pm | 60 +------------
client/bin/telekinesis-client | 107 ++++++++++++++++--------
2 files changed, 71 insertions(+), 96 deletions(-)
diff --git a/X2Go/Telekinesis/Client/Supporting_Services.pm b/X2Go/Telekinesis/Client/Supporting_Services.pm
index a9a511c..3f6c7a2 100644
--- a/X2Go/Telekinesis/Client/Supporting_Services.pm
+++ b/X2Go/Telekinesis/Client/Supporting_Services.pm
@@ -24,32 +24,9 @@ package X2Go::Telekinesis::Client::Supporting_Services;
use strict;
use Exporter qw(import);
-our @EXPORT_OK = qw(getStateOfX2GoClientWindow);
+our @EXPORT_OK = qw(getActiveWindowAndDTSIZE);
-
-
-sub getStateOfX2GoClientWindow { # Hopefully one day, this polling junk can be replaced with the Client window reporting events and states to our local socket.
- my $X2GoSID = $_[0]; # On dedicated thin clients we're not doing this anyway and on any reasonably new system
- my $Visible = 0; # the resource usage is not really an issue... at all...
- my $FullScreen = 0;
- my $DeskX = 0;
- my $DeskY = 0;
- my ($rx,$ry,$ax,$ay,$h,$w,$wID,$mapState) = getXWinPosNDim("X2GO-$X2GoSID");
- if ($mapState eq 1) {# If the window is mapped...
- my ($ActiveWID,$cDeskX,$cDeskY)= getActiveWindowAndDTSIZE();# Get active window and desktop size
- $DeskX = $cDeskX;$DeskY = $cDeskY;
- if ($ActiveWID eq $wID) {# if the active window is the X2Go client window...
- $Visible = 1;# At this point were both mapped and we're the active window.... so unlikely anything else is obscuring... (except our stuff)
- }
- } else {
- if (($h eq 1) and ($w eq 1)) {
- $FullScreen = 1;
- }
- }
- return ($Visible,$ax,$ay,$h,$w,$DeskX,$DeskY,$FullScreen);
-}
-
sub getActiveWindowAndDTSIZE {
my $return;
my $returnX;
@@ -70,38 +47,3 @@ sub getActiveWindowAndDTSIZE {
}
-
-
-sub getXWinPosNDim {
- my $NAME = $_[0];
- my %Xpos;
- $Xpos{'mapstate'} = 0;
- open(RUN, '-|', "xwininfo", '-shape', '-name',$NAME);
- while (<RUN>) {
- my $line = $_;
- $line =~ s/[\n\ ]//g;
- if ($line =~ /^Width:(\d{1,5})$/) {
- $Xpos{'width'} = $1;
- } elsif ($line =~ /^Height:(\d{1,5})$/) {
- $Xpos{'height'} = $1;
- } elsif ($line =~ /^Absoluteupper-leftX:([\-\d]{1,5})$/) {
- $Xpos{'absupleftx'} = $1;
- } elsif ($line =~ /^Absoluteupper-leftY:([\-\d]{1,5})$/) {
- $Xpos{'absuplefty'} = $1;
- } elsif ($line =~ /^Relativeupper-leftX:([\-\d]{1,5})$/) {
- $Xpos{'relupleftx'} = $1;
- } elsif ($line =~ /^Relativeupper-leftY:([\-\d]{1,5})$/) {
- $Xpos{'reluplefty'} = $1;
- } elsif ($line =~ /^xwininfo:Windowid:([a-z\d]{9})\"$NAME\"$/) {
- $Xpos{'wID'} = $1;
- } elsif ($line =~ /^MapState:IsViewable$/) {
- $Xpos{'mapstate'} = 1;
- }
-
- }
- close(RUN);
- return ($Xpos{'relupleftx'},$Xpos{'reluplefty'},$Xpos{'absupleftx'},$Xpos{'absuplefty'},$Xpos{'height'},$Xpos{'width'},$Xpos{'wID'},$Xpos{'mapstate'});
-}
-
-
-
diff --git a/client/bin/telekinesis-client b/client/bin/telekinesis-client
index cbd9a0a..da0fdca 100644
--- a/client/bin/telekinesis-client
+++ b/client/bin/telekinesis-client
@@ -33,7 +33,7 @@ use File::Path qw(make_path remove_tree);
use IO::Socket::UNIX qw( SOCK_STREAM SOMAXCONN );
use Gtk2;
use X2Go::Telekinesis::CoreSupport qw(versionCompCheck getConnectToken premZealot getCmdFlags dbugPrint tcDie sanitizeDirPath sanitizeFilePath sanitizer checkPID genRandSID genRandToken clups);;
-use X2Go::Telekinesis::Client::Supporting_Services qw(getStateOfX2GoClientWindow);
+use X2Go::Telekinesis::Client::Supporting_Services qw(getActiveWindowAndDTSIZE);
my $TeKiCVersion = "0.0.6.2";
$ENV{'PATH'} = "/bin:/usr/bin";
@SIG{qw( INT TERM HUP )} = \&doSelfTerminate; #
@@ -449,7 +449,8 @@ sub initBuiltInServices {
if ($TeKiServices{'StateOfX2GoCliWin'}{'active'} ne 1) {
dbugPrint("Service STARTED");
$TeKiServices{'StateOfX2GoCliWin'}{'active'} = 1;
- $TeKiServices{'StateOfX2GoCliWin'}{'glibTimeoutID'} = Glib::Timeout->add (300, \&runStateOfX2GoCliWin);# Make this configurable?
+ $TeKiServices{'StateOfX2GoCliWin'}{'loopCnt'} = 0;
+ $TeKiServices{'StateOfX2GoCliWin'}{'glibTimeoutID'} = Glib::Timeout->add (30, \&runStateOfX2GoCliWin);# Make this configurable?
} else {
dbugPrint("Service already started...");
}
@@ -463,41 +464,73 @@ sub initBuiltInServices {
}
sub runStateOfX2GoCliWin {
- if ($TeKiServices{'StateOfX2GoCliWin'}{'active'} eq 1) {
- my ($Visible,$ax,$ay,$h,$w,$DeskX,$DeskY,$FullScreen) = getStateOfX2GoClientWindow($X2GoSID);
- if (
- ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'FullScreen'} ne $FullScreen) or
- ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'Visible'} ne $Visible) or
- ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'ax'} ne $ax) or
- ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'ay'} ne $ay) or
- ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'h'} ne $h) or
- ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'w'} ne $w) or
- ($_[0] eq 1)
- ) {
-
- $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'FullScreen'} = $FullScreen;
- $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'Visible'} = $Visible;
- $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'ax'} = $ax;
- $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'ay'} = $ay;
- $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'h'} = $h;
- $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'w'} = $w;
- my $SendString = "1|1|0|0|0|0";
- if ($FullScreen eq 1) {
- # Default And Asuming we're thin client mode in which case we should never get this far anyhow....
- } else {
- $SendString = clups("0|$Visible|$ax|$ay|$h|$w");
- }
-# print "Change: $SendString\n";
-#print Dumper($TeKiServices{'StateOfX2GoCliWin'}{'clients'}),"\n";
- foreach my $chanID (keys $TeKiServices{'StateOfX2GoCliWin'}{'clients'}) {
-# print "Wants window state: $chanID\n";
- if ($CHANS{$chanID}{'sockclient'}) {
- my $client = $CHANS{$chanID}{'sockclient'};
- sayToClient($client,"CORE|SERVICES|X2GOWINDOWSTATE|$SendString|");
- }
- }
- }
- }
+ if ($TeKiServices{'StateOfX2GoCliWin'}{'active'} eq 1) {
+ unless ($TeKiServices{'StateOfX2GoCliWin'}{'heXid'}) {
+ if (-f "$X2GoSesHome/session.window") {
+ open(SWXID,"$X2GoSesHome/session.window");
+ my ($tmpSwXid,undef) = <SWXID>;
+ close(SWXID);
+ if ($tmpSwXid =~ /ID:(\d*)/) {
+ dbugPrint("session.window file OK ($1)");
+ $TeKiServices{'StateOfX2GoCliWin'}{'heXid'} = sprintf("0x%x",$1);
+ $TeKiServices{'StateOfX2GoCliWin'}{'theWindow'} = Gtk2::Gdk::Window->foreign_new($1);
+ }
+ }
+ }
+
+ if ($TeKiServices{'StateOfX2GoCliWin'}{'theWindow'}) {
+# dbugPrint("theWindow is OK");
+ if ($TeKiServices{'StateOfX2GoCliWin'}{'loopCnt'} < 1) {
+ dbugPrint("GET ACTIVE WINDOW INFO!");
+ ($TeKiServices{'StateOfX2GoCliWin'}{'ActiveWID'},$TeKiServices{'StateOfX2GoCliWin'}{'DeskX'},$TeKiServices{'StateOfX2GoCliWin'}{'DeskY'}) = getActiveWindowAndDTSIZE();
+ $TeKiServices{'StateOfX2GoCliWin'}{'loopCnt'} = 8;
+ } else {$TeKiServices{'StateOfX2GoCliWin'}{'loopCnt'}--;}
+ my $DeskX = $TeKiServices{'StateOfX2GoCliWin'}{'DeskX'};
+ my $DeskY = $TeKiServices{'StateOfX2GoCliWin'}{'DeskY'};
+
+ my $FullScreen = 0;
+ my $Visible = 0;
+ my ($ax,$ay) = $TeKiServices{'StateOfX2GoCliWin'}{'theWindow'}->get_origin;
+ my ($relx, $rely, $w, $h, undef) = $TeKiServices{'StateOfX2GoCliWin'}{'theWindow'}->get_geometry;
+ if ($TeKiServices{'StateOfX2GoCliWin'}{'ActiveWID'} eq $TeKiServices{'StateOfX2GoCliWin'}{'heXid'}) {
+ $Visible = 1;
+ }
+#dbugPrint("SIZES: $DeskX x $DeskY $w x $h $relx, $rely, $ax,$ay");
+ if (($w >= $DeskX) and ($h >= $DeskY)) {
+ $FullScreen = 1;
+ }
+ if (
+ ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'FullScreen'} ne $FullScreen) or
+ ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'Visible'} ne $Visible) or
+ ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'ax'} ne $ax) or
+ ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'ay'} ne $ay) or
+ ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'h'} ne $h) or
+ ($TeKiServices{'StateOfX2GoCliWin'}{'data'}{'w'} ne $w) or
+ ($_[0] eq 1)
+ ) {
+
+ $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'FullScreen'} = $FullScreen;
+ $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'Visible'} = $Visible;
+ $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'ax'} = $ax;
+ $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'ay'} = $ay;
+ $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'h'} = $h;
+ $TeKiServices{'StateOfX2GoCliWin'}{'data'}{'w'} = $w;
+ my $SendString = "1|1|0|0|0|0";
+ if ($FullScreen eq 1) {
+ # Default And Asuming we're thin client mode in which case we should never get this far anyhow....
+ } else {
+ $SendString = clups("0|$Visible|$ax|$ay|$h|$w");
+ }
+
+ foreach my $chanID (keys $TeKiServices{'StateOfX2GoCliWin'}{'clients'}) {
+ if ($CHANS{$chanID}{'sockclient'}) {
+ my $client = $CHANS{$chanID}{'sockclient'};
+ sayToClient($client,"CORE|SERVICES|X2GOWINDOWSTATE|$SendString|");
+ }
+ }
+ }
+ }
+ }
# Insert cleanup routine at the end....
return 1;
}
--
Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/telekinesis.git
More information about the x2go-commits
mailing list