Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Gnome/gdk/   (Gnome Linux Desktop Version 4.23.2©)  Datei vom 30.5.2026 mit Größe 9 kB image not shown  

Quelle  gdkapplaunchcontext.c

  Sprache: C
 

/* gdkapplaunchcontext.c - Gtk+ implementation for GAppLaunchContext

   Copyright (C) 2007 Red Hat, Inc.

   The Gnome Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public License as
   published by the Free Software Foundation; either version 2 of the
   License, or (at your option) any later version.

   The Gnome 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
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with this library. If not, see <http://www.gnu.org/licenses/>.

   Author: Alexander Larsson <alexl@redhat.com>
*/


#include "config.h"

#include "gdkapplaunchcontextprivate.h"
#include "gdkdisplay.h"
#include <glib/gi18n-lib.h>


/**
 * GdkAppLaunchContext:
 *
 * Handles launching an application in a graphical context.
 *
 * It is an implementation of `GAppLaunchContext` that provides startup
 * notification and allows to launch applications on a specific workspace.
 *
 * ## Launching an application
 *
 * ```c
 * GdkAppLaunchContext *context;
 *
 * context = gdk_display_get_app_launch_context (display);
 *
 * gdk_app_launch_context_set_timestamp (gdk_event_get_time (event));
 *
 * if (!g_app_info_launch_default_for_uri ("http://www.gtk.org", context, &error))
 *   g_warning ("Launching failed: %s\n", error->message);
 *
 * g_object_unref (context);
 * ```
 */


static void    gdk_app_launch_context_finalize    (GObject           *object);
static char * gdk_app_launch_context_get_display_name (GAppLaunchContext *context,
                                                        GAppInfo          *info,
                                                        GList             *files);
static char * gdk_app_launch_context_get_startup_notify_id (GAppLaunchContext *context,
                                                             GAppInfo          *info,
                                                             GList             *files);
static void    gdk_app_launch_context_launch_failed (GAppLaunchContext *context,
                                                     const char        *startup_notify_id);


enum
{
  PROP_0,
  PROP_DISPLAY,
  N_PROPS
};

static GParamSpec *props[N_PROPS] = { NULL, };

G_DEFINE_TYPE (GdkAppLaunchContext, gdk_app_launch_context, G_TYPE_APP_LAUNCH_CONTEXT)

static void
gdk_app_launch_context_get_property (GObject    *object,
                                     guint       prop_id,
                                     GValue     *value,
                                     GParamSpec *pspec)
{
  GdkAppLaunchContext *context = GDK_APP_LAUNCH_CONTEXT (object);

  switch (prop_id)
    {
    case PROP_DISPLAY:
      g_value_set_object (value, context->display);
      break;
    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
    }
}

static void
gdk_app_launch_context_set_property (GObject      *object,
                                     guint         prop_id,
                                     const GValue *value,
                                     GParamSpec   *pspec)
{
  GdkAppLaunchContext *context = GDK_APP_LAUNCH_CONTEXT (object);

  switch (prop_id)
    {
    case PROP_DISPLAY:
      context->display = g_value_dup_object (value);
      break;
    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
    }
}

static void
gdk_app_launch_context_class_init (GdkAppLaunchContextClass *klass)
{
  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
  GAppLaunchContextClass *context_class = G_APP_LAUNCH_CONTEXT_CLASS (klass);

  gobject_class->set_property = gdk_app_launch_context_set_property,
  gobject_class->get_property = gdk_app_launch_context_get_property;

  gobject_class->finalize = gdk_app_launch_context_finalize;

  context_class->get_display = gdk_app_launch_context_get_display_name;
  context_class->get_startup_notify_id = gdk_app_launch_context_get_startup_notify_id;
  context_class->launch_failed = gdk_app_launch_context_launch_failed;

  /**
   * GdkAppLaunchContext:display:
   *
   * The display that the `GdkAppLaunchContext` is on.
   */

  props[PROP_DISPLAY] = g_param_spec_object ("display", NULL, NULL,
                                             GDK_TYPE_DISPLAY,
                                             G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME);

  g_object_class_install_properties (gobject_class, N_PROPS, props);
}

static void
gdk_app_launch_context_init (GdkAppLaunchContext *context)
{
  context->workspace = -1;
}

static void
gdk_app_launch_context_finalize (GObject *object)
{
  GdkAppLaunchContext *context = GDK_APP_LAUNCH_CONTEXT (object);

  if (context->display)
    g_object_unref (context->display);

  if (context->icon)
    g_object_unref (context->icon);

  g_free (context->icon_name);

  G_OBJECT_CLASS (gdk_app_launch_context_parent_class)->finalize (object);
}

