[mutter] clutter: Remove stage fullscreening



commit a61d525111efbb895f2812ab4073b304828f2992
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Sat Jun 8 17:06:13 2019 +0200

    clutter: Remove stage fullscreening
    
    Another unneeded feature related to clutter originally being an
    application library that we have no use for when we're only ever a
    compositor.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/616

 clutter/clutter/clutter-enums.h               |   2 -
 clutter/clutter/clutter-main.c                |   2 +-
 clutter/clutter/clutter-stage-private.h       |   1 -
 clutter/clutter/clutter-stage-window.c        |  10 -
 clutter/clutter/clutter-stage-window.h        |   4 -
 clutter/clutter/clutter-stage.c               | 271 +++----------------------
 clutter/clutter/clutter-stage.h               |   9 -
 clutter/clutter/x11/clutter-backend-x11.c     |  16 +-
 clutter/clutter/x11/clutter-backend-x11.h     |   1 -
 clutter/clutter/x11/clutter-stage-x11.c       | 280 +-------------------------
 clutter/clutter/x11/clutter-stage-x11.h       |   2 -
 clutter/tests/interactive/test-events.c       |  41 +---
 clutter/tests/interactive/test-grab.c         |   4 -
 clutter/tests/interactive/test-stage-sizing.c |  38 ----
 14 files changed, 45 insertions(+), 636 deletions(-)
---
diff --git a/clutter/clutter/clutter-enums.h b/clutter/clutter/clutter-enums.h
index 462bdee6e..f455e0dd5 100644
--- a/clutter/clutter/clutter-enums.h
+++ b/clutter/clutter/clutter-enums.h
@@ -974,7 +974,6 @@ typedef enum /*< prefix=CLUTTER_SCROLL >*/
 
 /**
  * ClutterStageState:
- * @CLUTTER_STAGE_STATE_FULLSCREEN: Fullscreen mask
  * @CLUTTER_STAGE_STATE_OFFSCREEN: Offscreen mask (deprecated)
  * @CLUTTER_STAGE_STATE_ACTIVATED: Activated mask
  *
@@ -984,7 +983,6 @@ typedef enum /*< prefix=CLUTTER_SCROLL >*/
  */
 typedef enum
 {
-  CLUTTER_STAGE_STATE_FULLSCREEN       = (1 << 1),
   CLUTTER_STAGE_STATE_OFFSCREEN        = (1 << 2),
   CLUTTER_STAGE_STATE_ACTIVATED        = (1 << 3)
 } ClutterStageState;
