[gnome-terminal] server: Don't try to open a non-default display



commit 36cce22417358dbbf009f6323c16f84a51745cba
Author: Christian Persch <chpe src gnome org>
Date:   Wed Nov 1 22:31:16 2017 +0100

    server: Don't try to open a non-default display
    
    This hasn't worked propertly anyway, e.g.
    https://bugzilla.gnome.org/show_bug.cgi?id=700267
    https://bugzilla.gnome.org/show_bug.cgi?id=719438
    https://bugzilla.gnome.org/show_bug.cgi?id=737694

 src/terminal-app.c          |   12 ++++++---
 src/terminal-app.h          |    2 +-
 src/terminal-client-utils.c |    7 +++--
 src/terminal-gdbus.c        |   33 +++++++++++-------------
 src/terminal-options.c      |    1 -
 src/terminal-options.h      |    1 -
 src/terminal-util.c         |   58 -------------------------------------------
 src/terminal-util.h         |    3 --
 src/terminal-window.c       |    7 ++---
 9 files changed, 31 insertions(+), 93 deletions(-)
---
diff --git a/src/terminal-app.c b/src/terminal-app.c
index e611a70..5790e6b 100644
--- a/src/terminal-app.c
+++ b/src/terminal-app.c
@@ -923,17 +923,21 @@ terminal_app_new (const char *app_id)
                        NULL);
 }
 
+/**
+ * terminal_app_new_window:
+ * @app:
+ * @monitor:
+ *
+ * Creates a new #TerminalWindow on the default display.
+ */
 TerminalWindow *
 terminal_app_new_window (TerminalApp *app,
-                         GdkScreen *screen)
+                         int monitor)
 {
   TerminalWindow *window;
 
   window = terminal_window_new (G_APPLICATION (app));
 
-  if (screen)
-    gtk_window_set_screen (GTK_WINDOW (window), screen);
-
   return window;
 }
 