static char *
gdk_app_launch_context_get_display_name (GAppLaunchContext *context,
                                         GAppInfo          *info,
                                         GList             *files)
{
  GdkAppLaunchContext *ctx = GDK_APP_LAUNCH_CONTEXT (context);
  GdkDisplay *display;

  if (ctx->display)
    display = ctx->display;
  else
    display = gdk_display_get_default ();

  return g_strdup (gdk_display_get_name (display));
}

/**
 * gdk_app_launch_context_get_display:
 * @context: a `GdkAppLaunchContext`
 *
 * Gets the `GdkDisplay` that @context is for.
 *
 * Returns: (transfer none): the display of @context
 */

GdkDisplay *
gdk_app_launch_context_get_display (GdkAppLaunchContext *context)
{
  g_return_val_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context), NULL);

  return context->display;
}

/**
 * gdk_app_launch_context_set_desktop:
 * @context: a `GdkAppLaunchContext`
 * @desktop: the number of a workspace, or -1
 *
 * Sets the workspace on which applications will be launched.
 *
 * This only works when running under a window manager that
 * supports multiple workspaces, as described in the
 * [Extended Window Manager Hints](https://specifications.freedesktop.org/wm/latest/).
 * Specifically this sets the `_NET_WM_DESKTOP` property described
 * in that spec.
 *
 * This only works when using the X11 backend.
 *
 * When the workspace is not specified or @desktop is set to -1,
 * it is up to the window manager to pick one, typically it will
 * be the current workspace.
 */

void
gdk_app_launch_context_set_desktop (GdkAppLaunchContext *context,
                                    int                  desktop)
{
  g_return_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context));

  context->workspace = desktop;
}

/**
 * gdk_app_launch_context_set_timestamp:
 * @context: a `GdkAppLaunchContext`
 * @timestamp: a timestamp
 *
 * Sets the timestamp of @context.
 *
 * The timestamp should ideally be taken from the event that
 * triggered the launch.
 *
 * Window managers can use this information to avoid moving the
 * focus to the newly launched application when the user is busy
 * typing in another window. This is also known as 'focus stealing
 * prevention'.
 */

void
gdk_app_launch_context_set_timestamp (GdkAppLaunchContext *context,
                                      guint32              timestamp)
{
  g_return_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context));

  context->timestamp = timestamp;
}

/**
 * gdk_app_launch_context_set_icon:
 * @context: a `GdkAppLaunchContext`
 * @icon: (nullable): a `GIcon`
 *
 * Sets the icon for applications that are launched with this
 * context.
 *
 * Window Managers can use this information when displaying startup
 * notification.
 *
 * See also [method@Gdk.AppLaunchContext.set_icon_name].
 */

void
gdk_app_launch_context_set_icon (GdkAppLaunchContext *context,
                                 GIcon               *icon)
{
  g_return_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context));
  g_return_if_fail (icon == NULL || G_IS_ICON (icon));

  g_clear_object (&context->icon);

  if (icon)
    context->icon = g_object_ref (icon);
}

/**
 * gdk_app_launch_context_set_icon_name:
 * @context: a `GdkAppLaunchContext`
 * @icon_name: (nullable): an icon name
 *
 * Sets the icon for applications that are launched with this context.
 *
 * The @icon_name will be interpreted in the same way as the Icon field
 * in desktop files. See also [method@Gdk.AppLaunchContext.set_icon].
 *
 * If both @icon and @icon_name are set, the @icon_name takes priority.
 * If neither @icon or @icon_name is set, the icon is taken from either
 * the file that is passed to launched application or from the `GAppInfo`
 * for the launched application itself.
 */

void
gdk_app_launch_context_set_icon_name (GdkAppLaunchContext *context,
                                      const char          *icon_name)
{
  g_return_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context));

  g_free (context->icon_name);
  context->icon_name = g_strdup (icon_name);
}

static char *
gdk_app_launch_context_get_startup_notify_id (GAppLaunchContext *context,
                                              GAppInfo          *info,
                                              GList             *files)
{
 return NULL;
}

static void
gdk_app_launch_context_launch_failed (GAppLaunchContext *context,
                                      const char        *startup_notify_id)
{
}

Messung V0.5 in Prozent
C=99 H=96 G=97

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet am  2026-07-02) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.