[gtk/wip/matthiasc/kill-non-input-events] gdk: Drop map events



commit 7ca6440f4d1c6a0921cfd310e1993d0a7c8e082d
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Jul 15 14:23:54 2018 -0400

    gdk: Drop map events
    
    We are really inconsistent about generating these,
    and they are not actually used in GTK+. Instead,
    add a boolean GdkSurface::mapped property.

 gdk/broadway/gdksurface-broadway.c | 10 ++-----
 gdk/gdkevents.c                    |  4 ---
 gdk/gdkevents.h                    |  4 ---
 gdk/gdksurface.c                   | 54 +++++++++++++++++---------------------
 gdk/wayland/gdksurface-wayland.c   |  2 --
 gdk/win32/gdkevents-win32.c        | 16 -----------
 gdk/x11/gdkdisplay-x11.c           | 10 +++----
 gtk/gtkmain.c                      | 15 -----------
 gtk/gtkwidget.c                    |  2 --
 9 files changed, 30 insertions(+), 87 deletions(-)
---
diff --git a/gdk/broadway/gdksurface-broadway.c b/gdk/broadway/gdksurface-broadway.c
index cdacb5d0fc..a752420410 100644
--- a/gdk/broadway/gdksurface-broadway.c
+++ b/gdk/broadway/gdksurface-broadway.c
@@ -322,10 +322,7 @@ gdk_surface_broadway_show (GdkSurface *surface,
   impl = GDK_SURFACE_IMPL_BROADWAY (surface->impl);
   impl->visible = TRUE;
 
-  _gdk_make_event (GDK_SURFACE (surface), GDK_MAP, NULL, FALSE);
-
-  if (surface->parent)
-    _gdk_make_event (GDK_SURFACE (surface), GDK_MAP, NULL, FALSE);
+  /* FIXME: update state ? */
 
   broadway_display = GDK_BROADWAY_DISPLAY (gdk_surface_get_display (surface));
   if (_gdk_broadway_server_surface_show (broadway_display->server, impl->id))
@@ -342,10 +339,7 @@ gdk_surface_broadway_hide (GdkSurface *surface)
   impl = GDK_SURFACE_IMPL_BROADWAY (surface->impl);
   impl->visible = FALSE;
 
-  _gdk_make_event (GDK_SURFACE (surface), GDK_UNMAP, NULL, FALSE);
-
-  if (surface->parent)
-    _gdk_make_event (GDK_SURFACE (surface), GDK_UNMAP, NULL, FALSE);
+  /* FIXME: update state ? */
 
   broadway_display = GDK_BROADWAY_DISPLAY (gdk_surface_get_display (surface));
 
diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
index 9ccde4f32b..b53c146943 100644
--- a/gdk/gdkevents.c
+++ b/gdk/gdkevents.c
@@ -821,8 +821,6 @@ gdk_event_get_time (const GdkEvent *event)
       case GDK_NOTHING:
       case GDK_DELETE:
       case GDK_DESTROY:
-      case GDK_MAP:
-      case GDK_UNMAP:
       case GDK_GRAB_BROKEN:
       case GDK_EVENT_LAST:
       default:
@@ -895,8 +893,6 @@ gdk_event_get_state (const GdkEvent  *event,
       case GDK_NOTHING:
       case GDK_DELETE:
       case GDK_DESTROY:
-      case GDK_MAP:
-      case GDK_UNMAP:
       case GDK_GRAB_BROKEN:
       case GDK_PAD_BUTTON_PRESS:
       case GDK_PAD_BUTTON_RELEASE:
diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
index a39d036d04..d725abf28c 100644
--- a/gdk/gdkevents.h
+++ b/gdk/gdkevents.h
@@ -151,8 +151,6 @@ typedef void (*GdkEventFunc) (GdkEvent *event,
  * @GDK_ENTER_NOTIFY: the pointer has entered the surface.
  * @GDK_LEAVE_NOTIFY: the pointer has left the surface.
  * @GDK_FOCUS_CHANGE: the keyboard focus has entered or left the surface.
- * @GDK_MAP: the surface has been mapped.
- * @GDK_UNMAP: the surface has been unmapped.
  * @GDK_PROXIMITY_IN: an input device has moved into contact with a sensing
  *   surface (e.g. a touchscreen or graphics tablet).
  * @GDK_PROXIMITY_OUT: an input device has moved out of contact with a sensing
@@ -208,8 +206,6 @@ typedef enum
   GDK_ENTER_NOTIFY,
   GDK_LEAVE_NOTIFY,
   GDK_FOCUS_CHANGE,
-  GDK_MAP,
-  GDK_UNMAP,
   GDK_PROXIMITY_IN,
   GDK_PROXIMITY_OUT,
   GDK_DRAG_ENTER,
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index 622f1d5eea..db80d00eb6 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -107,6 +107,7 @@ enum {
   PROP_CURSOR,
   PROP_DISPLAY,
   PROP_STATE,
+  PROP_MAPPED,
   LAST_PROP
 };
 
@@ -273,6 +274,13 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
                           GDK_TYPE_SURFACE_STATE, GDK_SURFACE_STATE_WITHDRAWN,
                           G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+  properties[PROP_MAPPED] =
+      g_param_spec_boolean ("mapped",
+                            P_("Mapped"),
+                            P_("Mapped"),
+                            FALSE,
+                            G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
   g_object_class_install_properties (object_class, LAST_PROP, properties);
 
   /**
@@ -443,6 +451,10 @@ gdk_surface_get_property (GObject    *object,
       g_value_set_flags (value, surface->state);
       break;
 
+    case PROP_MAPPED:
+      g_value_set_boolean (value, GDK_SURFACE_IS_MAPPED (surface));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -973,6 +985,7 @@ _gdk_surface_destroy_hierarchy (GdkSurface *surface,
       surface_remove_from_pointer_info (surface, display);
 
       g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_STATE]);
+      g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_MAPPED]);
       break;
     }
 }
@@ -2270,6 +2283,7 @@ gdk_surface_show_internal (GdkSurface *surface, gboolean raise)
     {
       surface->state = 0;
       g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_STATE]);
+      g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_MAPPED]);
     }
 
   did_show = _gdk_surface_update_viewable (surface);
@@ -2285,14 +2299,6 @@ gdk_surface_show_internal (GdkSurface *surface, gboolean raise)
       impl_class->show (surface, !did_show ? was_mapped : TRUE);
     }
 
-  if (!was_mapped && !gdk_surface_has_impl (surface))
-    {
-      _gdk_make_event (surface, GDK_MAP, NULL, FALSE);
-
-      if (surface->parent)
-        _gdk_make_event (surface, GDK_MAP, NULL, FALSE);
-    }
-
   if (!was_mapped || did_raise)
     {
       recompute_visible_regions (surface, FALSE);
@@ -2549,6 +2555,7 @@ gdk_surface_hide (GdkSurface *surface)
     {
       surface->state = GDK_SURFACE_STATE_WITHDRAWN;
       g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_STATE]);
+      g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_MAPPED]);
     }
 
   if (was_mapped)
@@ -2595,14 +2602,6 @@ G_GNUC_END_IGNORE_DEPRECATIONS
 
   recompute_visible_regions (surface, FALSE);
 
-  if (was_mapped && !gdk_surface_has_impl (surface))
-    {
-      _gdk_make_event (surface, GDK_UNMAP, NULL, FALSE);
-
-      if (surface->parent)
-        _gdk_make_event (surface, GDK_UNMAP, NULL, FALSE);
-    }
-
   /* Invalidate the rect */
   if (was_mapped)
     gdk_surface_invalidate_in_parent (surface);
@@ -2620,7 +2619,6 @@ void
 gdk_surface_withdraw (GdkSurface *surface)
 {
   GdkSurfaceImplClass *impl_class;
-  gboolean was_mapped;
   GdkGLContext *current_context;
 
   g_return_if_fail (GDK_IS_SURFACE (surface));
@@ -2628,21 +2626,11 @@ gdk_surface_withdraw (GdkSurface *surface)
   if (surface->destroyed)
     return;
 
-  was_mapped = GDK_SURFACE_IS_MAPPED (surface);
-
   if (gdk_surface_has_impl (surface))
     {
       impl_class = GDK_SURFACE_IMPL_GET_CLASS (surface->impl);
       impl_class->withdraw (surface);
 
-      if (was_mapped)
-        {
-          _gdk_make_event (surface, GDK_UNMAP, NULL, FALSE);
-
-          if (surface->parent)
-            _gdk_make_event (surface, GDK_UNMAP, NULL, FALSE);
-        }
-
       current_context = gdk_gl_context_get_current ();
       if (current_context != NULL && gdk_gl_context_get_surface (current_context) == surface)
         gdk_gl_context_clear_current ();
@@ -3939,8 +3927,6 @@ _gdk_make_event (GdkSurface    *surface,
       break;
 
     case GDK_FOCUS_CHANGE:
-    case GDK_MAP:
-    case GDK_UNMAP:
     case GDK_DELETE:
     case GDK_DESTROY:
     default:
@@ -5496,6 +5482,7 @@ void
 gdk_surface_set_state (GdkSurface      *surface,
                        GdkSurfaceState  new_state)
 {
+  gboolean was_mapped, mapped;
   g_return_if_fail (GDK_IS_SURFACE (surface));
 
   if (new_state == surface->state)
@@ -5506,8 +5493,12 @@ gdk_surface_set_state (GdkSurface      *surface,
    * inconsistent state to the user.
    */
 
+  was_mapped = GDK_SURFACE_IS_MAPPED (surface);
+
   surface->state = new_state;
 
+  mapped = GDK_SURFACE_IS_MAPPED (surface);
+
   _gdk_surface_update_viewable (surface);
 
   /* We only really send the event to toplevels, since
@@ -5519,12 +5510,15 @@ gdk_surface_set_state (GdkSurface      *surface,
     {
     case GDK_SURFACE_TOPLEVEL:
     case GDK_SURFACE_TEMP: /* ? */
-      g_object_notify (G_OBJECT (surface), "state");
+      g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_STATE]);
       break;
     case GDK_SURFACE_CHILD:
     default:
       break;
     }
+
+  if (was_mapped != mapped)
+    g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_MAPPED]);
 }
 
 void
diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c
index d2a18ea970..ce0b5d773d 100644
--- a/gdk/wayland/gdksurface-wayland.c
+++ b/gdk/wayland/gdksurface-wayland.c
@@ -2628,8 +2628,6 @@ gdk_wayland_surface_show (GdkSurface *surface,
     gdk_wayland_surface_create_surface (surface);
 
   gdk_wayland_surface_map (surface);
-
-  _gdk_make_event (surface, GDK_MAP, NULL, FALSE);
 }
 
 static void
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index 28e3a49acf..c18422f8b2 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -785,8 +785,6 @@ _gdk_win32_print_event (const GdkEvent *event)
     CASE (GDK_ENTER_NOTIFY);
     CASE (GDK_LEAVE_NOTIFY);
     CASE (GDK_FOCUS_CHANGE);
-    CASE (GDK_MAP);
-    CASE (GDK_UNMAP);
     CASE (GDK_PROXIMITY_IN);
     CASE (GDK_PROXIMITY_OUT);
     CASE (GDK_DRAG_ENTER);
@@ -3106,15 +3104,6 @@ gdk_event_translate (MSG  *msg,
           gdk_device_ungrab (device, msg -> time);
     }
 
-      /* Send MAP events  */
-      if ((windowpos->flags & SWP_SHOWWINDOW) &&
-         !GDK_SURFACE_DESTROYED (window))
-       {
-         event = gdk_event_new (GDK_MAP);
-         event->any.surface = window;
-         _gdk_win32_append_event (event);
-       }
-
       /* Update window state */
       if (windowpos->flags & (SWP_STATECHANGED | SWP_SHOWWINDOW | SWP_HIDEWINDOW))
        {
@@ -3173,11 +3162,6 @@ gdk_event_translate (MSG  *msg,
       if ((windowpos->flags & SWP_HIDEWINDOW) &&
          !GDK_SURFACE_DESTROYED (window))
        {
-         /* Send UNMAP events  */
-         event = gdk_event_new (GDK_UNMAP);
-         event->any.surface = window;
-         _gdk_win32_append_event (event);
-
          /* Make transient parent the forground window when window unmaps */
          impl = GDK_SURFACE_IMPL_WIN32 (window->impl);
 
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index 2f157d3f8a..72ead44bbb 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -848,9 +848,6 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
                g_message ("unmap notify:\t\twindow: %ld",
                           xevent->xmap.window));
 
-      event->any.type = GDK_UNMAP;
-      event->any.surface = surface;
-
       if (surface && !is_substructure)
        {
           /* If the WM supports the _NET_WM_STATE_HIDDEN hint, we do not want to
@@ -885,6 +882,8 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
           _gdk_x11_surface_grab_check_unmap (surface, xevent->xany.serial);
         }
 
+      return_val = FALSE;
+
       break;
 
     case MapNotify:
@@ -892,9 +891,6 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
                g_message ("map notify:\t\twindow: %ld",
                           xevent->xmap.window));
 
-      event->any.type = GDK_MAP;
-      event->any.surface = surface;
-
       if (surface && !is_substructure)
        {
          /* Unset iconified if it was set */
@@ -907,6 +903,8 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
            gdk_surface_thaw_toplevel_updates (surface);
        }
 
+      return_val = FALSE;
+
       break;
 
     case ReparentNotify:
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index b21a6dd268..d92523a90d 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -1827,22 +1827,7 @@ gtk_main_do_event (GdkEvent *event)
         }
       break;
 
-    case GDK_MAP:
-      if (GTK_IS_WINDOW (event_widget) && !_gtk_widget_get_mapped (event_widget))
-        {
-          /* we should be be unmapped, but are getting a MapEvent, this may happen
-           * to toplevel XWindows if mapping was intercepted by a window manager
-           * and an unmap request occurred while the MapRequestEvent was still
-           * being handled. we work around this situation here by re-requesting
-           * the window being unmapped. more details can be found in:
-           *   http://bugzilla.gnome.org/show_bug.cgi?id=316180
-           */
-          gdk_surface_hide (_gtk_widget_get_surface (event_widget));
-        }
-      break;
-
     case GDK_FOCUS_CHANGE:
-    case GDK_UNMAP:
     case GDK_GRAB_BROKEN:
       if (!_gtk_widget_captured_event (event_widget, event))
         gtk_widget_event (event_widget, event);
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 3889d5fc86..514bc0ac4b 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -5270,8 +5270,6 @@ gtk_widget_event_internal (GtkWidget      *widget,
     case GDK_NOTHING:
     case GDK_DELETE:
     case GDK_DESTROY:
-    case GDK_MAP:
-    case GDK_UNMAP:
       return gtk_widget_emit_event_signals (widget, event);
     default:
       break;


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