[gtk/wip/matthiasc/popup5: 32/108] surface: minor cleanup



commit d9f99eab0b4b6f0c0198c3a80eee915a6a7c1f50
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Mar 23 08:36:25 2019 -0400

    surface: minor cleanup
    
    Make gdk_surface_new fully private, and reduce the use
    of GdkSurfaceAttr.

 gdk/gdkinternals.h |   3 --
 gdk/gdksurface.c   | 141 +++++++++++++----------------------------------------
 2 files changed, 35 insertions(+), 109 deletions(-)
---
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h
index 3e0cc5be9a..17dad16b59 100644
--- a/gdk/gdkinternals.h
+++ b/gdk/gdkinternals.h
@@ -278,9 +278,6 @@ cairo_region_t *gdk_cairo_region_from_clip       (cairo_t         *cr);
  * Interfaces used by windowing code *
  *************************************/
 
-GdkSurface* gdk_surface_new               (GdkDisplay     *display,
-                                           GdkSurface      *parent,
-                                           GdkSurfaceAttr  *attributes);
 void       _gdk_surface_destroy           (GdkSurface      *surface,
                                            gboolean        foreign_destroy);
 void       gdk_surface_invalidate_rect    (GdkSurface           *surface,
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index 18cb731762..607c03501b 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -672,86 +672,48 @@ _gdk_surface_update_size (GdkSurface *surface)
   recompute_visible_regions (surface, FALSE);
 }
 