diff --git a/src/terminal-app.h b/src/terminal-app.h
index 22436f1..89d405c 100644
--- a/src/terminal-app.h
+++ b/src/terminal-app.h
@@ -67,7 +67,7 @@ void terminal_app_remove_profile (TerminalApp *app,
                                   GSettings *profile);
 
 TerminalWindow * terminal_app_new_window   (TerminalApp *app,
-                                            GdkScreen *screen);
+                                            int monitor);
 
 TerminalScreen *terminal_app_new_terminal (TerminalApp     *app,
                                            TerminalWindow  *window,
diff --git a/src/terminal-client-utils.c b/src/terminal-client-utils.c
index 36a415c..2ab2feb 100644
--- a/src/terminal-client-utils.c
+++ b/src/terminal-client-utils.c
@@ -61,8 +61,9 @@ terminal_client_append_create_instance_options (GVariantBuilder *builder,
                                                 gboolean         fullscreen_window)
 {
   /* Bytestring options */
-  g_variant_builder_add (builder, "{sv}",
-                         "display", g_variant_new_bytestring (display_name));
+  if (display_name != NULL)
+    g_variant_builder_add (builder, "{sv}",
+                           "display", g_variant_new_bytestring (display_name));
   if (startup_id)
     g_variant_builder_add (builder, "{sv}",
                            "desktop-startup-id", g_variant_new_bytestring (startup_id));
@@ -173,7 +174,7 @@ terminal_client_get_fallback_startup_id  (void)
   XEvent event;
 
   display = gdk_display_get_default ();
-  if (!GDK_IS_X11_DISPLAY (display))
+  if (display == NULL || !GDK_IS_X11_DISPLAY (display))
     goto out;
 
   xdisplay = GDK_DISPLAY_XDISPLAY (display);
diff --git a/src/terminal-gdbus.c b/src/terminal-gdbus.c
index bb456b2..82405ff 100644
--- a/src/terminal-gdbus.c
+++ b/src/terminal-gdbus.c
@@ -409,31 +409,28 @@ terminal_factory_impl_create_instance (TerminalFactory *factory,
     window = TERMINAL_WINDOW (win);
     have_new_window = FALSE;
   } else {
-    const char *startup_id, *display_name, *role;
+    const char *startup_id, *role;
     gboolean start_maximized, start_fullscreen;
-    int screen_number;
-    GdkScreen *gdk_screen;
 
     /* Create a new window */
 
-    if (!g_variant_lookup (options, "display", "^&ay", &display_name)) {
-      g_dbus_method_invocation_return_error_literal (invocation, 
-                                                     G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS,
-                                                     "No display specified");
-      goto out;
+    /* We don't do multi-display anymore */
+#if 0
+    const char *display_name;
+    if (g_variant_lookup (options, "display", "^&ay", &display_name)) {
+      GdkDisplay *display = gdk_display_get_default ();
+      const char *default_display_name = display ? gdk_display_get_name (display) : NULL;
+
+      if (g_strcmp0 (default_display_name, display_name) != 0)
+        g_printerr ("Display \"%s\" requested but default display is \"%s\"\n",
+                    display_name, default_display_name);
+      /* Open window on our display anyway */
     }
+#endif
 
-    screen_number = 0;
-    gdk_screen = terminal_util_get_screen_by_display_name (display_name, screen_number);
-    if (gdk_screen == NULL) {
-      g_dbus_method_invocation_return_error (invocation, 
-                                             G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS,
-                                             "No screen %d on display \"%s\"",
-                                             screen_number, display_name);
-      goto out;
-    }
+    int monitor = 0;
 
-    window = terminal_app_new_window (app, gdk_screen);
+    window = terminal_app_new_window (app, monitor);
 
     if (g_variant_lookup (options, "desktop-startup-id", "^&ay", &startup_id))
       gtk_window_set_startup_id (GTK_WINDOW (window), startup_id);
diff --git a/src/terminal-options.c b/src/terminal-options.c
index 8349bea..478345e 100644
--- a/src/terminal-options.c
+++ b/src/terminal-options.c
@@ -967,7 +967,6 @@ terminal_options_parse (const char *working_directory,
   options->zoom_set = FALSE;
   options->any_wait = FALSE;
 
-  options->screen_number = -1;
   options->default_working_dir = g_strdup (working_directory);
 
   /* The old -x/--execute option is broken, so we need to pre-scan for it. */
diff --git a/src/terminal-options.h b/src/terminal-options.h
index d2945e2..85ee130 100644
--- a/src/terminal-options.h
+++ b/src/terminal-options.h
@@ -69,7 +69,6 @@ typedef struct
   gboolean remote_arguments;
   char    *startup_id;
   char    *display_name;
-  int      screen_number;
   gboolean show_preferences;
   GList   *initial_windows;
   gboolean default_window_menubar_forced;
diff --git a/src/terminal-util.c b/src/terminal-util.c
index f6980c5..6813f9e 100644
--- a/src/terminal-util.c
+++ b/src/terminal-util.c
@@ -699,64 +699,6 @@ terminal_util_add_proxy_env (GHashTable *env_table)
     }
 }
 
-GdkScreen*
-terminal_util_get_screen_by_display_name (const char *display_name,
-                                          int screen_number)
-{
-  GdkDisplay *display = NULL;
-  GdkScreen *screen = NULL;
-
-  /* --screen=screen_number overrides --display */
-
-  if (display_name == NULL)
-    display = gdk_display_get_default ();
-  else
-    {
-      GSList *displays, *l;
-      const char *period;
-
-      period = strrchr (display_name, '.');
-      if (period)
-        {
-          gulong n;
-          char *end;
-
-          errno = 0;
-          end = NULL;
-          n = g_ascii_strtoull (period + 1, &end, 0);
-          if (errno == 0 && (period + 1) != end)
-            screen_number = n;
-        }
-
-      displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
-      for (l = displays; l != NULL; l = l->next)
-        {
-          GdkDisplay *disp = l->data;
-
-          /* compare without the screen number part, if present */
-          if ((period && strncmp (gdk_display_get_name (disp), display_name, period - display_name) == 0) ||
-              (period == NULL && strcmp (gdk_display_get_name (disp), display_name) == 0))
-            {
-              display = disp;
-              break;
-            }
-        }
-      g_slist_free (displays);
-
-      if (display == NULL)
-        display = gdk_display_open (display_name); /* FIXME we never close displays */
-    }
-
-  if (display == NULL)
-    return NULL;
-  if (screen_number >= 0)
-    screen = gdk_display_get_screen (display, screen_number);
-  if (screen == NULL)
-    screen = gdk_display_get_default_screen (display);
-
-  return screen;
-}
-
 /**
  * terminal_util_get_etc_shells:
  *
diff --git a/src/terminal-util.h b/src/terminal-util.h
index d3b13f2..c49460e 100644
--- a/src/terminal-util.h
+++ b/src/terminal-util.h
@@ -67,9 +67,6 @@ gboolean terminal_util_dialog_response_on_delete (GtkWindow *widget);
 
 void terminal_util_add_proxy_env (GHashTable *env_table);
 
-GdkScreen *terminal_util_get_screen_by_display_name (const char *display_name,
-                                                     int screen_number);
-
 char **terminal_util_get_etc_shells (void);
 
 gboolean terminal_util_get_is_shell (const char *command);
diff --git a/src/terminal-window.c b/src/terminal-window.c
index f1b3f73..a79e35c 100644
--- a/src/terminal-window.c
+++ b/src/terminal-window.c
@@ -385,7 +385,7 @@ action_new_terminal_cb (GSimpleAction *action,
     return;
 
   if (mode == TERMINAL_NEW_TERMINAL_MODE_WINDOW)
-    window = terminal_app_new_window (app, gtk_widget_get_screen (GTK_WIDGET (window)));
+    window = terminal_app_new_window (app, 0);
 
   new_working_directory = terminal_screen_get_current_dir (priv->active_screen);
   terminal_app_new_terminal (app, window, profile, NULL /* use profile encoding */,
@@ -925,7 +925,7 @@ action_tab_detach_cb (GSimpleAction *action,
   terminal_screen_get_size (screen, &width, &height);
   g_snprintf (geometry, sizeof (geometry), "%dx%d", width, height);
 
-  new_window = terminal_app_new_window (app, gtk_widget_get_screen (GTK_WIDGET (window)));
+  new_window = terminal_app_new_window (app, 0);
 
   terminal_window_move_screen (window, new_window, screen, -1);
 
@@ -1698,8 +1698,7 @@ handle_tab_droped_on_desktop (GtkNotebook *source_notebook,
   source_window = TERMINAL_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (source_notebook)));
   g_return_val_if_fail (TERMINAL_IS_WINDOW (source_window), NULL);
 
-  new_window = terminal_app_new_window (terminal_app_get (),
-                                        gtk_widget_get_screen (GTK_WIDGET (source_window)));
+  new_window = terminal_app_new_window (terminal_app_get (), 0);
   new_priv = new_window->priv;
   new_priv->present_on_insert = TRUE;
 


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