Blame gdk/gdkapplaunchcontext.c

Packit Service fb6fa5
/* gdkapplaunchcontext.c - Gtk+ implementation for GAppLaunchContext
Packit Service fb6fa5
Packit Service fb6fa5
   Copyright (C) 2007 Red Hat, Inc.
Packit Service fb6fa5
Packit Service fb6fa5
   The Gnome Library is free software; you can redistribute it and/or
Packit Service fb6fa5
   modify it under the terms of the GNU Library General Public License as
Packit Service fb6fa5
   published by the Free Software Foundation; either version 2 of the
Packit Service fb6fa5
   License, or (at your option) any later version.
Packit Service fb6fa5
Packit Service fb6fa5
   The Gnome Library is distributed in the hope that it will be useful,
Packit Service fb6fa5
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fb6fa5
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service fb6fa5
   Library General Public License for more details.
Packit Service fb6fa5
Packit Service fb6fa5
   You should have received a copy of the GNU Library General Public
Packit Service fb6fa5
   License along with the Gnome Library; see the file COPYING.LIB.  If not,
Packit Service fb6fa5
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit Service fb6fa5
   Boston, MA 02111-1307, USA.
Packit Service fb6fa5
Packit Service fb6fa5
   Author: Alexander Larsson <alexl@redhat.com>
Packit Service fb6fa5
*/
Packit Service fb6fa5
Packit Service fb6fa5
#include "config.h"
Packit Service fb6fa5
Packit Service fb6fa5
#include "gdkapplaunchcontext.h"
Packit Service fb6fa5
#include "gdkinternals.h"
Packit Service fb6fa5
#include "gdkscreen.h"
Packit Service fb6fa5
#include "gdkintl.h"
Packit Service fb6fa5
#include "gdkalias.h"
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
static void    gdk_app_launch_context_finalize    (GObject           *object);
Packit Service fb6fa5
static gchar * gdk_app_launch_context_get_display (GAppLaunchContext *context,
Packit Service fb6fa5
                                                   GAppInfo          *info,
Packit Service fb6fa5
                                                   GList             *files);
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
G_DEFINE_TYPE (GdkAppLaunchContext, gdk_app_launch_context,
Packit Service fb6fa5
	       G_TYPE_APP_LAUNCH_CONTEXT)
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_app_launch_context_class_init (GdkAppLaunchContextClass *klass)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
Packit Service fb6fa5
  GAppLaunchContextClass *context_class = G_APP_LAUNCH_CONTEXT_CLASS (klass);
Packit Service fb6fa5
Packit Service fb6fa5
  gobject_class->finalize = gdk_app_launch_context_finalize;
Packit Service fb6fa5
Packit Service fb6fa5
  context_class->get_display = gdk_app_launch_context_get_display;
Packit Service fb6fa5
  context_class->get_startup_notify_id = _gdk_windowing_get_startup_notify_id;
Packit Service fb6fa5
  context_class->launch_failed = _gdk_windowing_launch_failed;
