forked from AuroraMiddleware/gtk
bff46d8696
And notify the shell about it. This is done through the gtk_shell1.notify_launch request added in gtk-shell v3. All the plumbing on the way to the activated application is already in place to transfer the startup ID, so the other side just has to reply with gtk_surface1.request_focus. Closes: https://gitlab.gnome.org/GNOME/gtk/issues/624
104 lines
2.9 KiB
C
104 lines
2.9 KiB
C
/*
|
|
* Copyright © 2010 Intel Corporation
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation; either version 2 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
#include <glib.h>
|
|
#include <gio/gdesktopappinfo.h>
|
|
|
|
#include "gdkwayland.h"
|
|
#include "gdkprivate-wayland.h"
|
|
#include "gdkapplaunchcontextprivate.h"
|
|
#include "gdkscreen.h"
|
|
#include "gdkinternals.h"
|
|
#include "gdkintl.h"
|
|
|
|
static char *
|
|
gdk_wayland_app_launch_context_get_startup_notify_id (GAppLaunchContext *context,
|
|
GAppInfo *info,
|
|
GList *files)
|
|
{
|
|
GdkWaylandDisplay *display;
|
|
gchar *id = NULL;
|
|
|
|
g_object_get (context, "display", &display, NULL);
|
|
|
|
if (display->gtk_shell_version >= 3)
|
|
{
|
|
id = g_uuid_string_random ();
|
|
gtk_shell1_notify_launch (display->gtk_shell, id);
|
|
}
|
|
|
|
g_object_unref (display);
|
|
|
|
return id;
|
|
}
|
|
|
|
static void
|
|
gdk_wayland_app_launch_context_launch_failed (GAppLaunchContext *context,
|
|
const char *startup_notify_id)
|
|
{
|
|
}
|
|
|
|
typedef struct _GdkWaylandAppLaunchContext GdkWaylandAppLaunchContext;
|
|
typedef struct _GdkWaylandAppLaunchContextClass GdkWaylandAppLaunchContextClass;
|
|
|
|
struct _GdkWaylandAppLaunchContext
|
|
{
|
|
GdkAppLaunchContext base;
|
|
gchar *name;
|
|
guint serial;
|
|
};
|
|
|
|
struct _GdkWaylandAppLaunchContextClass
|
|
{
|
|
GdkAppLaunchContextClass base_class;
|
|
};
|
|
|
|
GType gdk_wayland_app_launch_context_get_type (void);
|
|
|
|
G_DEFINE_TYPE (GdkWaylandAppLaunchContext, gdk_wayland_app_launch_context, GDK_TYPE_APP_LAUNCH_CONTEXT)
|
|
|
|
static void
|
|
gdk_wayland_app_launch_context_class_init (GdkWaylandAppLaunchContextClass *klass)
|
|
{
|
|
GAppLaunchContextClass *ctx_class = G_APP_LAUNCH_CONTEXT_CLASS (klass);
|
|
|
|
ctx_class->get_startup_notify_id = gdk_wayland_app_launch_context_get_startup_notify_id;
|
|
ctx_class->launch_failed = gdk_wayland_app_launch_context_launch_failed;
|
|
}
|
|
|
|
static void
|
|
gdk_wayland_app_launch_context_init (GdkWaylandAppLaunchContext *ctx)
|
|
{
|
|
}
|
|
|
|
GdkAppLaunchContext *
|
|
_gdk_wayland_display_get_app_launch_context (GdkDisplay *display)
|
|
{
|
|
GdkAppLaunchContext *ctx;
|
|
|
|
ctx = g_object_new (gdk_wayland_app_launch_context_get_type (),
|
|
"display", display,
|
|
NULL);
|
|
|
|
return ctx;
|
|
}
|