[gtk+/client-side-windows: 75/75] Merge branch 'master' into client-side-windows



commit 7303f3c9fdc2fcb75907a3fd81cc4a44446931a7
Merge: c08bf93... 1a385c5...
Author: Alexander Larsson <alexl redhat com>
Date:   Wed Jun 17 12:56:05 2009 +0200

    Merge branch 'master' into client-side-windows
    
    This updates client-side-windows to the the latest soname
    change for easier testing.
    
    Conflicts:
    	gdk/x11/gdkwindow-x11.c
    	tests/Makefile.am

 Makefile.am                                      |    2 +-
 NEWS                                             |  120 +-
 configure.in                                     |  132 +-
 demos/gtk-demo/appwindow.c                       |  196 +-
 demos/gtk-demo/rotated_text.c                    |    6 +-
 docs/reference/gtk/gtk-docs.sgml                 |    1 +
 docs/reference/gtk/gtk-sections.txt              |   40 +
 docs/reference/gtk/gtk.types                     |    1 +
 docs/reference/gtk/tmpl/filesystem.sgml          |   36 +-
 docs/reference/gtk/tmpl/gtkactivatable.sgml      |   32 +-
 docs/reference/gtk/tmpl/gtkimcontext.sgml        |  110 +-
 docs/reference/gtk/tmpl/gtklabel.sgml            |   25 +
 docs/reference/gtk/tmpl/gtkmenu.sgml             |    2 +
 docs/reference/gtk/tmpl/gtkprintoperation.sgml   |   46 +
 docs/reference/gtk/tmpl/gtkprintsettings.sgml    |    1 +
 docs/reference/gtk/tmpl/gtkprintunixdialog.sgml  |   60 +
 docs/reference/gtk/tmpl/gtksettings.sgml         |   28 +
 docs/reference/gtk/tmpl/gtktoolshell.sgml        |   30 +-
 gdk-pixbuf/gdk-pixbuf-io.c                       |    4 +-
 gdk-pixbuf/gdk-pixdata.c                         |    7 +-
 gdk/x11/gdkapplaunchcontext-x11.c                |    8 +-
 gdk/x11/gdkdisplay-x11.c                         |    7 +-
 gdk/x11/gdkproperty-x11.c                        |   29 +-
 gdk/x11/gdkscreen-x11.c                          |    5 +-
 gdk/x11/gdkwindow-x11.c                          |   22 +-
 gtk/Makefile.am                                  |    2 +
 gtk/gtk.h                                        |    1 +
 gtk/gtk.symbols                                  |   31 +
 gtk/gtkaboutdialog.c                             |    2 +-
 gtk/gtkactivatable.c                             |    4 +-
 gtk/gtkassistant.c                               |   34 +-
 gtk/gtkbbox.c                                    |  349 +++
 gtk/gtkbuilderparser.c                           |   36 +-
 gtk/gtkcellrendererpixbuf.c                      |  155 +-
 gtk/gtkcellview.c                                |    4 +-
 gtk/gtkcellview.h                                |    2 +
 gtk/gtkcombobox.c                                |    6 +-
 gtk/gtkdnd.c                                     |  146 ++-
 gtk/gtkentry.c                                   |    5 +
 gtk/gtkentrycompletion.c                         |   10 +-
 gtk/gtkenums.h                                   |   12 +-
 gtk/gtkfilechooserdefault.c                      |  304 ++-
 gtk/gtkfilechooserprivate.h                      |    6 +
 gtk/gtkfilechoosersettings.c                     |  125 +
 gtk/gtkfilechoosersettings.h                     |   19 +
 gtk/gtkfilesystemmodel.c                         |    3 +-
 gtk/gtkfontsel.c                                 |    2 +-
 gtk/gtkhandlebox.c                               |    3 +-
 gtk/gtkhbbox.c                                   |  196 +--
 gtk/gtkiconview.c                                |    6 +-
 gtk/gtkinfobar.c                                 | 1263 ++++++++++
 gtk/gtkinfobar.h                                 |  116 +
 gtk/gtkmessagedialog.h                           |   10 +-
 gtk/gtkpathbar.c                                 |  106 +-
 gtk/gtkprintoperation-private.h                  |    2 +
 gtk/gtkprintoperation-unix.c                     |    6 +
 gtk/gtkprintoperation.c                          |  132 +-
 gtk/gtkprintoperation.h                          |    6 +
 gtk/gtkprintsettings.c                           |    6 +
 gtk/gtkprintunixdialog.c                         |  241 ++-
 gtk/gtkprintunixdialog.h                         |    7 +
 gtk/gtkrecentmanager.c                           |    7 +-
 gtk/gtkrecentmanager.h                           |    2 +-
 gtk/gtkstatusicon.c                              |    3 +
 gtk/gtkstock.c                                   |    2 +-
 gtk/gtktreeprivate.h                             |    2 +
 gtk/gtktreeview.c                                |   45 +-
 gtk/gtktreeviewcolumn.c                          |    2 +
 gtk/gtktreeviewcolumn.h                          |    2 +
 gtk/gtkvbbox.c                                   |  195 +--
 gtk/tests/builder.c                              |   55 +-
 gtk/tests/treeview-scrolling.c                   |    2 +-
 gtk/updateiconcache.c                            |    2 +-
 modules/other/gail/gailtreeview.c                |   10 +-
 modules/printbackends/cups/gtkprintbackendcups.c |   33 +
 po-properties/af.po                              |  200 +-
 po-properties/am.po                              |  198 +-
 po-properties/ang.po                             |  196 +-
 po-properties/ar.po                              |  200 +-
 po-properties/as.po                              |  201 +-
 po-properties/ast.po                             |  196 +-
 po-properties/az.po                              |  200 +-
 po-properties/az_IR.po                           |  196 +-
 po-properties/be.po                              |  200 +-
 po-properties/be latin po                        |  200 +-
 po-properties/bg.po                              |  200 +-
 po-properties/bn.po                              |  202 +-
 po-properties/bn_IN.po                           |  202 +-
 po-properties/br.po                              |  196 +-
 po-properties/bs.po                              |  200 +-
 po-properties/ca.po                              |  200 +-
 po-properties/ca valencia po                     |  200 +-
 po-properties/crh.po                             |  203 +-
 po-properties/cs.po                              |  200 +-
 po-properties/cy.po                              |  205 +-
 po-properties/da.po                              |  206 +-
 po-properties/de.po                              |  201 +-
 po-properties/dz.po                              |  207 +-
 po-properties/el.po                              |  200 +-
 po-properties/en_CA.po                           |  200 +-
 po-properties/en_GB.po                           |  200 +-
 po-properties/eo.po                              |  196 +-
 po-properties/es.po                              |  198 +-
 po-properties/et.po                              |  200 +-
 po-properties/eu.po                              |  201 +-
 po-properties/fa.po                              |  199 +-
 po-properties/fi.po                              |  200 +-
 po-properties/fr.po                              |  200 +-
 po-properties/ga.po                              |  198 +-
 po-properties/gl.po                              |  200 +-
 po-properties/gu.po                              |  200 +-
 po-properties/he.po                              |  200 +-
 po-properties/hi.po                              |  200 +-
 po-properties/hr.po                              |  200 +-
 po-properties/hu.po                              |  200 +-
 po-properties/hy.po                              |  198 +-
 po-properties/ia.po                              |  198 +-
 po-properties/id.po                              |  204 +-
 po-properties/io.po                              |  196 +-
 po-properties/is.po                              |  200 +-
 po-properties/it.po                              |  203 +-
 po-properties/ja.po                              |  200 +-
 po-properties/ka.po                              |  200 +-
 po-properties/kn.po                              |  200 +-
 po-properties/ko.po                              |  200 +-
 po-properties/ku.po                              |  196 +-
 po-properties/li.po                              |  200 +-
 po-properties/lt.po                              |  200 +-
 po-properties/lv.po                              |  200 +-
 po-properties/mai.po                             |  200 +-
 po-properties/mi.po                              |  198 +-
 po-properties/mk.po                              |  200 +-
 po-properties/ml.po                              |  200 +-
 po-properties/mn.po                              |  204 +-
 po-properties/mr.po                              |  200 +-
 po-properties/ms.po                              |  200 +-
 po-properties/nb.po                              |  200 +-
 po-properties/ne.po                              |  200 +-
 po-properties/nl.po                              |  201 +-
 po-properties/nn.po                              |  200 +-
 po-properties/nso.po                             |  200 +-
 po-properties/oc.po                              |  198 +-
 po-properties/or.po                              |  406 ++--
 po-properties/pa.po                              |  200 +-
 po-properties/pl.po                              |  200 +-
 po-properties/ps.po                              |  199 +-
 po-properties/pt.po                              |  200 +-
 po-properties/pt_BR.po                           |  200 +-
 po-properties/ro.po                              |  200 +-
 po-properties/ru.po                              |  200 +-
 po-properties/rw.po                              |  200 +-
 po-properties/si.po                              |  200 +-
 po-properties/sk.po                              |  200 +-
 po-properties/sl.po                              |  200 +-
 po-properties/sq.po                              |  200 +-
 po-properties/sr.po                              |  200 +-
 po-properties/sr ije po                          |  200 +-
 po-properties/sr latin po                        |  200 +-
 po-properties/sv.po                              |  200 +-
 po-properties/ta.po                              |  200 +-
 po-properties/te.po                              |  200 +-
 po-properties/th.po                              |  198 +-
 po-properties/tk.po                              |  198 +-
 po-properties/tr.po                              |  203 +-
 po-properties/tt.po                              |  199 +-
 po-properties/uk.po                              |  200 +-
 po-properties/ur.po                              |  196 +-
 po-properties/uz.po                              |  199 +-
 po-properties/uz cyrillic po                     |  199 +-
 po-properties/vi.po                              |  200 +-
 po-properties/wa.po                              |  208 +-
 po-properties/xh.po                              |  200 +-
 po-properties/yi.po                              |  200 +-
 po-properties/zh_CN.po                           |  200 +-
 po-properties/zh_HK.po                           |  200 +-
 po-properties/zh_TW.po                           |  200 +-
 po/ChangeLog                                     |    4 +
 po/Makefile.in.in                                |    2 +
 po/af.po                                         |  441 ++--
 po/am.po                                         |  438 ++--
 po/ang.po                                        |  434 ++--
 po/ar.po                                         |  440 ++--
 po/as.po                                         |  440 ++--
 po/ast.po                                        |  440 ++--
 po/az.po                                         |  437 ++--
 po/az_IR.po                                      |  432 ++--
 po/be.po                                         |  441 ++--
 po/be latin po                                   |  440 ++--
 po/bg.po                                         | 2147 ++++++++--------
 po/bn.po                                         |  434 ++--
 po/bn_IN.po                                      |  484 ++--
 po/br.po                                         |  434 ++--
 po/bs.po                                         |  437 ++--
 po/ca.po                                         |  443 ++--
 po/ca valencia po                                |  439 ++--
 po/crh.po                                        |  441 ++--
 po/cs.po                                         |  440 ++--
 po/cy.po                                         |  439 ++--
 po/da.po                                         | 2147 ++++++++--------
 po/de.po                                         | 2214 +++++++++--------
 po/dz.po                                         |  437 ++--
 po/el.po                                         | 2209 +++++++++--------
 po/en_CA.po                                      |  436 ++--
 po/en_GB.po                                      |  443 ++--
 po/eo.po                                         |  437 ++--
 po/es.po                                         | 2157 ++++++++--------
 po/et.po                                         |  943 ++------
 po/eu.po                                         |  440 ++--
 po/fa.po                                         |  437 ++--
 po/fi.po                                         |  440 ++--
 po/fr.po                                         | 2166 ++++++++--------
 po/ga.po                                         | 2215 +++++++++---------
 po/gl.po                                         |  443 ++--
 po/gu.po                                         |  440 ++--
 po/he.po                                         |  440 ++--
 po/hi.po                                         |  464 ++--
 po/hr.po                                         |  436 ++--
 po/hu.po                                         |  440 ++--
 po/hy.po                                         |  437 ++--
 po/ia.po                                         |  434 ++--
 po/id.po                                         |  437 ++--
 po/io.po                                         |  435 ++--
 po/is.po                                         |  434 ++--
 po/it.po                                         |  459 ++--
 po/ja.po                                         |  440 ++--
 po/ka.po                                         |  440 ++--
 po/kn.po                                         |  440 ++--
 po/ko.po                                         |  440 ++--
 po/ku.po                                         |  436 ++--
 po/li.po                                         |  438 ++--
 po/lt.po                                         |  440 ++--
 po/lv.po                                         |  440 ++--
 po/mai.po                                        |  440 ++--
 po/mi.po                                         |  434 ++--
 po/mk.po                                         |  436 ++--
 po/ml.po                                         |  453 ++--
 po/mn.po                                         |  438 ++--
 po/mr.po                                         |  440 ++--
 po/ms.po                                         |  437 ++--
 po/nb.po                                         |  490 ++--
 po/ne.po                                         |  437 ++--
 po/nl.po                                         |  451 ++--
 po/nn.po                                         |  444 ++--
 po/nso.po                                        |  437 ++--
 po/oc.po                                         |  435 ++--
 po/or.po                                         |  440 ++--
 po/pa.po                                         |  440 ++--
 po/pl.po                                         |  440 ++--
 po/ps.po                                         |  436 ++--
 po/pt.po                                         |  446 ++--
 po/pt_BR.po                                      |  452 ++--
 po/ro.po                                         |  440 ++--
 po/ru.po                                         |  490 ++--
 po/rw.po                                         |  443 ++--
 po/si.po                                         |  436 ++--
 po/sk.po                                         |  440 ++--
 po/sl.po                                         |  440 ++--
 po/sq.po                                         |  441 ++--
 po/sr.po                                         |  446 ++--
 po/sr ije po                                     |  441 ++--
 po/sr latin po                                   |  446 ++--
 po/sv.po                                         | 2867 ++++++++++------------
 po/ta.po                                         |  440 ++--
 po/te.po                                         |  440 ++--
 po/th.po                                         |  446 ++--
 po/tk.po                                         |  434 ++--
 po/tr.po                                         |  442 ++--
 po/tt.po                                         |  437 ++--
 po/uk.po                                         |  440 ++--
 po/ur.po                                         |  433 ++--
 po/uz.po                                         |  438 ++--
 po/uz cyrillic po                                |  438 ++--
 po/vi.po                                         |  440 ++--
 po/wa.po                                         |  434 ++--
 po/xh.po                                         |  437 ++--
 po/yi.po                                         |  438 ++--
 po/zh_CN.po                                      |  440 ++--
 po/zh_HK.po                                      |  443 ++--
 po/zh_TW.po                                      |  443 ++--
 tests/Makefile.am                                |    3 +
 tests/testfilechooser.c                          |   18 +
 tests/testgtk.c                                  |    2 +-
 tests/testorientable.c                           |  111 +
 283 files changed, 47091 insertions(+), 37795 deletions(-)