diff --git a/clutter/clutter/clutter-main.c b/clutter/clutter/clutter-main.c
index 66bc88de0..6b776601a 100644
--- a/clutter/clutter/clutter-main.c
+++ b/clutter/clutter/clutter-main.c
@@ -2552,7 +2552,7 @@ _clutter_process_event_details (ClutterActor        *stage,
         break;
 
       case CLUTTER_STAGE_STATE:
-        /* fullscreen / focus - forward to stage */
+        /* focus - forward to stage */
         event->any.source = stage;
         if (!_clutter_event_process_filters (event))
           clutter_stage_event (CLUTTER_STAGE (stage), event);
diff --git a/clutter/clutter/clutter-stage-private.h b/clutter/clutter/clutter-stage-private.h
index 4799c29e1..74d4f7bfd 100644
--- a/clutter/clutter/clutter-stage-private.h
+++ b/clutter/clutter/clutter-stage-private.h
@@ -117,7 +117,6 @@ void            _clutter_stage_remove_touch_drag_actor (ClutterStage         *st
 
 ClutterStageState       _clutter_stage_get_state        (ClutterStage      *stage);
 gboolean                _clutter_stage_is_activated     (ClutterStage      *stage);
-gboolean                _clutter_stage_is_fullscreen    (ClutterStage      *stage);
 gboolean                _clutter_stage_update_state     (ClutterStage      *stage,
                                                          ClutterStageState  unset_state,
                                                          ClutterStageState  set_state);
diff --git a/clutter/clutter/clutter-stage-window.c b/clutter/clutter/clutter-stage-window.c
index 29930b2c7..76421d6a0 100644
--- a/clutter/clutter/clutter-stage-window.c
+++ b/clutter/clutter/clutter-stage-window.c
@@ -62,16 +62,6 @@ _clutter_stage_window_set_title (ClutterStageWindow *window,
     iface->set_title (window, title);
 }
 
-void
-_clutter_stage_window_set_fullscreen (ClutterStageWindow *window,
-                                      gboolean            is_fullscreen)
-{
-  ClutterStageWindowInterface *iface = CLUTTER_STAGE_WINDOW_GET_IFACE (window);
-
-  if (iface->set_fullscreen)
-    iface->set_fullscreen (window, is_fullscreen);
-}
-
 void
 _clutter_stage_window_set_cursor_visible (ClutterStageWindow *window,
                                           gboolean            is_visible)
diff --git a/clutter/clutter/clutter-stage-window.h b/clutter/clutter/clutter-stage-window.h
index e374e2fa6..389ed0596 100644
--- a/clutter/clutter/clutter-stage-window.h
+++ b/clutter/clutter/clutter-stage-window.h
@@ -30,8 +30,6 @@ struct _ClutterStageWindowInterface
 
   void              (* set_title)               (ClutterStageWindow *stage_window,
                                                  const gchar        *title);
-  void              (* set_fullscreen)          (ClutterStageWindow *stage_window,
-                                                 gboolean            is_fullscreen);
   void              (* set_cursor_visible)      (ClutterStageWindow *stage_window,
                                                  gboolean            cursor_visible);
 
@@ -81,8 +79,6 @@ ClutterActor *    _clutter_stage_window_get_wrapper        (ClutterStageWindow *
 
 void              _clutter_stage_window_set_title          (ClutterStageWindow *window,
                                                             const gchar        *title);
-void              _clutter_stage_window_set_fullscreen     (ClutterStageWindow *window,
-                                                            gboolean            is_fullscreen);
 void              _clutter_stage_window_set_cursor_visible (ClutterStageWindow *window,
                                                             gboolean            is_visible);
 
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 3d8d666bc..e9164d5df 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -152,7 +152,6 @@ struct _ClutterStagePrivate
 
   guint relayout_pending       : 1;
   guint redraw_pending         : 1;
-  guint is_fullscreen          : 1;
   guint is_cursor_visible      : 1;
   guint use_fog                : 1;
   guint throttle_motion_events : 1;
@@ -169,7 +168,6 @@ enum
   PROP_0,
 
   PROP_COLOR,
-  PROP_FULLSCREEN_SET,
   PROP_OFFSCREEN,
   PROP_CURSOR_VISIBLE,
   PROP_PERSPECTIVE,
@@ -184,8 +182,6 @@ enum
 
 enum
 {
-  FULLSCREEN,
-  UNFULLSCREEN,
   ACTIVATE,
   DEACTIVATE,
   DELETE_EVENT,
@@ -402,40 +398,37 @@ clutter_stage_allocate (ClutterActor           *self,
                                     flags | CLUTTER_DELEGATE_LAYOUT);
 
       /* Ensure the window is sized correctly */
-      if (!priv->is_fullscreen)
+      if (priv->min_size_changed)
         {
-          if (priv->min_size_changed)
-            {
-              gfloat min_width, min_height;
-              gboolean min_width_set, min_height_set;
-
-              g_object_get (G_OBJECT (self),
-                            "min-width", &min_width,
-                            "min-width-set", &min_width_set,
-                            "min-height", &min_height,
-                            "min-height-set", &min_height_set,
-                            NULL);
-
-              if (!min_width_set)
-                min_width = 1;
-              if (!min_height_set)
-                min_height = 1;
-
-              if (width < min_width)
-                width = min_width;
-              if (height < min_height)
-                height = min_height;
-
-              priv->min_size_changed = FALSE;
-            }
+          gfloat min_width, min_height;
+          gboolean min_width_set, min_height_set;
+
+          g_object_get (G_OBJECT (self),
+                        "min-width", &min_width,
+                        "min-width-set", &min_width_set,
+                        "min-height", &min_height,
+                        "min-height-set", &min_height_set,
+                        NULL);
+
+          if (!min_width_set)
+            min_width = 1;
+          if (!min_height_set)
+            min_height = 1;
+
+          if (width < min_width)
+            width = min_width;
+          if (height < min_height)
+            height = min_height;
+
+          priv->min_size_changed = FALSE;
+        }
 
-          if (window_size.width != CLUTTER_NEARBYINT (width) ||
-              window_size.height != CLUTTER_NEARBYINT (height))
-            {
-              _clutter_stage_window_resize (priv->impl,
-                                            CLUTTER_NEARBYINT (width),
-                                            CLUTTER_NEARBYINT (height));
-            }
+      if (window_size.width != CLUTTER_NEARBYINT (width) ||
+          window_size.height != CLUTTER_NEARBYINT (height))
+        {
+          _clutter_stage_window_resize (priv->impl,
+                                        CLUTTER_NEARBYINT (width),
+                                        CLUTTER_NEARBYINT (height));
         }
     }
   else
@@ -845,40 +838,6 @@ clutter_stage_real_deactivate (ClutterStage *stage)
   clutter_stage_emit_key_focus_event (stage, FALSE);
 }
 
-static void
-clutter_stage_real_fullscreen (ClutterStage *stage)
-{
-  ClutterStagePrivate *priv = stage->priv;
-  cairo_rectangle_int_t geom;
-  ClutterActorBox box;
-
-  /* we need to force an allocation here because the size
-   * of the stage might have been changed by the backend
-   *
-   * this is a really bad solution to the issues caused by
-   * the fact that fullscreening the stage on the X11 backends
-   * is really an asynchronous operation
-   */
-  _clutter_stage_window_get_geometry (priv->impl, &geom);
-
-  box.x1 = 0;
-  box.y1 = 0;
-  box.x2 = geom.width;
-  box.y2 = geom.height;
-
-  /* we need to blow the caching on the Stage size, given that
-   * we're about to force an allocation, because if anything
-   * ends up querying the size of the stage during the allocate()
-   * call, like constraints or signal handlers, we'll get into an
-   * inconsistent state: the stage will report the old cached size,
-   * but the allocation will be updated anyway.
-   */
-  clutter_actor_set_size (CLUTTER_ACTOR (stage), -1.0, -1.0);
-  clutter_actor_allocate (CLUTTER_ACTOR (stage),
-                          &box,
-                          CLUTTER_ALLOCATION_NONE);
-}
-
 void
 _clutter_stage_queue_event (ClutterStage *stage,
                             ClutterEvent *event,
@@ -1790,10 +1749,6 @@ clutter_stage_get_property (GObject    *gobject,
       g_value_set_boolean (value, FALSE);
       break;
 
-    case PROP_FULLSCREEN_SET:
-      g_value_set_boolean (value, priv->is_fullscreen);
-      break;
-
     case PROP_CURSOR_VISIBLE:
       g_value_set_boolean (value, priv->is_cursor_visible);
       break;
@@ -1929,27 +1884,6 @@ clutter_stage_class_init (ClutterStageClass *klass)
   actor_class->queue_redraw = clutter_stage_real_queue_redraw;
   actor_class->apply_transform = clutter_stage_real_apply_transform;
 
-  /**
-   * ClutterStage:fullscreen:
-   *
-   * Whether the stage should be fullscreen or not.
-   *
-   * This property is set by calling clutter_stage_set_fullscreen()
-   * but since the actual implementation is delegated to the backend
-   * you should connect to the notify::fullscreen-set signal in order
-   * to get notification if the fullscreen state has been successfully
-   * achieved.
-   *
-   * Since: 1.0
-   */
-  pspec = g_param_spec_boolean ("fullscreen-set",
-                                P_("Fullscreen Set"),
-                                P_("Whether the main stage is fullscreen"),
-                                FALSE,
-                                CLUTTER_PARAM_READABLE);
-  g_object_class_install_property (gobject_class,
-                                   PROP_FULLSCREEN_SET,
-                                   pspec);
   /**
    * ClutterStage:offscreen:
    *
@@ -2125,39 +2059,6 @@ clutter_stage_class_init (ClutterStageClass *klass)
                                 CLUTTER_PARAM_READWRITE);
   g_object_class_install_property (gobject_class, PROP_ACCEPT_FOCUS, pspec);
 
-  /**
-   * ClutterStage::fullscreen:
-   * @stage: the stage which was fullscreened
-   *
-   * The ::fullscreen signal is emitted when the stage is made fullscreen.
-   *
-   * Since: 0.6
-   */
-  stage_signals[FULLSCREEN] =
-    g_signal_new (I_("fullscreen"),
-                 G_TYPE_FROM_CLASS (gobject_class),
-                 G_SIGNAL_RUN_FIRST,
-                 G_STRUCT_OFFSET (ClutterStageClass, fullscreen),
-                 NULL, NULL,
-                 _clutter_marshal_VOID__VOID,
-                 G_TYPE_NONE, 0);
-  /**
-   * ClutterStage::unfullscreen:
-   * @stage: the stage which has left a fullscreen state.
-   *
-   * The ::unfullscreen signal is emitted when the stage leaves a fullscreen
-   * state.
-   *
-   * Since: 0.6
-   */
-  stage_signals[UNFULLSCREEN] =
-    g_signal_new (I_("unfullscreen"),
-                 G_TYPE_FROM_CLASS (gobject_class),
-                 G_SIGNAL_RUN_LAST,
-                 G_STRUCT_OFFSET (ClutterStageClass, unfullscreen),
-                 NULL, NULL,
-                 _clutter_marshal_VOID__VOID,
-                 G_TYPE_NONE, 0);
   /**
    * ClutterStage::activate:
    * @stage: the stage which was activated
@@ -2258,7 +2159,6 @@ clutter_stage_class_init (ClutterStageClass *klass)
                   G_TYPE_NONE, 2,
                   G_TYPE_INT, G_TYPE_POINTER);
 
-  klass->fullscreen = clutter_stage_real_fullscreen;
   klass->activate = clutter_stage_real_activate;
   klass->deactivate = clutter_stage_real_deactivate;
   klass->delete_event = clutter_stage_real_delete_event;
@@ -2309,7 +2209,6 @@ clutter_stage_init (ClutterStage *self)
 
   priv->event_queue = g_queue_new ();
 
-  priv->is_fullscreen = FALSE;
   priv->is_cursor_visible = TRUE;
   priv->use_fog = FALSE;
   priv->throttle_motion_events = TRUE;
@@ -2705,80 +2604,6 @@ _clutter_stage_get_viewport (ClutterStage *stage,
   *height = priv->viewport[3];
 }
 
-/**
- * clutter_stage_set_fullscreen:
- * @stage: a #ClutterStage
- * @fullscreen: %TRUE to to set the stage fullscreen
- *
- * Asks to place the stage window in the fullscreen or unfullscreen
- * states.
- *
- ( Note that you shouldn't assume the window is definitely full screen
- * afterward, because other entities (e.g. the user or window manager)
- * could unfullscreen it again, and not all window managers honor
- * requests to fullscreen windows.
- *
- * If you want to receive notification of the fullscreen state you
- * should either use the #ClutterStage::fullscreen and
- * #ClutterStage::unfullscreen signals, or use the notify signal
- * for the #ClutterStage:fullscreen-set property
- *
- * Since: 1.0
- */
-void
-clutter_stage_set_fullscreen (ClutterStage *stage,
-                              gboolean      fullscreen)
-{
-  ClutterStagePrivate *priv;
-
-  g_return_if_fail (CLUTTER_IS_STAGE (stage));
-
-  priv = stage->priv;
-
-  if (priv->is_fullscreen != fullscreen)
-    {
-      ClutterStageWindow *impl = CLUTTER_STAGE_WINDOW (priv->impl);
-      ClutterStageWindowInterface *iface;
-
-      iface = CLUTTER_STAGE_WINDOW_GET_IFACE (impl);
-
-      /* Only set if backend implements.
-       *
-       * Also see clutter_stage_event() for setting priv->is_fullscreen
-       * on state change event.
-       */
-      if (iface->set_fullscreen)
-       iface->set_fullscreen (impl, fullscreen);
-    }
-
-  /* If the backend did fullscreen the stage window then we need to resize
-   * the stage and update its viewport so we queue a relayout.  Note: if the
-   * fullscreen request is handled asynchronously we can't rely on this
-   * queue_relayout to update the viewport, but for example the X backend
-   * will recieve a ConfigureNotify after a successful resize which is how
-   * we ensure the viewport is updated on X.
-   */
-  clutter_actor_queue_relayout (CLUTTER_ACTOR (stage));
-}
-
-/**
- * clutter_stage_get_fullscreen:
- * @stage: a #ClutterStage
- *
- * Retrieves whether the stage is full screen or not
- *
- * Return value: %TRUE if the stage is full screen
- *
- * Since: 1.0
- */
-gboolean
-clutter_stage_get_fullscreen (ClutterStage *stage)
-{
-  g_return_val_if_fail (CLUTTER_IS_STAGE (stage), FALSE);
-
-  return stage->priv->is_fullscreen;
-}
-
 /**
  * clutter_stage_show_cursor:
  * @stage: a #ClutterStage
@@ -2990,13 +2815,9 @@ gboolean
 clutter_stage_event (ClutterStage *stage,
                      ClutterEvent *event)
 {
-  ClutterStagePrivate *priv;
-
   g_return_val_if_fail (CLUTTER_IS_STAGE (stage), FALSE);
   g_return_val_if_fail (event != NULL, FALSE);
 
-  priv = stage->priv;
-
   if (event->type == CLUTTER_DELETE)
     {
       gboolean retval = FALSE;
@@ -3016,24 +2837,6 @@ clutter_stage_event (ClutterStage *stage,
   if (clutter_actor_event (CLUTTER_ACTOR (stage), event, FALSE))
     return TRUE;
 
-  if (event->stage_state.changed_mask & CLUTTER_STAGE_STATE_FULLSCREEN)
-    {
-      if (event->stage_state.new_state & CLUTTER_STAGE_STATE_FULLSCREEN)
-       {
-         priv->is_fullscreen = TRUE;
-         g_signal_emit (stage, stage_signals[FULLSCREEN], 0);
-
-          g_object_notify (G_OBJECT (stage), "fullscreen-set");
-       }
-      else
-       {
-         priv->is_fullscreen = FALSE;
-         g_signal_emit (stage, stage_signals[UNFULLSCREEN], 0);
-
-          g_object_notify (G_OBJECT (stage), "fullscreen-set");
-       }
-    }
-
   if (event->stage_state.changed_mask & CLUTTER_STAGE_STATE_ACTIVATED)
     {
       if (event->stage_state.new_state & CLUTTER_STAGE_STATE_ACTIVATED)
@@ -3888,8 +3691,6 @@ clutter_stage_get_use_alpha (ClutterStage *stage)
  * If the current size of @stage is smaller than the minimum size, the
  * @stage will be resized to the new @width and @height
  *
- * This function has no effect if @stage is fullscreen
- *
  * Since: 1.2
  */
 void
@@ -4576,20 +4377,6 @@ _clutter_stage_is_activated (ClutterStage *stage)
   return (stage->priv->current_state & CLUTTER_STAGE_STATE_ACTIVATED) != 0;
 }
 
-/*< private >
- * _clutter_stage_is_fullscreen:
- * @stage: a #ClutterStage
- *
- * Checks whether the @stage state includes %CLUTTER_STAGE_STATE_FULLSCREEN.
- *
- * Return value: %TRUE if the @stage is fullscreen
- */
-gboolean
-_clutter_stage_is_fullscreen (ClutterStage *stage)
-{
-  return (stage->priv->current_state & CLUTTER_STAGE_STATE_FULLSCREEN) != 0;
-}
-
 /*< private >
  * _clutter_stage_update_state:
  * @stage: a #ClutterStage
diff --git a/clutter/clutter/clutter-stage.h b/clutter/clutter/clutter-stage.h
index a3f0de3b8..1b8708b0f 100644
--- a/clutter/clutter/clutter-stage.h
+++ b/clutter/clutter/clutter-stage.h
@@ -61,8 +61,6 @@ struct _ClutterStage
 };
 /**
  * ClutterStageClass:
- * @fullscreen: handler for the #ClutterStage::fullscreen signal
- * @unfullscreen: handler for the #ClutterStage::unfullscreen signal
  * @activate: handler for the #ClutterStage::activate signal
  * @deactivate: handler for the #ClutterStage::deactivate signal
  * @delete_event: handler for the #ClutterStage::delete-event signal
@@ -79,8 +77,6 @@ struct _ClutterStageClass
 
   /*< public >*/
   /* signals */
-  void (* fullscreen)   (ClutterStage *stage);
-  void (* unfullscreen) (ClutterStage *stage);
   void (* activate)     (ClutterStage *stage);
   void (* deactivate)   (ClutterStage *stage);
 
@@ -168,11 +164,6 @@ CLUTTER_EXPORT
 void            clutter_stage_get_perspective                   (ClutterStage          *stage,
                                                                 ClutterPerspective    *perspective);
 CLUTTER_EXPORT
-void            clutter_stage_set_fullscreen                    (ClutterStage          *stage,
-                                                                 gboolean               fullscreen);
-CLUTTER_EXPORT
-gboolean        clutter_stage_get_fullscreen                    (ClutterStage          *stage);
-CLUTTER_EXPORT
 void            clutter_stage_show_cursor                       (ClutterStage          *stage);
 CLUTTER_EXPORT
 void            clutter_stage_hide_cursor                       (ClutterStage          *stage);
diff --git a/clutter/clutter/x11/clutter-backend-x11.c b/clutter/clutter/x11/clutter-backend-x11.c
index 4caf66b1f..fa4e9bf16 100644
--- a/clutter/clutter/x11/clutter-backend-x11.c
+++ b/clutter/clutter/x11/clutter-backend-x11.c
@@ -89,7 +89,6 @@ static const gchar *atom_names[] = {
   "_NET_WM_PID",
   "_NET_WM_PING",
   "_NET_WM_STATE",
-  "_NET_WM_STATE_FULLSCREEN",
   "_NET_WM_USER_TIME",
   "WM_PROTOCOLS",
   "WM_DELETE_WINDOW",
@@ -441,14 +440,13 @@ clutter_backend_x11_post_parse (ClutterBackend  *backend,
   backend_x11->atom_NET_WM_PID = atoms[0];
   backend_x11->atom_NET_WM_PING = atoms[1];
   backend_x11->atom_NET_WM_STATE = atoms[2];
-  backend_x11->atom_NET_WM_STATE_FULLSCREEN = atoms[3];
-  backend_x11->atom_NET_WM_USER_TIME = atoms[4];
-  backend_x11->atom_WM_PROTOCOLS = atoms[5];
-  backend_x11->atom_WM_DELETE_WINDOW = atoms[6];
-  backend_x11->atom_XEMBED = atoms[7];
-  backend_x11->atom_XEMBED_INFO = atoms[8];
-  backend_x11->atom_NET_WM_NAME = atoms[9];
-  backend_x11->atom_UTF8_STRING = atoms[10];
+  backend_x11->atom_NET_WM_USER_TIME = atoms[3];
+  backend_x11->atom_WM_PROTOCOLS = atoms[4];
+  backend_x11->atom_WM_DELETE_WINDOW = atoms[5];
+  backend_x11->atom_XEMBED = atoms[6];
+  backend_x11->atom_XEMBED_INFO = atoms[7];
+  backend_x11->atom_NET_WM_NAME = atoms[8];
+  backend_x11->atom_UTF8_STRING = atoms[9];
 
   g_free (clutter_display_name);
 
diff --git a/clutter/clutter/x11/clutter-backend-x11.h b/clutter/clutter/x11/clutter-backend-x11.h
index 387132b92..3fa74c4c8 100644
--- a/clutter/clutter/x11/clutter-backend-x11.h
+++ b/clutter/clutter/x11/clutter-backend-x11.h
@@ -89,7 +89,6 @@ struct _ClutterBackendX11
   Atom atom_NET_WM_PID;
   Atom atom_NET_WM_PING;
   Atom atom_NET_WM_STATE;
-  Atom atom_NET_WM_STATE_FULLSCREEN;
   Atom atom_NET_WM_USER_TIME;
   Atom atom_WM_PROTOCOLS;
   Atom atom_WM_DELETE_WINDOW;
diff --git a/clutter/clutter/x11/clutter-stage-x11.c b/clutter/clutter/x11/clutter-stage-x11.c
index 7c51b2791..4f0cc0cf5 100644
--- a/clutter/clutter/x11/clutter-stage-x11.c
+++ b/clutter/clutter/x11/clutter-stage-x11.c
@@ -87,60 +87,6 @@ G_DEFINE_TYPE_WITH_CODE (ClutterStageX11,
   ButtonReleaseMask | \
   PointerMotionMask
 
-static void
-send_wmspec_change_state (ClutterBackendX11 *backend_x11,
-                          Window             window,
-                          Atom               state,
-                          gboolean           add)
-{
-  XClientMessageEvent xclient;
-
-  CLUTTER_NOTE (BACKEND, "%s NET_WM state", add ? "adding" : "removing");
-
-  memset (&xclient, 0, sizeof (xclient));
-
-  xclient.type         = ClientMessage;
-  xclient.window       = window;
-  xclient.message_type = backend_x11->atom_NET_WM_STATE;
-  xclient.format       = 32;
-
-  xclient.data.l[0] = add ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE;
-  xclient.data.l[1] = state;
-  xclient.data.l[2] = 0;
-  xclient.data.l[3] = 0;
-  xclient.data.l[4] = 0;
-
-  XSendEvent (backend_x11->xdpy, 
-              DefaultRootWindow (backend_x11->xdpy),
-              False,
-              SubstructureRedirectMask | SubstructureNotifyMask,
-              (XEvent *)&xclient);
-}
-
-static void
-update_state (ClutterStageX11   *stage_x11,
-              ClutterBackendX11 *backend_x11,
-              Atom              *state,
-              gboolean           add)
-{
-  if (add)
-    {
-      /* FIXME: This wont work if we support more states */
-      XChangeProperty (backend_x11->xdpy,
-                       stage_x11->xwin,
-                       backend_x11->atom_NET_WM_STATE, XA_ATOM, 32,
-                       PropModeReplace,
-                       (unsigned char *) state, 1);
-    }
-  else
-    {
-       /* FIXME: This wont work if we support more states */
-       XDeleteProperty (backend_x11->xdpy,
-                        stage_x11->xwin,
-                        backend_x11->atom_NET_WM_STATE);
-    }
-}
-
 static void
 clutter_stage_x11_fix_window_size (ClutterStageX11 *stage_x11,
                                    gint             new_width,
@@ -166,18 +112,11 @@ clutter_stage_x11_fix_window_size (ClutterStageX11 *stage_x11,
       if (new_height <= 0)
         new_height = min_height;
 
-      size_hints->flags = 0;
-
-      /* If we are going fullscreen then we don't want any
-         restrictions on the window size */
-      if (!stage_x11->fullscreening)
-        {
-          size_hints->min_width = new_width;
-          size_hints->min_height = new_height;
-          size_hints->max_width = new_width;
-          size_hints->max_height = new_height;
-          size_hints->flags = PMinSize | PMaxSize;
-        }
+      size_hints->min_width = new_width;
+      size_hints->min_height = new_height;
+      size_hints->max_width = new_width;
+      size_hints->max_height = new_height;
+      size_hints->flags = PMinSize | PMaxSize;
 
       XSetWMNormalHints (backend_x11->xdpy, stage_x11->xwin, size_hints);
 
@@ -204,28 +143,8 @@ clutter_stage_x11_get_geometry (ClutterStageWindow    *stage_window,
                                 cairo_rectangle_int_t *geometry)
 {
   ClutterStageX11 *stage_x11 = CLUTTER_STAGE_X11 (stage_window);
-  ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_x11);
-  ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (stage_cogl->backend);
 
   geometry->x = geometry->y = 0;
-
-  /* If we're fullscreen, return the size of the display.
-   *
-   * FIXME - this is utterly broken for anything that is not a single
-   * head set up; the window manager will give us the right size in a
-   * ConfigureNotify, but between the fullscreen signal emission on the
-   * stage and the following frame, the size returned by the stage will
-   * be wrong.
-   */
-  if (_clutter_stage_is_fullscreen (stage_cogl->wrapper) &&
-      stage_x11->fullscreening)
-    {
-      geometry->width = DisplayWidth (backend_x11->xdpy, backend_x11->xscreen_num);
-      geometry->height = DisplayHeight (backend_x11->xdpy, backend_x11->xscreen_num);
-
-      return;
-    }
-
   geometry->width = stage_x11->xwin_width;
   geometry->height = stage_x11->xwin_height;
 }
@@ -251,10 +170,6 @@ clutter_stage_x11_resize (ClutterStageWindow *stage_window,
       return;
     }
 
-  /* If we're going fullscreen, don't mess with the size */
-  if (stage_x11->fullscreening)
-    return;
-
   if (width == 0 || height == 0)
     {
       /* Should not happen, if this turns up we need to debug it and
@@ -448,117 +363,6 @@ _clutter_stage_x11_update_foreign_event_mask (CoglOnscreen *onscreen,
                            &attrs);
 }
 
-static void
-clutter_stage_x11_set_fullscreen (ClutterStageWindow *stage_window,
-                                  gboolean            is_fullscreen)
-{
-  ClutterStageX11 *stage_x11 = CLUTTER_STAGE_X11 (stage_window);
-  ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_x11);
-  ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (stage_cogl->backend);
-  ClutterStage *stage = stage_cogl->wrapper;
-  gboolean was_fullscreen;
-
-  if (stage == NULL || CLUTTER_ACTOR_IN_DESTRUCTION (stage))
-    return;
-
-  was_fullscreen = _clutter_stage_is_fullscreen (stage);
-  is_fullscreen = !!is_fullscreen;
-
-  if (was_fullscreen == is_fullscreen)
-    return;
-
-  CLUTTER_NOTE (BACKEND, "%ssetting fullscreen", is_fullscreen ? "" : "un");
-
-  if (is_fullscreen)
-    {
-#if 0
-      int width, height;
-
-      /* FIXME: this will do the wrong thing for dual-headed
-         displays. This will return the size of the combined display
-         but Metacity (at least) will fullscreen to only one of the
-         displays. This will cause the actor to report the wrong size
-         until the ConfigureNotify for the correct size is received */
-      width  = DisplayWidth (backend_x11->xdpy, backend_x11->xscreen_num);
-      height = DisplayHeight (backend_x11->xdpy, backend_x11->xscreen_num);
-#endif
-
-      /* Set the fullscreen hint so we can retain the old size of the window. */
-      stage_x11->fullscreening = TRUE;
-
-      if (stage_x11->xwin != None)
-        {
-          /* if the actor is not mapped we resize the stage window to match
-           * the size of the screen; this is useful for e.g. EGLX to avoid
-           * a resize when calling clutter_stage_fullscreen() before showing
-           * the stage
-           */
-          if (!STAGE_X11_IS_MAPPED (stage_x11))
-            {
-              CLUTTER_NOTE (BACKEND, "Fullscreening unmapped stage");
-
-              update_state (stage_x11, backend_x11,
-                            &backend_x11->atom_NET_WM_STATE_FULLSCREEN,
-                            TRUE);
-            }
-          else
-            {
-              CLUTTER_NOTE (BACKEND, "Fullscreening mapped stage");
-
-              /* We need to fix the window size so that it will remove
-                 the maximum and minimum window hints. Otherwise
-                 metacity will honour the restrictions and not
-                 fullscreen correctly. */
-              clutter_stage_x11_fix_window_size (stage_x11, -1, -1);
-
-              send_wmspec_change_state (backend_x11, stage_x11->xwin,
-                                        backend_x11->atom_NET_WM_STATE_FULLSCREEN,
-                                        TRUE);
-            }
-        }
-      else
-        stage_x11->fullscreen_on_realize = TRUE;
-    }
-  else
-    {
-      stage_x11->fullscreening = FALSE;
-
-      if (stage_x11->xwin != None)
-        {
-          if (!STAGE_X11_IS_MAPPED (stage_x11))
-            {
-              CLUTTER_NOTE (BACKEND, "Un-fullscreening unmapped stage");
-
-              update_state (stage_x11, backend_x11,
-                            &backend_x11->atom_NET_WM_STATE_FULLSCREEN,
-                            FALSE);
-            }
-          else
-            {
-              CLUTTER_NOTE (BACKEND, "Un-fullscreening mapped stage");
-
-              send_wmspec_change_state (backend_x11,
-                                        stage_x11->xwin,
-                                        backend_x11->atom_NET_WM_STATE_FULLSCREEN,
-                                        FALSE);
-
-              /* Fix the window size to restore the minimum/maximum
-                 restriction */
-              clutter_stage_x11_fix_window_size (stage_x11,
-                                                 stage_x11->xwin_width,
-                                                 stage_x11->xwin_height);
-            }
-        }
-      else
-        stage_x11->fullscreen_on_realize = FALSE;
-    }
-
-  /* XXX: Note we rely on the ConfigureNotify mechanism as the common
-   * mechanism to handle notifications of new X window sizes from the
-   * X server so we don't actively change the stage viewport here or
-   * queue a relayout etc. */
-}
-
 void
 _clutter_stage_x11_events_device_changed (ClutterStageX11 *stage_x11,
                                           ClutterInputDevice *device,
@@ -710,13 +514,6 @@ clutter_stage_x11_realize (ClutterStageWindow *stage_window)
                                      stage_x11->xwin_height);
   clutter_stage_x11_set_wm_protocols (stage_x11);
 
-  if (stage_x11->fullscreen_on_realize)
-    {
-      stage_x11->fullscreen_on_realize = FALSE;
-
-      clutter_stage_x11_set_fullscreen (stage_window, TRUE);
-    }
-
   CLUTTER_NOTE (BACKEND, "Successfully realized stage");
 
   return TRUE;
@@ -817,11 +614,6 @@ clutter_stage_x11_show (ClutterStageWindow *stage_window,
           set_stage_x11_state (stage_x11, STAGE_X11_WITHDRAWN, 0);
 
           update_wm_hints (stage_x11);
-
-          if (stage_x11->fullscreening)
-            clutter_stage_x11_set_fullscreen (stage_window, TRUE);
-          else
-            clutter_stage_x11_set_fullscreen (stage_window, FALSE);
         }
 
       g_assert (STAGE_X11_IS_MAPPED (stage_x11));
@@ -943,7 +735,6 @@ clutter_stage_x11_init (ClutterStageX11 *stage)
   stage->wm_state = STAGE_X11_WITHDRAWN;
 
   stage->is_foreign_xwin = FALSE;
-  stage->fullscreening = FALSE;
   stage->is_cursor_visible = TRUE;
   stage->accept_focus = TRUE;
 
@@ -956,7 +747,6 @@ clutter_stage_window_iface_init (ClutterStageWindowInterface *iface)
   clutter_stage_window_parent_iface = g_type_interface_peek_parent (iface);
 
   iface->set_title = clutter_stage_x11_set_title;
-  iface->set_fullscreen = clutter_stage_x11_set_fullscreen;
   iface->set_cursor_visible = clutter_stage_x11_set_cursor_visible;
   iface->set_accept_focus = clutter_stage_x11_set_accept_focus;
   iface->show = clutter_stage_x11_show;
@@ -1077,13 +867,8 @@ clutter_stage_x11_translate_event (ClutterEventTranslator *translator,
                         xevent->xconfigure.width,
                         xevent->xconfigure.height);
 
-          /* When fullscreen, we'll keep the xwin_width/height
-             variables to track the old size of the window and we'll
-             assume all ConfigureNotifies constitute a size change */
-          if (_clutter_stage_is_fullscreen (stage))
-            size_changed = TRUE;
-          else if ((stage_x11->xwin_width != xevent->xconfigure.width) ||
-                   (stage_x11->xwin_height != xevent->xconfigure.height))
+          if ((stage_x11->xwin_width != xevent->xconfigure.width) ||
+              (stage_x11->xwin_height != xevent->xconfigure.height))
             {
               size_changed = TRUE;
               stage_x11->xwin_width = xevent->xconfigure.width;
@@ -1173,57 +958,6 @@ clutter_stage_x11_translate_event (ClutterEventTranslator *translator,
         }
       break;
 
-    case PropertyNotify:
-      if (xevent->xproperty.atom == backend_x11->atom_NET_WM_STATE &&
-          xevent->xproperty.window == stage_xwindow &&
-          !stage_x11->is_foreign_xwin)
-        {
-          Atom     type;
-          gint     format;
-          gulong   n_items, bytes_after;
-          guchar  *data = NULL;
-          gboolean fullscreen_set = FALSE;
-
-          clutter_x11_trap_x_errors ();
-          XGetWindowProperty (backend_x11->xdpy, stage_xwindow,
-                              backend_x11->atom_NET_WM_STATE,
-                              0, G_MAXLONG,
-                              False, XA_ATOM,
-                              &type, &format, &n_items,
-                              &bytes_after, &data);
-          clutter_x11_untrap_x_errors ();
-
-          if (type != None && data != NULL)
-            {
-              gboolean is_fullscreen = FALSE;
-              Atom *atoms = (Atom *) data;
-              gulong i;
-
-              for (i = 0; i < n_items; i++)
-                {
-                  if (atoms[i] == backend_x11->atom_NET_WM_STATE_FULLSCREEN)
-                    fullscreen_set = TRUE;
-                }
-
-              is_fullscreen = _clutter_stage_is_fullscreen (stage_cogl->wrapper);
-
-              if (fullscreen_set != is_fullscreen)
-                {
-                  if (fullscreen_set)
-                    _clutter_stage_update_state (stage_cogl->wrapper,
-                                                 0,
-                                                 CLUTTER_STAGE_STATE_FULLSCREEN);
-                  else
-                    _clutter_stage_update_state (stage_cogl->wrapper,
-                                                 CLUTTER_STAGE_STATE_FULLSCREEN,
-                                                 0);
-                }
-
-              XFree (data);
-            }
-        }
-      break;
-
     case FocusIn:
       if (!_clutter_stage_is_activated (stage_cogl->wrapper))
         {
diff --git a/clutter/clutter/x11/clutter-stage-x11.h b/clutter/clutter/x11/clutter-stage-x11.h
index e2be10bec..cf3db2df7 100644
--- a/clutter/clutter/x11/clutter-stage-x11.h
+++ b/clutter/clutter/x11/clutter-stage-x11.h
@@ -70,11 +70,9 @@ struct _ClutterStageX11
   ClutterStageX11State wm_state;
 
   guint is_foreign_xwin       : 1;
-  guint fullscreening         : 1;
   guint is_cursor_visible     : 1;
   guint viewport_initialized  : 1;
   guint accept_focus          : 1;
-  guint fullscreen_on_realize : 1;
 };
 
 struct _ClutterStageX11Class
diff --git a/clutter/tests/interactive/test-events.c b/clutter/tests/interactive/test-events.c
index bfc5c22bc..013231ef8 100644
--- a/clutter/tests/interactive/test-events.c
+++ b/clutter/tests/interactive/test-events.c
@@ -2,7 +2,7 @@
 #include <clutter/clutter.h>
 #include <string.h>
 
-gboolean IsFullScreen = FALSE, IsMotion = TRUE;
+gboolean IsMotion = TRUE;
 
 int
 test_events_main (int argc, char *argv[]);
@@ -114,28 +114,6 @@ stage_state_cb (ClutterStage    *stage,
   printf("[stage signal] %s\n", detail);
 }
 
-static gboolean
-blue_button_cb (ClutterActor *actor,
-               ClutterEvent *event,
-               gpointer      data)
-{
-  ClutterActor *stage;
-
-  stage = clutter_actor_get_stage (actor);
-
-  if (IsFullScreen)
-    IsFullScreen = FALSE;
-  else
-    IsFullScreen = TRUE;
-
-  clutter_stage_set_fullscreen (CLUTTER_STAGE (stage), IsFullScreen);
-
-  g_print ("*** Fullscreen %s ***\n",
-           IsFullScreen ? "enabled" : "disabled");
-
-  return FALSE;
-}
-
 static gboolean
 red_button_cb (ClutterActor *actor,
                ClutterEvent *event,
@@ -429,10 +407,6 @@ test_events_main (int argc, char *argv[])
   clutter_actor_set_name (stage, "Stage");
   g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
   g_signal_connect (stage, "event", G_CALLBACK (input_cb), (char *) "stage");
-  g_signal_connect (stage, "fullscreen", 
-                   G_CALLBACK (stage_state_cb), (char *) "fullscreen");
-  g_signal_connect (stage, "unfullscreen", 
-                   G_CALLBACK (stage_state_cb), (char *) "unfullscreen");
   g_signal_connect (stage, "activate", 
                    G_CALLBACK (stage_state_cb), (char *) "activate");
   g_signal_connect (stage, "deactivate", 
@@ -468,19 +442,6 @@ test_events_main (int argc, char *argv[])
                    focus_box);
   g_signal_connect (actor, "captured-event", G_CALLBACK (capture_cb), NULL);
 
-  actor = clutter_rectangle_new_with_color (CLUTTER_COLOR_Blue);
-  clutter_actor_set_name (actor, "Blue Box");
-  clutter_actor_set_size (actor, 100, 100);
-  clutter_actor_set_position (actor, 400, 100);
-  clutter_actor_set_reactive (actor, TRUE);
-  clutter_container_add (CLUTTER_CONTAINER(stage), actor, NULL);
-  g_signal_connect (actor, "event", G_CALLBACK (input_cb), (char *) "blue box");
-  g_signal_connect (actor, "key-focus-in", G_CALLBACK (key_focus_in_cb),
-                   focus_box);
-  /* Fullscreen */
-  g_signal_connect (actor, "button-press-event",
-                    G_CALLBACK (blue_button_cb), NULL);
-
   /* non reactive */
   actor = clutter_rectangle_new_with_color (CLUTTER_COLOR_Black);
   clutter_actor_set_name (actor, "Black Box");
diff --git a/clutter/tests/interactive/test-grab.c b/clutter/tests/interactive/test-grab.c
index 3cef9d712..7c03a397b 100644
--- a/clutter/tests/interactive/test-grab.c
+++ b/clutter/tests/interactive/test-grab.c
@@ -218,10 +218,6 @@ test_grab_main (int argc, char *argv[])
   g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
   g_signal_connect (stage, "event",
                     G_CALLBACK (debug_event_cb), (char *) "stage");
-  g_signal_connect (stage, "fullscreen", 
-                   G_CALLBACK (stage_state_cb), (char *) "fullscreen");
-  g_signal_connect (stage, "unfullscreen", 
-                   G_CALLBACK (stage_state_cb), (char *) "unfullscreen");
   g_signal_connect (stage, "activate", 
                    G_CALLBACK (stage_state_cb), (char *) "activate");
   g_signal_connect (stage, "deactivate", 
diff --git a/clutter/tests/interactive/test-stage-sizing.c b/clutter/tests/interactive/test-stage-sizing.c
index f739fa4d8..c4fedb956 100644
--- a/clutter/tests/interactive/test-stage-sizing.c
+++ b/clutter/tests/interactive/test-stage-sizing.c
@@ -8,13 +8,6 @@ test_stage_sizing_main (int argc, char *argv[]);
 const char *
 test_stage_sizing_describe (void);
 
-static gboolean
-fullscreen_clicked_cb (ClutterStage *stage)
-{
-  clutter_stage_set_fullscreen (stage, !clutter_stage_get_fullscreen (stage));
-  return CLUTTER_EVENT_STOP;
-}
-
 static gboolean
 shrink_clicked_cb (ClutterActor *stage)
 {
@@ -33,22 +26,6 @@ expand_clicked_cb (ClutterActor *stage)
   return CLUTTER_EVENT_STOP;
 }
 
-static void
-on_fullscreen (ClutterStage *stage)
-{
-  float width, height;
-  gboolean is_fullscreen;
-
-  is_fullscreen = clutter_stage_get_fullscreen (stage);
-
-  clutter_actor_get_size (CLUTTER_ACTOR (stage), &width, &height);
-
-  g_print ("Stage size [%s]: %d x %d\n",
-           is_fullscreen ? "fullscreen" : "not fullscreen",
-           (int) width,
-           (int) height);
-}
-
 G_MODULE_EXPORT int
 test_stage_sizing_main (int argc, char *argv[])
 {
@@ -61,27 +38,12 @@ test_stage_sizing_main (int argc, char *argv[])
   stage = clutter_stage_new ();
   clutter_stage_set_title (CLUTTER_STAGE (stage), "Stage Sizing");
   g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
-  g_signal_connect_after (stage, "notify::fullscreen-set", G_CALLBACK (on_fullscreen), NULL);
 
   box = clutter_actor_new ();
   clutter_actor_set_layout_manager (box, clutter_box_layout_new ());
   clutter_actor_add_constraint (box, clutter_align_constraint_new (stage, CLUTTER_ALIGN_BOTH, 0.5));
   clutter_actor_add_child (stage, box);
 
-  rect = clutter_actor_new ();
-  clutter_actor_set_layout_manager (rect,
-                                    clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER,
-                                                            CLUTTER_BIN_ALIGNMENT_CENTER));
-  clutter_actor_set_background_color (rect, CLUTTER_COLOR_LightScarletRed);
-  clutter_actor_set_reactive (rect, TRUE);
-  g_signal_connect_swapped (rect, "button-press-event",
-                            G_CALLBACK (fullscreen_clicked_cb),
-                            stage);
-  label = clutter_text_new_with_text ("Sans 16", "Toggle fullscreen");
-  clutter_actor_set_margin (label, &margin);
-  clutter_actor_add_child (rect, label);
-  clutter_actor_add_child (box, rect);
-
   rect = clutter_actor_new ();
   clutter_actor_set_layout_manager (rect,
                                     clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER,



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