mountoperation: Survive on Wayland
authorMatthias Clasen <mclasen@redhat.com>
Wed, 5 Oct 2022 00:15:43 +0000 (20:15 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 14 Dec 2022 12:26:43 +0000 (07:26 -0500)
The code was assuming it is dealing with an
X11 display, and trigger assertions. Fix that
to make it work at least as well as it does
on Windows.

gtk/gtkmountoperation-x11.c

index 251263303b62ca89f0054d20094c10fb6e230286..7239de8b7c48b8da15a4d87557dd08570e42cd8e 100644 (file)
@@ -543,32 +543,35 @@ _gtk_mount_operation_lookup_context_get (GdkDisplay *display)
   context->pid_to_window = g_hash_table_new (g_direct_hash, g_direct_equal);
   context->display = display;
 
-  mapping = NULL;
-  mapping_length = 0;
-  get_window_list (context->display,
-                   gdk_x11_display_get_xdisplay (context->display),
-                   gdk_x11_display_get_xrootwindow (context->display),
-                   gdk_x11_get_xatom_by_name_for_display (context->display,
-                                                          "_NET_CLIENT_LIST"),
-                   &mapping,
-                   &mapping_length);
-  for (n = 0; n < mapping_length; n++)
+  if (GDK_IS_X11_DISPLAY (display))
     {
-      int pid;
-
-      if (!get_cardinal (context->display,
-                         GDK_DISPLAY_XDISPLAY (context->display),
-                         mapping[n],
-                         gdk_x11_get_xatom_by_name_for_display (context->display,
-                                                                "_NET_WM_PID"),
-                         &pid))
-        continue;
-
-      g_hash_table_insert (context->pid_to_window,
-                           GINT_TO_POINTER (pid),
-                           GINT_TO_POINTER ((int) mapping[n]));
+      mapping = NULL;
+      mapping_length = 0;
+      get_window_list (context->display,
+                       gdk_x11_display_get_xdisplay (context->display),
+                       gdk_x11_display_get_xrootwindow (context->display),
+                       gdk_x11_get_xatom_by_name_for_display (context->display,
+                                                              "_NET_CLIENT_LIST"),
+                       &mapping,
+                       &mapping_length);
+      for (n = 0; n < mapping_length; n++)
+        {
+          int pid;
+
+          if (!get_cardinal (context->display,
+                             GDK_DISPLAY_XDISPLAY (context->display),
+                             mapping[n],
+                             gdk_x11_get_xatom_by_name_for_display (context->display,
+                                                                    "_NET_WM_PID"),
+                             &pid))
+            continue;
+
+          g_hash_table_insert (context->pid_to_window,
+                               GINT_TO_POINTER (pid),
+                               GINT_TO_POINTER ((int) mapping[n]));
+        }
+      g_free (mapping);
     }
-  g_free (mapping);
 
   return context;
 }
@@ -1001,6 +1004,9 @@ _gtk_mount_operation_lookup_info (GtkMountOperationLookupContext *context,
   g_return_val_if_fail (out_command_line != NULL && *out_command_line == NULL, FALSE);
   g_return_val_if_fail (out_texture != NULL && *out_texture == NULL, FALSE);
 
+  if (!GDK_IS_X11_DISPLAY (context->display))
+    return FALSE;
+
   /* We perform two different lookups for name and icon size.. this is
    * because we want the name from the window with WINDOWID and this
    * normally does not give you an icon