---
diff --cc gdk/x11/gdkwindow-x11.c
index 0f3ef1c,bfaa7a1..303b18a
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@@ -3393,8 -3734,8 +3391,7 @@@ do_shape_combine_region (GdkWindo
  			 gint             shape)
  {
    GdkWindowObject *private = (GdkWindowObject *)window;
 -  gint xoffset, yoffset;
 -
 +  
- #ifdef HAVE_SHAPE_EXT
    if (GDK_WINDOW_DESTROYED (window))
      return;
  
@@@ -3455,15 -3775,8 +3452,14 @@@
                                 ShapeSet,
                                 YXBanded);
  
 +      if (shape == ShapeBounding)
 +	{
 +	  _gdk_x11_window_tmp_reset_parent_bg (window);
 +	  _gdk_x11_window_tmp_reset_bg (window, TRUE);
 +	}
 +      
        g_free (xrects);
      }
- #endif /* HAVE_SHAPE_EXT */
  }
  
  static void
@@@ -4558,109 -4898,404 +4554,105 @@@ gdk_window_set_functions (GdkWindow    
    gdk_window_set_mwm_hints (window, &hints);
  }
  
 -/* 
 - * propagate the shapes from all child windows of a GDK window to the parent 
 - * window. Shamelessly ripped from Enlightenment's code
 - * 
 - * - Raster
 - */
 -struct _gdk_span
 +static GdkRegion *
 +xwindow_get_shape (Display *xdisplay,
 +		   Window window,
 +		   gint shape_type)
  {
 -  gint                start;
 -  gint                end;
 -  struct _gdk_span    *next;
 -};
 +  GdkRegion *shape;
 +  GdkRectangle *rl;
 +  XRectangle *xrl;
 +  gint rn, ord, i;
  
 -static void
 -gdk_add_to_span (struct _gdk_span **s,
 -		 gint               x,
 -		 gint               xx)
 -{
 -  struct _gdk_span *ptr1, *ptr2, *noo, *ss;
 -  gchar             spanning;
 -  
 -  ptr2 = NULL;
 -  ptr1 = *s;
 -  spanning = 0;
 -  ss = NULL;
 -  /* scan the spans for this line */
 -  while (ptr1)
 -    {
 -      /* -- -> new span */
 -      /* == -> existing span */
 -      /* ## -> spans intersect */
 -      /* if we are in the middle of spanning the span into the line */
 -      if (spanning)
 -	{
 -	  /* case: ---- ==== */
 -	  if (xx < ptr1->start - 1)
 -	    {
 -	      /* ends before next span - extend to here */
 -	      ss->end = xx;
 -	      return;
 -	    }
 -	  /* case: ----##=== */
 -	  else if (xx <= ptr1->end)
 -	    {
 -	      /* crosses into next span - delete next span and append */
 -	      ss->end = ptr1->end;
 -	      ss->next = ptr1->next;
 -	      g_free (ptr1);
 -	      return;
 -	    }
 -	  /* case: ---###--- */
 -	  else
 -	    {
 -	      /* overlaps next span - delete and keep checking */
 -	      ss->next = ptr1->next;
 -	      g_free (ptr1);
 -	      ptr1 = ss;
 -	    }
 -	}
 -      /* otherwise havent started spanning it in yet */
 -      else
 -	{
 -	  /* case: ---- ==== */
 -	  if (xx < ptr1->start - 1)
 -	    {
 -	      /* insert span here in list */
 -	      noo = g_malloc (sizeof (struct _gdk_span));
 -	      
 -	      if (noo)
 -		{
 -		  noo->start = x;
 -		  noo->end = xx;
 -		  noo->next = ptr1;
 -		  if (ptr2)
 -		    ptr2->next = noo;
 -		  else
 -		    *s = noo;
 -		}
 -	      return;
 -	    }
 -	  /* case: ----##=== */
 -	  else if ((x < ptr1->start) && (xx <= ptr1->end))
 -	    {
 -	      /* expand this span to the left point of the new one */
 -	      ptr1->start = x;
 -	      return;
 -	    }
 -	  /* case: ===###=== */
 -	  else if ((x >= ptr1->start) && (xx <= ptr1->end))
 -	    {
 -	      /* throw the span away */
 -	      return;
 -	    }
 -	  /* case: ---###--- */
 -	  else if ((x < ptr1->start) && (xx > ptr1->end))
 -	    {
 -	      ss = ptr1;
 -	      spanning = 1;
 -	      ptr1->start = x;
 -	      ptr1->end = xx;
 -	    }
 -	  /* case: ===##---- */
 -	  else if ((x >= ptr1->start) && (x <= ptr1->end + 1) && (xx > ptr1->end))
 -	    {
 -	      ss = ptr1;
 -	      spanning = 1;
 -	      ptr1->end = xx;
 -	    }
 -	  /* case: ==== ---- */
 -	  /* case handled by next loop iteration - first case */
 -	}
 -      ptr2 = ptr1;
 -      ptr1 = ptr1->next;
 -    }
 -  /* it started in the middle but spans beyond your current list */
 -  if (spanning)
 -    {
 -      ptr2->end = xx;
 -      return;
 -    }
 -  /* it does not start inside a span or in the middle, so add it to the end */
 -  noo = g_malloc (sizeof (struct _gdk_span));
 +  shape = NULL;
    
- #if defined(HAVE_SHAPE_EXT)
 -  if (noo)
 +  xrl = XShapeGetRectangles (xdisplay,
 +			     window,
 +			     shape_type, &rn, &ord);
 +  
 +  if (rn == 0)
 +    return gdk_region_new (); /* Empty */
 +  
 +  if (ord != YXBanded)
      {
 -      noo->start = x;
 -      noo->end = xx;
 -      if (ptr2)
 -	{
 -	  noo->next = ptr2->next;
 -	  ptr2->next = noo;
 -	}
 -      else
 -	{
 -	  noo->next = NULL;
 -	  *s = noo;
 -	}
 +      /* This really shouldn't happen with any xserver, as they
 +	 generally convert regions to YXBanded internally */
 +      g_warning ("non YXBanded shape masks not supported");
 +      XFree (xrl);
 +      return NULL;
      }
 -  return;
 -}
  
 -static void
 -gdk_add_rectangles (Display           *disp,
 -		    Window             win,
 -		    struct _gdk_span **spans,
 -		    gint               basew,
 -		    gint               baseh,
 -		    gint               x,
 -		    gint               y)
 -{
 -  gint a, k;
 -  gint x1, y1, x2, y2;
 -  gint rn, ord;
 -  XRectangle *rl;
 -  
 -  rl = XShapeGetRectangles (disp, win, ShapeBounding, &rn, &ord);
 -  if (rl)
 -    {
 -      /* go through all clip rects in this window's shape */
 -      for (k = 0; k < rn; k++)
 -	{
 -	  /* for each clip rect, add it to each line's spans */
 -	  x1 = x + rl[k].x;
 -	  x2 = x + rl[k].x + (rl[k].width - 1);
 -	  y1 = y + rl[k].y;
 -	  y2 = y + rl[k].y + (rl[k].height - 1);
 -	  if (x1 < 0)
 -	    x1 = 0;
 -	  if (y1 < 0)
 -	    y1 = 0;
 -	  if (x2 >= basew)
 -	    x2 = basew - 1;
 -	  if (y2 >= baseh)
 -	    y2 = baseh - 1;
 -	  for (a = y1; a <= y2; a++)
 -	    {
 -	      if ((x2 - x1) >= 0)
 -		gdk_add_to_span (&spans[a], x1, x2);
 -	    }
 -	}
 -      XFree (rl);
 +  rl = g_new (GdkRectangle, rn);
 +  for (i = 0; i < rn; i++)
 +    {
 +      rl[i].x = xrl[i].x;
 +      rl[i].y = xrl[i].y;
 +      rl[i].width = xrl[i].width;
 +      rl[i].height = xrl[i].height;
      }
 +  XFree (xrl);
 +  
 +  shape = _gdk_region_new_from_yxbanded_rects (rl, rn);
 +  g_free (rl);
- #endif
 +  
 +  return shape;
  }
  
 -static void
 -gdk_propagate_shapes (Display *disp,
 -		      Window   win,
 -		      gboolean merge,
 -		      int      shape)
 -{
 -  Window              rt, par, *list = NULL;
 -  gint                i, j, num = 0, num_rects = 0;
 -  gint                x, y, contig;
 -  guint               w, h, d;
 -  gint                baseh, basew;
 -  XRectangle         *rects = NULL;
 -  struct _gdk_span  **spans = NULL, *ptr1, *ptr2, *ptr3;
 -  XWindowAttributes   xatt;
 -  
 -  XGetGeometry (disp, win, &rt, &x, &y, &w, &h, &d, &d);
 -  if (h <= 0)
 -    return;
 -  basew = w;
 -  baseh = h;
 -  spans = g_malloc (sizeof (struct _gdk_span *) * h);
 +
 +GdkRegion *
 +_gdk_windowing_get_shape_for_mask (GdkBitmap *mask)
 +{
 +  GdkDisplay *display;
 +  Window window;
 +  GdkRegion *region;
 +
 +  display = gdk_drawable_get_display (GDK_DRAWABLE (mask));
 +
 +  window = XCreateSimpleWindow (GDK_DISPLAY_XDISPLAY (display),
 +				GDK_SCREEN_XROOTWIN (gdk_display_get_default_screen (display)),
 +				-1, -1, 1, 1, 0,
 +				0, 0);
 +  XShapeCombineMask (GDK_DISPLAY_XDISPLAY (display),
 +		     window,
 +		     ShapeBounding,
 +		     0, 0,
 +		     GDK_PIXMAP_XID (mask),
 +		     ShapeSet);
    
 -  for (i = 0; i < h; i++)
 -    spans[i] = NULL;
 -  XQueryTree (disp, win, &rt, &par, &list, (unsigned int *)&num);
 -  if (list)
 -    {
 -      /* go through all child windows and create/insert spans */
 -      for (i = 0; i < num; i++)
 -	{
 -	  if (XGetWindowAttributes (disp, list[i], &xatt) && (xatt.map_state != IsUnmapped))
 -	    if (XGetGeometry (disp, list[i], &rt, &x, &y, &w, &h, &d, &d))
 -	      gdk_add_rectangles (disp, list[i], spans, basew, baseh, x, y);
 -	}
 -      if (merge)
 -	gdk_add_rectangles (disp, win, spans, basew, baseh, x, y);
 -      
 -      /* go through the spans list and build a list of rects */
 -      rects = g_malloc (sizeof (XRectangle) * 256);
 -      num_rects = 0;
 -      for (i = 0; i < baseh; i++)
 -	{
 -	  ptr1 = spans[i];
 -	  /* go through the line for all spans */
 -	  while (ptr1)
 -	    {
 -	      rects[num_rects].x = ptr1->start;
 -	      rects[num_rects].y = i;
 -	      rects[num_rects].width = ptr1->end - ptr1->start + 1;
 -	      rects[num_rects].height = 1;
 -	      j = i + 1;
 -	      /* if there are more lines */
 -	      contig = 1;
 -	      /* while contigous rects (same start/end coords) exist */
 -	      while ((contig) && (j < baseh))
 -		{
 -		  /* search next line for spans matching this one */
 -		  contig = 0;
 -		  ptr2 = spans[j];
 -		  ptr3 = NULL;
 -		  while (ptr2)
 -		    {
 -		      /* if we have an exact span match set contig */
 -		      if ((ptr2->start == ptr1->start) &&
 -			  (ptr2->end == ptr1->end))
 -			{
 -			  contig = 1;
 -			  /* remove the span - not needed */
 -			  if (ptr3)
 -			    {
 -			      ptr3->next = ptr2->next;
 -			      g_free (ptr2);
 -			      ptr2 = NULL;
 -			    }
 -			  else
 -			    {
 -			      spans[j] = ptr2->next;
 -			      g_free (ptr2);
 -			      ptr2 = NULL;
 -			    }
 -			  break;
 -			}
 -		      /* gone past the span point no point looking */
 -		      else if (ptr2->start < ptr1->start)
 -			break;
 -		      if (ptr2)
 -			{
 -			  ptr3 = ptr2;
 -			  ptr2 = ptr2->next;
 -			}
 -		    }
 -		  /* if a contiguous span was found increase the rect h */
 -		  if (contig)
 -		    {
 -		      rects[num_rects].height++;
 -		      j++;
 -		    }
 -		}
 -	      /* up the rect count */
 -	      num_rects++;
 -	      /* every 256 new rects increase the rect array */
 -	      if ((num_rects % 256) == 0)
 -		rects = g_realloc (rects, sizeof (XRectangle) * (num_rects + 256));
 -	      ptr1 = ptr1->next;
 -	    }
 -	}
 -      /* set the rects as the shape mask */
 -      if (rects)
 -	{
 -	  XShapeCombineRectangles (disp, win, shape, 0, 0, rects, num_rects,
 -				   ShapeSet, YXSorted);
 -	  g_free (rects);
 -	}
 -      XFree (list);
 -    }
 -  /* free up all the spans we made */
 -  for (i = 0; i < baseh; i++)
 -    {
 -      ptr1 = spans[i];
 -      while (ptr1)
 -	{
 -	  ptr2 = ptr1;
 -	  ptr1 = ptr1->next;
 -	  g_free (ptr2);
 -	}
 -    }
 -  g_free (spans);
 +  region = xwindow_get_shape (GDK_DISPLAY_XDISPLAY (display),
 +			      window, ShapeBounding);
 +
 +  XDestroyWindow (GDK_DISPLAY_XDISPLAY (display),
 +		  window);
 +
 +  return region;
  }
  
 -static inline void
 -do_child_shapes (GdkWindow *window,
 -                 gboolean   merge)
 +GdkRegion *
 +_gdk_windowing_window_get_shape (GdkWindow *window)
  {
- #if defined(HAVE_SHAPE_EXT)
    if (!GDK_WINDOW_DESTROYED (window) &&
        gdk_display_supports_shapes (GDK_WINDOW_DISPLAY (window)))
 -    {
 -      gdk_propagate_shapes (GDK_WINDOW_XDISPLAY (window),
 -                            GDK_WINDOW_XID (window),
 -                            merge,
 -                            ShapeBounding);
 -    }
 -}
 +    return xwindow_get_shape (GDK_WINDOW_XDISPLAY (window),
 +			      GDK_WINDOW_XID (window), ShapeBounding);
- #endif
  
 -static void
 -gdk_window_x11_set_child_shapes (GdkWindow *window)
 -{
 -  do_child_shapes (window, FALSE);
 +  return NULL;
  }
  
 -static void
 -gdk_window_x11_merge_child_shapes (GdkWindow *window)
 -{
 -  do_child_shapes (window, TRUE);
 -}
 -
 -static inline void
 -do_child_input_shapes (GdkWindow *window,
 -                       gboolean   merge)
 +GdkRegion *
 +_gdk_windowing_window_get_input_shape (GdkWindow *window)
  {
- #if defined(HAVE_SHAPE_EXT)
+ #if defined(ShapeInput)
    if (!GDK_WINDOW_DESTROYED (window) &&
        gdk_display_supports_shapes (GDK_WINDOW_DISPLAY (window)))
 -    {
 -      gdk_propagate_shapes (GDK_WINDOW_XDISPLAY (window),
 -                            GDK_WINDOW_XID (window),
 -                            merge,
 -                            ShapeInput);
 -    }
 +    return xwindow_get_shape (GDK_WINDOW_XDISPLAY (window),
 +			      GDK_WINDOW_XID (window),
 +			      ShapeInput);
  #endif
 -}
  
 -/**
 - * gdk_window_set_child_input_shapes:
 - * @window: a #GdkWindow
 - * 
 - * Sets the input shape mask of @window to the union of input shape masks
 - * for all children of @window, ignoring the input shape mask of @window
 - * itself. Contrast with gdk_window_merge_child_input_shapes() which includes
 - * the input shape mask of @window in the masks to be merged.
 - *
 - * Since: 2.10
 - **/
 -void 
 -gdk_window_set_child_input_shapes (GdkWindow *window)
 -{
 -  g_return_if_fail (GDK_IS_WINDOW (window));
 -  
 -  do_child_input_shapes (window, FALSE);
 +  return NULL;
  }
  
 -/**
 - * gdk_window_merge_child_input_shapes:
 - * @window: a #GdkWindow
 - * 
 - * Merges the input shape masks for any child windows into the
 - * input shape mask for @window. i.e. the union of all input masks
 - * for @window and its children will become the new input mask
 - * for @window. See gdk_window_input_shape_combine_mask().
 - *
 - * This function is distinct from gdk_window_set_child_input_shapes()
 - * because it includes @window's input shape mask in the set of 
 - * shapes to be merged.
 - *
 - * Since: 2.10
 - **/
 -void 
 -gdk_window_merge_child_input_shapes (GdkWindow *window)
 -{
 -  g_return_if_fail (GDK_IS_WINDOW (window));
 -  
 -  do_child_input_shapes (window, TRUE);
 -}
 -
 -
  static void
  gdk_window_set_static_bit_gravity (GdkWindow *window,
                                     gboolean   on)
diff --cc tests/Makefile.am
index 48e4405,d5b07e7..db68626
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@@ -56,7 -55,7 +56,8 @@@ noinst_PROGRAMS =  $(TEST_PROGS)	
  	testmultiscreen			\
  	testnotebookdnd			\
  	testnouiprint			\
 +	testoffscreen			\
+ 	testorientable			\
  	testprint			\
  	testrgb				\
  	testrecentchooser 		\
@@@ -137,7 -134,7 +138,8 @@@ testmultidisplay_DEPENDENCIES = $(TEST_
  testmultiscreen_DEPENDENCIES = $(TEST_DEPS)
  testnotebookdnd_DEPENDENCIES = $(TEST_DEPS)
  testnouiprint_DEPENDENCIES = $(TEST_DEPS)
 +testoffscreen_DEPENDENCIES = $(TEST_DEPS)
+ testorientable_DEPENDENCIES = $(TEST_DEPS)
  testprint_DEPENDENCIES = $(TEST_DEPS)
  testrecentchooser_DEPENDENCIES = $(TEST_DEPS)
  testrecentchoosermenu_DEPENDENCIES = $(TEST_DEPS)
@@@ -198,7 -193,7 +200,8 @@@ testmultidisplay_LDADD = $(LDADDS
  testmultiscreen_LDADD = $(LDADDS)
  testnotebookdnd_LDADD = $(LDADDS)
  testnouiprint_LDADD = $(LDADDS)
 +testoffscreen_LDADD = $(LDADDS)
+ testorientable_LDADD = $(LDADDS)
  testprint_LDADD = $(LDADDS)
  testrecentchooser_LDADD = $(LDADDS)
  testrecentchoosermenu_LDADD = $(LDADDS)



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