diff --git a/src/main.c b/src/main.c index 58368e7..119fa88 100644 --- a/src/main.c +++ b/src/main.c @@ -190,15 +190,30 @@ appfinder_window_destroyed (GtkWidget *window) static void appfinder_window_new (const gchar *startup_id, + const gchar *display_name, gboolean expanded) { GtkWidget *window; + GdkDisplay *display; + GdkScreen *screen; window = g_object_new (XFCE_TYPE_APPFINDER_WINDOW, "startup-id", IS_STRING (startup_id) ? startup_id : NULL, NULL); appfinder_refcount_debug_add (G_OBJECT (window), startup_id); xfce_appfinder_window_set_expanded (XFCE_APPFINDER_WINDOW (window), expanded); + if (display_name != NULL) + { + display = gdk_display_open(display_name); + if (display != NULL) + { + screen = gdk_display_get_default_screen(display); + if (screen != NULL) + { + gtk_window_set_screen(GTK_WINDOW (window), screen); + } + } + } gtk_widget_show (window); windows = g_slist_prepend (windows, window); @@ -216,6 +231,7 @@ appfinder_dbus_message (DBusConnection *dbus_connection, DBusMessage *reply; gboolean expanded; gchar *startup_id; + gchar *display_name; DBusError derror; if (dbus_message_is_method_call (message, APPFINDER_DBUS_INTERFACE, APPFINDER_DBUS_METHOD_OPEN)) @@ -224,9 +240,10 @@ appfinder_dbus_message (DBusConnection *dbus_connection, if (dbus_message_get_args (message, &derror, DBUS_TYPE_BOOLEAN, &expanded, DBUS_TYPE_STRING, &startup_id, + DBUS_TYPE_STRING, &display_name, DBUS_TYPE_INVALID)) { - appfinder_window_new (startup_id, expanded); + appfinder_window_new (startup_id, display_name, expanded); reply = dbus_message_new_method_return (message); } else @@ -270,7 +287,8 @@ appfinder_dbus_message (DBusConnection *dbus_connection, static gboolean appfinder_dbus_open_window (DBusConnection *dbus_connection, - const gchar *startup_id) + const gchar *startup_id, + const gchar *display_name) { DBusError derror; @@ -288,6 +306,7 @@ appfinder_dbus_open_window (DBusConnection *dbus_connection, dbus_message_append_args (method, DBUS_TYPE_BOOLEAN, &expanded, DBUS_TYPE_STRING, &startup_id, + DBUS_TYPE_STRING, &display_name, DBUS_TYPE_INVALID); dbus_message_set_auto_start (method, TRUE); @@ -403,7 +422,7 @@ appfinder_signal_handler (gint signum) static DBusConnection * -appfinder_dbus_service (const gchar *startup_id) +appfinder_dbus_service (const gchar *startup_id, const gchar *display_name) { DBusError derror; DBusConnection *dbus_connection; @@ -463,7 +482,7 @@ appfinder_dbus_service (const gchar *startup_id) } else if (result == DBUS_REQUEST_NAME_REPLY_EXISTS) { - if (appfinder_dbus_open_window (dbus_connection, startup_id)) + if (appfinder_dbus_open_window (dbus_connection, startup_id, display_name)) { /* successfully opened a window in the other instance */ dbus_connection_unref (dbus_connection); @@ -497,6 +516,7 @@ main (gint argc, gchar **argv) const gchar *desktop; DBusConnection *dbus_connection = NULL; const gchar *startup_id; + const gchar *display_name; GSList *windows_destroy; const gint signums[] = { SIGINT, SIGQUIT, SIGTERM, SIGABRT }; guint i; @@ -550,10 +570,13 @@ main (gint argc, gchar **argv) if (!opt_collapsed && strcmp (*argv, "xfrun4") == 0) opt_collapsed = TRUE; + /* get name of current display */ + display_name = gdk_display_get_name(gdk_display_get_default()); + /* become the serivce owner or ask the current * owner to spawn an instance */ if (G_LIKELY (!opt_disable_server)) - dbus_connection = appfinder_dbus_service (startup_id); + dbus_connection = appfinder_dbus_service (startup_id, display_name); /* if the value is unset, fallback to XFCE, if the * value is empty, allow all applications in the menu */ @@ -577,7 +600,7 @@ main (gint argc, gchar **argv) #endif /* create initial window */ - appfinder_window_new (NULL, !opt_collapsed); + appfinder_window_new (NULL, NULL, !opt_collapsed); APPFINDER_DEBUG ("enter mainloop");