|
Packit |
1e8aac |
/*
|
|
Packit |
1e8aac |
* glade-clipboard.c - An object for handling Cut/Copy/Paste.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Copyright (C) 2001 The GNOME Foundation.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Author(s):
|
|
Packit |
1e8aac |
* Archit Baweja <bighead@users.sourceforge.net>
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* This program is free software; you can redistribute it and/or
|
|
Packit |
1e8aac |
* modify it under the terms of the GNU General Public License
|
|
Packit |
1e8aac |
* as published by the Free Software Foundation; either version 2
|
|
Packit |
1e8aac |
* of the License, or (at your option) any later version.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
1e8aac |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
1e8aac |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
1e8aac |
* GNU General Public License for more details.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* You should have received a copy of the GNU General Public License
|
|
Packit |
1e8aac |
* along with this program; if not, write to the Free Software
|
|
Packit |
1e8aac |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
Packit |
1e8aac |
* USA.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include "config.h"
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* SECTION:glade-clipboard
|
|
Packit |
1e8aac |
* @Short_Description: A list of #GladeWidget objects not in any #GladeProject.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* The #GladeClipboard is a singleton and is an accumulative shelf
|
|
Packit |
1e8aac |
* of all cut or copied #GladeWidget in the application. A #GladeWidget
|
|
Packit |
1e8aac |
* can be cut from one #GladeProject and pasted to another.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include <glib/gi18n-lib.h>
|
|
Packit |
1e8aac |
#include "glade.h"
|
|
Packit |
1e8aac |
#include "glade-clipboard.h"
|
|
Packit |
1e8aac |
#include "glade-widget.h"
|
|
Packit |
1e8aac |
#include "glade-placeholder.h"
|
|
Packit |
1e8aac |
#include "glade-project.h"
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
struct _GladeClipboardPrivate
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *widgets; /* A list of GladeWidget's on the clipboard */
|
|
Packit |
1e8aac |
gboolean has_selection; /* TRUE if clipboard has selection */
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
enum
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
PROP_0,
|
|
Packit |
1e8aac |
PROP_HAS_SELECTION,
|
|
Packit |
1e8aac |
N_PROPERTIES
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GParamSpec *properties[N_PROPERTIES];
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
G_DEFINE_TYPE_WITH_PRIVATE (GladeClipboard, glade_clipboard, G_TYPE_OBJECT);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_project_get_property (GObject *object,
|
|
Packit |
1e8aac |
guint prop_id,
|
|
Packit |
1e8aac |
GValue *value,
|
|
Packit |
1e8aac |
GParamSpec *pspec)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeClipboard *clipboard = GLADE_CLIPBOARD (object);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (prop_id)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case PROP_HAS_SELECTION:
|
|
Packit |
1e8aac |
g_value_set_boolean (value, clipboard->priv->has_selection);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_clipboard_class_init (GladeClipboardClass * klass)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GObjectClass *object_class;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
object_class = G_OBJECT_CLASS (klass);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
object_class->get_property = glade_project_get_property;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
properties[PROP_HAS_SELECTION] =
|
|
Packit |
1e8aac |
g_param_spec_boolean ("has-selection",
|
|
Packit |
1e8aac |
"Has Selection",
|
|
Packit |
1e8aac |
"Whether clipboard has a selection of items to paste",
|
|
Packit |
1e8aac |
FALSE,
|
|
Packit |
1e8aac |
G_PARAM_READABLE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Install all properties */
|
|
Packit |
1e8aac |
g_object_class_install_properties (object_class, N_PROPERTIES, properties);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_clipboard_init (GladeClipboard *clipboard)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
clipboard->priv = glade_clipboard_get_instance_private (clipboard);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
clipboard->priv->widgets = NULL;
|
|
Packit |
1e8aac |
clipboard->priv->has_selection = FALSE;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_clipboard_set_has_selection (GladeClipboard *clipboard,
|
|
Packit |
1e8aac |
gboolean has_selection)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (clipboard->priv->has_selection != has_selection)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
clipboard->priv->has_selection = has_selection;
|
|
Packit |
1e8aac |
g_object_notify_by_pspec (G_OBJECT (clipboard), properties[PROP_HAS_SELECTION]);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_clipboard_get_has_selection:
|
|
Packit |
1e8aac |
* @clipboard: a #GladeClipboard
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Returns: TRUE if this clipboard has selected items to paste.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
gboolean
|
|
Packit |
1e8aac |
glade_clipboard_get_has_selection (GladeClipboard *clipboard)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_return_val_if_fail (GLADE_IS_CLIPBOARD (clipboard), FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return clipboard->priv->has_selection;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GList *
|
|
Packit |
1e8aac |
glade_clipboard_widgets (GladeClipboard *clipboard)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_return_val_if_fail (GLADE_IS_CLIPBOARD (clipboard), NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return clipboard->priv->widgets;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_clipboard_new:
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Returns: a new #GladeClipboard object
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
GladeClipboard *
|
|
Packit |
1e8aac |
glade_clipboard_new (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return GLADE_CLIPBOARD (g_object_new (GLADE_TYPE_CLIPBOARD, NULL));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_clipboard_add:
|
|
Packit |
1e8aac |
* @clipboard: a #GladeClipboard
|
|
Packit |
1e8aac |
* @widgets: a #GList of #GladeWidgets
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Adds @widgets to @clipboard.
|
|
Packit |
1e8aac |
* This increases the reference count of each #GladeWidget in @widgets.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_clipboard_add (GladeClipboard *clipboard, GList *widgets)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *widget;
|
|
Packit |
1e8aac |
GList *list;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_return_if_fail (GLADE_IS_CLIPBOARD (clipboard));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_clipboard_clear (clipboard);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/*
|
|
Packit |
1e8aac |
* Add the widgets to the list of children.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
for (list = widgets; list && list->data; list = list->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
widget = list->data;
|
|
Packit |
1e8aac |
clipboard->priv->widgets =
|
|
Packit |
1e8aac |
g_list_prepend (clipboard->priv->widgets, g_object_ref_sink (G_OBJECT (widget)));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_clipboard_set_has_selection (clipboard, TRUE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_clipboard_clear:
|
|
Packit |
1e8aac |
* @clipboard: a #GladeClipboard
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Removes all widgets from the @clipboard.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_clipboard_clear (GladeClipboard *clipboard)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *widget;
|
|
Packit |
1e8aac |
GList *list;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_return_if_fail (GLADE_IS_CLIPBOARD (clipboard));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (list = clipboard->priv->widgets; list && list->data; list = list->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
widget = list->data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_object_unref (G_OBJECT (widget));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
clipboard->priv->widgets =
|
|
Packit |
1e8aac |
(g_list_free (clipboard->priv->widgets), NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_clipboard_set_has_selection (clipboard, FALSE);
|
|
Packit |
1e8aac |
}
|