Packit Service fb6fa5
Packit Service fb6fa5
  g_type_class_add_private (klass, sizeof (GdkAppLaunchContextPrivate));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_app_launch_context_init (GdkAppLaunchContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  context->priv = G_TYPE_INSTANCE_GET_PRIVATE (context,
Packit Service fb6fa5
					       GDK_TYPE_APP_LAUNCH_CONTEXT,
Packit Service fb6fa5
					       GdkAppLaunchContextPrivate);
Packit Service fb6fa5
  context->priv->workspace = -1;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_app_launch_context_finalize (GObject *object)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkAppLaunchContext *context;
Packit Service fb6fa5
  GdkAppLaunchContextPrivate *priv;
Packit Service fb6fa5
Packit Service fb6fa5
  context = GDK_APP_LAUNCH_CONTEXT (object);
Packit Service fb6fa5
Packit Service fb6fa5
  priv = context->priv;
Packit Service fb6fa5
Packit Service fb6fa5
  if (priv->display)
Packit Service fb6fa5
    g_object_unref (priv->display);
Packit Service fb6fa5
Packit Service fb6fa5
  if (priv->screen)
Packit Service fb6fa5
    g_object_unref (priv->screen);
Packit Service fb6fa5
Packit Service fb6fa5
  if (priv->icon)
Packit Service fb6fa5
    g_object_unref (priv->icon);
Packit Service fb6fa5
Packit Service fb6fa5
  g_free (priv->icon_name);
Packit Service fb6fa5
Packit Service fb6fa5
  G_OBJECT_CLASS (gdk_app_launch_context_parent_class)->finalize (object);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gchar *
Packit Service fb6fa5
gdk_app_launch_context_get_display (GAppLaunchContext *context,
Packit Service fb6fa5
                                    GAppInfo          *info,
Packit Service fb6fa5
                                    GList             *files)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkDisplay *display;
Packit Service fb6fa5
  GdkAppLaunchContextPrivate *priv;
Packit Service fb6fa5
Packit Service fb6fa5
  priv = GDK_APP_LAUNCH_CONTEXT (context)->priv;
Packit Service fb6fa5
Packit Service fb6fa5
  if (priv->screen)
Packit Service fb6fa5
    return gdk_screen_make_display_name (priv->screen);
Packit Service fb6fa5
Packit Service fb6fa5
  if (priv->display)
Packit Service fb6fa5
    display = priv->display;
Packit Service fb6fa5
  else
Packit Service fb6fa5
    display = gdk_display_get_default ();
Packit Service fb6fa5
Packit Service fb6fa5
  return g_strdup (gdk_display_get_name (display));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_app_launch_context_set_display:
Packit Service fb6fa5
 * @context: a #GdkAppLaunchContext
Packit Service fb6fa5
 * @display: a #GdkDisplay
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets the display on which applications will be launched when
Packit Service fb6fa5
 * using this context. See also gdk_app_launch_context_set_screen().
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.14
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_app_launch_context_set_display (GdkAppLaunchContext *context,
Packit Service fb6fa5
				    GdkDisplay          *display)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context));
Packit Service fb6fa5
  g_return_if_fail (display == NULL || GDK_IS_DISPLAY (display));
Packit Service fb6fa5
Packit Service fb6fa5
  if (context->priv->display)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_object_unref (context->priv->display);
Packit Service fb6fa5
      context->priv->display = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (display)
Packit Service fb6fa5
    context->priv->display = g_object_ref (display);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_app_launch_context_set_screen:
Packit Service fb6fa5
 * @context: a #GdkAppLaunchContext
Packit Service fb6fa5
 * @screen: a #GdkScreen
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets the screen on which applications will be launched when
Packit Service fb6fa5
 * using this context. See also gdk_app_launch_context_set_display().
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * If both @screen and @display are set, the @screen takes priority.
Packit Service fb6fa5
 * If neither @screen or @display are set, the default screen and
Packit Service fb6fa5
 * display are used.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.14
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_app_launch_context_set_screen (GdkAppLaunchContext *context,
Packit Service fb6fa5
				   GdkScreen           *screen)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context));
Packit Service fb6fa5
  g_return_if_fail (screen == NULL || GDK_IS_SCREEN (screen));
Packit Service fb6fa5
Packit Service fb6fa5
  if (context->priv->screen)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_object_unref (context->priv->screen);
Packit Service fb6fa5
      context->priv->screen = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (screen)
Packit Service fb6fa5
    context->priv->screen = g_object_ref (screen);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_app_launch_context_set_desktop:
Packit Service fb6fa5
 * @context: a #GdkAppLaunchContext
Packit Service fb6fa5
 * @desktop: the number of a workspace, or -1
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets the workspace on which applications will be launched when
Packit Service fb6fa5
 * using this context when running under a window manager that 
Packit Service fb6fa5
 * supports multiple workspaces, as described in the 
Packit Service fb6fa5
 * <ulink url="http://www.freedesktop.org/Standards/wm-spec">Extended 