-GdkSurface*
-gdk_surface_new (GdkDisplay    *display,
-                 GdkSurface     *parent,
-                 GdkSurfaceAttr *attributes)
+static GdkSurface *
+gdk_surface_new (GdkDisplay     *display,
+                 gboolean        input_only,
+                 GdkSurfaceType  surface_type,
+                 int             x,
+                 int             y,
+                 int             width,
+                 int             height)
 {
   GdkSurface *surface;
-  gboolean native;
-
-  g_return_val_if_fail (attributes != NULL, NULL);
-
-  if (parent != NULL && GDK_SURFACE_DESTROYED (parent))
-    {
-      g_warning ("gdk_surface_new(): parent is destroyed");
-      return NULL;
-    }
+  GdkFrameClock *frame_clock;
+  GdkSurfaceAttr attributes;
 
   surface = _gdk_display_create_surface (display);
 
-  surface->parent = parent;
+  surface->parent = NULL;
 
   surface->accept_focus = TRUE;
   surface->focus_on_map = TRUE;
-
-  surface->x = attributes->x;
-  surface->y = attributes->y;
-  surface->width = (attributes->width > 1) ? (attributes->width) : (1);
-  surface->height = (attributes->height > 1) ? (attributes->height) : (1);
   surface->alpha = 255;
 
-  if (attributes->wclass == GDK_INPUT_ONLY)
-    surface->surface_type = GDK_SURFACE_TEMP;
-  else
-    surface->surface_type = attributes->surface_type;
-
-  /* Sanity checks */
-  switch (surface->surface_type)
-    {
-    case GDK_SURFACE_TOPLEVEL:
-    case GDK_SURFACE_TEMP:
-      if (parent != NULL)
-        g_warning (G_STRLOC "Toplevel surfaces must be created without a parent");
-      break;
-    default:
-      g_warning (G_STRLOC "cannot make surfaces of type %d", surface->surface_type);
-      return NULL;
-    }
-
-  if (attributes->wclass == GDK_INPUT_OUTPUT)
-    {
-      surface->input_only = FALSE;
-    }
-  else
-    {
-      surface->input_only = TRUE;
-    }
-
-  native = FALSE;
+  surface->x = x;
+  surface->y = y;
+  surface->width = width;
+  surface->height = height;
+  surface->input_only = input_only;
+  surface->surface_type = surface_type;
 
-  if (surface->parent != NULL)
-    surface->parent->children = g_list_concat (&surface->children_list_node, surface->parent->children);
-  else
-    {
-      GdkFrameClock *frame_clock = g_object_new (GDK_TYPE_FRAME_CLOCK_IDLE, NULL);
-      gdk_surface_set_frame_clock (surface, frame_clock);
-      g_object_unref (frame_clock);
+  g_warn_if_fail (!surface->input_only || surface->surface_type == GDK_SURFACE_TEMP);
 
-      native = TRUE; /* Always use native surfaces for toplevels */
-    }
+  frame_clock = g_object_new (GDK_TYPE_FRAME_CLOCK_IDLE, NULL);
+  gdk_surface_set_frame_clock (surface, frame_clock);
+  g_object_unref (frame_clock);
 
-  if (native)
-    {
-      /* Create the impl */
-      gdk_display_create_surface_impl (display, surface, parent, attributes);
-      surface->impl_surface = surface;
-    }
-  else
-    {
-      surface->impl_surface = g_object_ref (surface->parent->impl_surface);
-      surface->impl = g_object_ref (surface->impl_surface->impl);
-    }
+  attributes.wclass = input_only ? GDK_INPUT_ONLY : GDK_INPUT_OUTPUT;
+  attributes.surface_type = surface_type;
+  attributes.x = x;
+  attributes.y = y;
+  attributes.width = width;
+  attributes.height = height;
+  gdk_display_create_surface_impl (display, surface, NULL, &attributes);
+  surface->impl_surface = surface;
 
   recompute_visible_regions (surface, FALSE);
 
@@ -776,18 +738,9 @@ gdk_surface_new_toplevel (GdkDisplay *display,
                           gint        width,
                           gint        height)
 {
-  GdkSurfaceAttr attr;
-
   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
 
-  attr.wclass = GDK_INPUT_OUTPUT;
-  attr.x = 0;
-  attr.y = 0;
-  attr.width = width;
-  attr.height = height;
-  attr.surface_type = GDK_SURFACE_TOPLEVEL;
-
-  return gdk_surface_new (display, NULL, &attr);
+  return gdk_surface_new (display, FALSE, GDK_SURFACE_TOPLEVEL, 0, 0, width, height);
 }
 
 /**
@@ -804,19 +757,12 @@ GdkSurface *
 gdk_surface_new_popup (GdkDisplay         *display,
                        const GdkRectangle *position)
 {
-  GdkSurfaceAttr attr;
-
   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
   g_return_val_if_fail (position != NULL, NULL);
 
-  attr.wclass = GDK_INPUT_OUTPUT;
-  attr.x = position->x;
-  attr.y = position->y;
-  attr.width = position->width;
-  attr.height = position->height;
-  attr.surface_type = GDK_SURFACE_TEMP;
-
-  return gdk_surface_new (display, NULL, &attr);
+  return gdk_surface_new (display, FALSE, GDK_SURFACE_TEMP,
+                          position->x, position->y,
+                          position->width, position->height);
 }
 
 /**
@@ -836,19 +782,11 @@ gdk_surface_new_popup_full (GdkDisplay *display,
                             GdkSurface *parent)
 {
   GdkSurface *surface;
-  GdkSurfaceAttr attr;
 
   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
   g_return_val_if_fail (GDK_IS_SURFACE (parent), NULL);
 
-  attr.wclass = GDK_INPUT_OUTPUT;
-  attr.x = 0;
-  attr.y = 0;
-  attr.width = 100;
-  attr.height = 100;
-  attr.surface_type = GDK_SURFACE_TEMP;
-
-  surface = gdk_surface_new (display, NULL, &attr);
+  surface = gdk_surface_new (display, FALSE, GDK_SURFACE_TEMP, 0, 0, 100, 100);
   gdk_surface_set_transient_for (surface, parent);
   gdk_surface_set_type_hint (surface, GDK_SURFACE_TYPE_HINT_MENU);
 
@@ -869,18 +807,9 @@ gdk_surface_new_popup_full (GdkDisplay *display,
 GdkSurface *
 gdk_surface_new_temp (GdkDisplay *display)
 {
-  GdkSurfaceAttr attr;
-
   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
 
-  attr.wclass = GDK_INPUT_ONLY;
-  attr.x = -100;
-  attr.y = -100;
-  attr.width = 10;
-  attr.height = 10;
-  attr.surface_type = GDK_SURFACE_TEMP;
-
-  return gdk_surface_new (display, NULL, &attr);
+  return gdk_surface_new (display, TRUE, GDK_SURFACE_TEMP, -100, -100, 10, 10);
 }
 
 static void


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