[gtk+] [broadway] Track window type in browser



commit 199cd1548fb385b592e8ff750918a3624e54e74d
Author: Alexander Larsson <alexl redhat com>
Date:   Tue Apr 5 12:27:43 2011 +0200

    [broadway] Track window type in browser

 gdk/broadway/broadway-demo.c      |    2 +-
 gdk/broadway/broadway.c           |    9 +++++----
 gdk/broadway/broadway.h           |    3 ++-
 gdk/broadway/broadway.js          |    7 +++++--
 gdk/broadway/gdkwindow-broadway.c |    6 ++++--
 5 files changed, 17 insertions(+), 10 deletions(-)
---
diff --git a/gdk/broadway/broadway-demo.c b/gdk/broadway/broadway-demo.c
index d46b336..70c5ff9 100644
--- a/gdk/broadway/broadway-demo.c
+++ b/gdk/broadway/broadway-demo.c
@@ -146,7 +146,7 @@ demo2 (BroadwayOutput *output)
   double da = 0;
   int i;
 
-  broadway_output_new_surface(output,  0, 100, 100, 800, 600);
+  broadway_output_new_surface(output,  0, 100, 100, 800, 600, 0);
 
   surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
 					800, 600);
diff --git a/gdk/broadway/broadway.c b/gdk/broadway/broadway.c
index bada96e..478a451 100644
--- a/gdk/broadway/broadway.c
+++ b/gdk/broadway/broadway.c
@@ -18,14 +18,12 @@
 static const char base64_alphabet[] =
 	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
-#if 0
 static void
 base64_uint8 (guint8 v, char *c)
 {
   c[0] = base64_alphabet[(v >> 0) & 0x3f];
   c[1] = base64_alphabet[(v >> 6) & 0x3];
 }
-#endif
 
 static void
 base64_uint16 (guint32 v, char *c)
@@ -685,9 +683,11 @@ broadway_output_ungrab_pointer (BroadwayOutput *output)
 }
 
 void
-broadway_output_new_surface(BroadwayOutput *output,  int id, int x, int y, int w, int h)
+broadway_output_new_surface(BroadwayOutput *output,
+			    int id, int x, int y, int w, int h,
+			    gboolean is_temp)
 {
-  char buf[HEADER_LEN + 15];
+  char buf[HEADER_LEN + 16];
   int p;
 
   p = write_header (output, buf, 's');
@@ -696,6 +696,7 @@ broadway_output_new_surface(BroadwayOutput *output,  int id, int x, int y, int w
   append_uint16 (y, buf, &p);
   append_uint16 (w, buf, &p);
   append_uint16 (h, buf, &p);
+  buf[p++] = is_temp ? '1' : '0';
 
   assert (p == sizeof (buf));
 
diff --git a/gdk/broadway/broadway.h b/gdk/broadway/broadway.h
index 2f93d27..86df4df 100644
--- a/gdk/broadway/broadway.h
+++ b/gdk/broadway/broadway.h
@@ -18,7 +18,8 @@ void            broadway_output_new_surface     (BroadwayOutput *output,
 						 int             x,
 						 int             y,
 						 int             w,
-						 int             h);
+						 int             h,
+						 gboolean        is_temp);
 void            broadway_output_show_surface    (BroadwayOutput *output,
 						 int             id);
 void            broadway_output_hide_surface    (BroadwayOutput *output,
diff --git a/gdk/broadway/broadway.js b/gdk/broadway/broadway.js
index 3f34a2a..bcac301 100644
--- a/gdk/broadway/broadway.js
+++ b/gdk/broadway/broadway.js
@@ -92,7 +92,7 @@ var surfaces = {};
 var outstandingCommands = new Array();
 var inputSocket = null;
 
-function initContext(canvas, x, y, id)
+function initContext(canvas, x, y, id, isTemp)
 {
     canvas.surfaceId = id;
     canvas.style["position"] = "absolute";
@@ -103,6 +103,7 @@ function initContext(canvas, x, y, id)
     context.globalCompositeOperation = "source-over";
     document.body.appendChild(canvas);
     context.drawQueue = [];
+    context.isTemp = isTemp;
     context.transientParent = 0;
 
     return context;
@@ -223,10 +224,12 @@ function handleCommands(cmdObj)
 	    i = i + 3;
 	    var h = base64_16(cmd, i);
 	    i = i + 3;
+	    var isTemp = cmd[i] == '1';
+	    i = i + 1;
 	    var surface = document.createElement("canvas");
 	    surface.width = w;
 	    surface.height = h;
-	    surfaces[id] = initContext(surface, x, y, id);
+	    surfaces[id] = initContext(surface, x, y, id, isTemp);
 	    break;
 
 	case 'S': // Show a surface
diff --git a/gdk/broadway/gdkwindow-broadway.c b/gdk/broadway/gdkwindow-broadway.c
index 24c4bb2..4fd138f 100644
--- a/gdk/broadway/gdkwindow-broadway.c
+++ b/gdk/broadway/gdkwindow-broadway.c
@@ -225,7 +225,8 @@ _gdk_broadway_resync_windows (void)
 				   window->x,
 				   window->y,
 				   window->width,
-				   window->height);
+				   window->height,
+				   window->window_type == GDK_WINDOW_TEMP);
       if (GDK_WINDOW_IS_MAPPED (window))
 	{
 	  broadway_output_show_surface (display->output, impl->id);
@@ -363,7 +364,8 @@ _gdk_broadway_display_create_window_impl (GdkDisplay    *display,
 				 window->x,
 				 window->y,
 				 window->width,
-				 window->height);
+				 window->height,
+				 window->window_type == GDK_WINDOW_TEMP);
 }
 
 static void



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]