Packit Service fb6fa5
 * Window Manager Hints</ulink>. 
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * When the workspace is not specified or @desktop is set to -1, 
Packit Service fb6fa5
 * it is up to the window manager to pick one, typically it will
Packit Service fb6fa5
 * be the current workspace.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.14
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_app_launch_context_set_desktop (GdkAppLaunchContext *context,
Packit Service fb6fa5
				    gint                 desktop)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context));
Packit Service fb6fa5
Packit Service fb6fa5
  context->priv->workspace = desktop;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_app_launch_context_set_timestamp:
Packit Service fb6fa5
 * @context: a #GdkAppLaunchContext
Packit Service fb6fa5
 * @timestamp: a timestamp
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets the timestamp of @context. The timestamp should ideally
Packit Service fb6fa5
 * be taken from the event that triggered the launch. 
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Window managers can use this information to avoid moving the
Packit Service fb6fa5
 * focus to the newly launched application when the user is busy
Packit Service fb6fa5
 * typing in another window. This is also known as 'focus stealing
Packit Service fb6fa5
 * prevention'.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.14
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_app_launch_context_set_timestamp (GdkAppLaunchContext *context,
Packit Service fb6fa5
				      guint32              timestamp)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context));
Packit Service fb6fa5
Packit Service fb6fa5
  context->priv->timestamp = timestamp;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_app_launch_context_set_icon:
Packit Service fb6fa5
 * @context: a #GdkAppLaunchContext
Packit Service fb6fa5
 * @icon: (allow-none): a #GIcon, or %NULL
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets the icon for applications that are launched with this
Packit Service fb6fa5
 * context.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Window Managers can use this information when displaying startup
Packit Service fb6fa5
 * notification.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * See also gdk_app_launch_context_set_icon_name().
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.14
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_app_launch_context_set_icon (GdkAppLaunchContext *context,
Packit Service fb6fa5
                                 GIcon               *icon)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context));
Packit Service fb6fa5
  g_return_if_fail (icon == NULL || G_IS_ICON (icon));
Packit Service fb6fa5
Packit Service fb6fa5
  if (context->priv->icon)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_object_unref (context->priv->icon);
Packit Service fb6fa5
      context->priv->icon = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (icon)
Packit Service fb6fa5
    context->priv->icon = g_object_ref (icon);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_app_launch_context_set_icon_name:
Packit Service fb6fa5
 * @context: a #GdkAppLaunchContext
Packit Service fb6fa5
 * @icon_name: (allow-none): an icon name, or %NULL
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets the icon for applications that are launched with this context. 
Packit Service fb6fa5
 * The @icon_name will be interpreted in the same way as the Icon field 
Packit Service fb6fa5
 * in desktop files. See also gdk_app_launch_context_set_icon(). 
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * If both @icon and @icon_name are set, the @icon_name takes priority.
Packit Service fb6fa5
 * If neither @icon or @icon_name is set, the icon is taken from either 
Packit Service fb6fa5
 * the file that is passed to launched application or from the #GAppInfo 
Packit Service fb6fa5
 * for the launched application itself.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Since: 2.14
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_app_launch_context_set_icon_name (GdkAppLaunchContext *context,
Packit Service fb6fa5
				      const char          *icon_name)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_APP_LAUNCH_CONTEXT (context));
Packit Service fb6fa5
Packit Service fb6fa5
  g_free (context->priv->icon_name);
Packit Service fb6fa5
  context->priv->icon_name = g_strdup (icon_name);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_app_launch_context_new:
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Creates a new #GdkAppLaunchContext.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Returns: a new #GdkAppLaunchContext
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.14
Packit Service fb6fa5
 */
Packit Service fb6fa5
GdkAppLaunchContext *
Packit Service fb6fa5
gdk_app_launch_context_new (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return g_object_new (GDK_TYPE_APP_LAUNCH_CONTEXT, NULL);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
#define __GDK_APP_LAUNCH_CONTEXT_C__
Packit Service fb6fa5
#include "gdkaliasdef.c"