|
Packit |
1e8aac |
/*
|
|
Packit |
1e8aac |
* glade-clipboard.c - An object for handling Cut/Copy/Paste.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Copyright (C) 2005 The GNOME Foundation.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Author(s):
|
|
Packit |
1e8aac |
* Tristan Van Berkom <tvb@gnome.org>
|
|
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 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
1e8aac |
#include <config.h>
|
|
Packit |
1e8aac |
#endif
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include <glib-object.h>
|
|
Packit |
1e8aac |
#include <glib/gi18n-lib.h>
|
|
Packit |
1e8aac |
#include <string.h>
|
|
Packit |
1e8aac |
#include "glade-builtins.h"
|
|
Packit |
1e8aac |
#include "glade-displayable-values.h"
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
struct _GladeParamSpecObjects
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GParamSpec parent_instance;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GType type; /* Object or interface type accepted
|
|
Packit |
1e8aac |
* in this object list.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
typedef struct _GladeStockItem
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gchar *value_name;
|
|
Packit |
1e8aac |
gchar *value_nick;
|
|
Packit |
1e8aac |
gchar *clean_name;
|
|
Packit |
1e8aac |
gint value;
|
|
Packit |
1e8aac |
} GladeStockItem;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/************************************************************
|
|
Packit |
1e8aac |
* Auto-generate the enum type for stock properties *
|
|
Packit |
1e8aac |
************************************************************/
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Hard-coded list of stock images (and displayable translations) from gtk+ that are not stock "items" */
|
|
Packit |
1e8aac |
static const gchar *builtin_stock_images[] = {
|
|
Packit |
1e8aac |
"gtk-dialog-authentication", /* GTK_STOCK_DIALOG_AUTHENTICATION */
|
|
Packit |
1e8aac |
"gtk-dnd", /* GTK_STOCK_DND */
|
|
Packit |
1e8aac |
"gtk-dnd-multiple", /* GTK_STOCK_DND_MULTIPLE */
|
|
Packit |
1e8aac |
"gtk-color-picker", /* GTK_STOCK_COLOR_PICKER */
|
|
Packit |
1e8aac |
"gtk-directory", /* GTK_STOCK_DIRECTORY */
|
|
Packit |
1e8aac |
"gtk-file", /* GTK_STOCK_FILE */
|
|
Packit |
1e8aac |
"gtk-missing-image" /* GTK_STOCK_MISSING_IMAGE */
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static const gchar *builtin_stock_displayables[] = {
|
|
Packit |
1e8aac |
/* GTK_STOCK_DIALOG_AUTHENTICATION */
|
|
Packit |
1e8aac |
N_("Authentication"),
|
|
Packit |
1e8aac |
/* GTK_STOCK_DND */
|
|
Packit |
1e8aac |
N_("Drag and Drop"),
|
|
Packit |
1e8aac |
/* GTK_STOCK_DND_MULTIPLE */
|
|
Packit |
1e8aac |
N_("Drag and Drop Multiple"),
|
|
Packit |
1e8aac |
/* GTK_STOCK_COLOR_PICKER */
|
|
Packit |
1e8aac |
N_("Color Picker"),
|
|
Packit |
1e8aac |
/* GTK_STOCK_DIRECTORY */
|
|
Packit |
1e8aac |
N_("Directory"),
|
|
Packit |
1e8aac |
/* GTK_STOCK_FILE */
|
|
Packit |
1e8aac |
N_("File"),
|
|
Packit |
1e8aac |
/* GTK_STOCK_MISSING_IMAGE */
|
|
Packit |
1e8aac |
N_("Missing Image")
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GSList *stock_prefixs = NULL;
|
|
Packit |
1e8aac |
static gboolean stock_prefixs_done = FALSE;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* FIXME: func needs documentation
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_standard_stock_append_prefix (const gchar * prefix)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (stock_prefixs_done)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_warning
|
|
Packit |
1e8aac |
("glade_standard_stock_append_prefix should be used in catalog init-function");
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
stock_prefixs = g_slist_append (stock_prefixs, g_strdup (prefix));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GladeStockItem *
|
|
Packit |
1e8aac |
new_from_values (const gchar * name, const gchar * nick, gint value)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeStockItem *new_gsi = NULL;
|
|
Packit |
1e8aac |
gchar *clean_name;
|
|
Packit |
1e8aac |
size_t len = 0;
|
|
Packit |
1e8aac |
guint i = 0;
|
|
Packit |
1e8aac |
guint j = 0;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
new_gsi = (GladeStockItem *) g_malloc0 (sizeof (GladeStockItem));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
new_gsi->value_name = g_strdup (name);
|
|
Packit |
1e8aac |
new_gsi->value_nick = g_strdup (nick);
|
|
Packit |
1e8aac |
new_gsi->value = value;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
clean_name = g_strdup (name);
|
|
Packit |
1e8aac |
len = strlen (clean_name);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
while (i + j <= len)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (clean_name[i + j] == '_')
|
|
Packit |
1e8aac |
j++;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
clean_name[i] = clean_name[i + j];
|
|
Packit |
1e8aac |
i++;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
new_gsi->clean_name = g_utf8_collate_key (clean_name, i - j);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_free (clean_name);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return new_gsi;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gint
|
|
Packit |
1e8aac |
compare_two_gsi (gconstpointer a, gconstpointer b)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeStockItem *gsi1 = (GladeStockItem *) a;
|
|
Packit |
1e8aac |
GladeStockItem *gsi2 = (GladeStockItem *) b;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return strcmp (gsi1->clean_name, gsi2->clean_name);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GArray *
|
|
Packit |
1e8aac |
list_stock_items (gboolean include_images)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkStockItem item;
|
|
Packit |
1e8aac |
GSList *l = NULL, *stock_list = NULL, *p = NULL;
|
|
Packit |
1e8aac |
gchar *stock_id = NULL, *prefix = NULL;
|
|
Packit |
1e8aac |
gint stock_enum = 0, i = 0;
|
|
Packit |
1e8aac |
GEnumValue value;
|
|
Packit |
1e8aac |
GArray *values = NULL;
|
|
Packit |
1e8aac |
GladeStockItem *gsi;
|
|
Packit |
1e8aac |
GSList *gsi_list = NULL;
|
|
Packit |
1e8aac |
GSList *gsi_list_list = NULL;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (gdk_display_get_default () == NULL)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
values = g_array_sized_new (TRUE, TRUE, sizeof (GEnumValue), 1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
value.value = 0;
|
|
Packit |
1e8aac |
value.value_name = "dummy";
|
|
Packit |
1e8aac |
value.value_nick = "Dummy";
|
|
Packit |
1e8aac |
g_array_append_val (values, value);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return values;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
Packit |
1e8aac |
stock_list = g_slist_reverse (gtk_stock_list_ids ());
|
|
Packit |
1e8aac |
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
values = g_array_sized_new (TRUE, TRUE, sizeof (GEnumValue),
|
|
Packit |
1e8aac |
g_slist_length (stock_list));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* We want gtk+ stock items to appear first */
|
|
Packit |
1e8aac |
if ((stock_prefixs && strcmp (stock_prefixs->data, "gtk-")) ||
|
|
Packit |
1e8aac |
stock_prefixs == NULL)
|
|
Packit |
1e8aac |
stock_prefixs = g_slist_prepend (stock_prefixs, g_strdup ("gtk-"));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (p = stock_prefixs; p; p = g_slist_next (p))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
prefix = p->data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (l = stock_list; l; l = g_slist_next (l))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
stock_id = l->data;
|
|
Packit |
1e8aac |
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
Packit |
1e8aac |
if (g_str_has_prefix (stock_id, prefix) == FALSE ||
|
|
Packit |
1e8aac |
gtk_stock_lookup (stock_id, &item) == FALSE)
|
|
Packit |
1e8aac |
continue;
|
|
Packit |
1e8aac |
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gsi = new_from_values (item.label, stock_id, stock_enum++);
|
|
Packit |
1e8aac |
gsi_list =
|
|
Packit |
1e8aac |
g_slist_insert_sorted (gsi_list, gsi,
|
|
Packit |
1e8aac |
(GCompareFunc) compare_two_gsi);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gsi_list_list = g_slist_append (gsi_list_list, gsi_list);
|
|
Packit |
1e8aac |
gsi_list = NULL;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Images are appended after the gtk+ group of items */
|
|
Packit |
1e8aac |
if (include_images && !strcmp (prefix, "gtk-"))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
for (i = 0; i < G_N_ELEMENTS (builtin_stock_images); i++)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gsi =
|
|
Packit |
1e8aac |
new_from_values (builtin_stock_images[i],
|
|
Packit |
1e8aac |
builtin_stock_images[i], stock_enum++);
|
|
Packit |
1e8aac |
gsi_list =
|
|
Packit |
1e8aac |
g_slist_insert_sorted (gsi_list, gsi,
|
|
Packit |
1e8aac |
(GCompareFunc) compare_two_gsi);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
gsi_list_list = g_slist_append (gsi_list_list, gsi_list);
|
|
Packit |
1e8aac |
gsi_list = NULL;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (p = gsi_list_list; p; p = g_slist_next (p))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (l = (GSList *) p->data; l; l = g_slist_next (l))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gsi = (GladeStockItem *) l->data;
|
|
Packit |
1e8aac |
value.value = gsi->value;
|
|
Packit |
1e8aac |
value.value_name = g_strdup (gsi->value_name);
|
|
Packit |
1e8aac |
value.value_nick = g_strdup (gsi->value_nick);
|
|
Packit |
1e8aac |
values = g_array_append_val (values, value);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_free (gsi->value_nick);
|
|
Packit |
1e8aac |
g_free (gsi->value_name);
|
|
Packit |
1e8aac |
g_free (gsi->clean_name);
|
|
Packit |
1e8aac |
g_free (gsi);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
g_slist_free ((GSList *) p->data);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_slist_free (gsi_list_list);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
stock_prefixs_done = TRUE;
|
|
Packit |
1e8aac |
g_slist_free (stock_list);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return values;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gchar *
|
|
Packit |
1e8aac |
clean_stock_name (const gchar * name)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gchar *clean_name, *str;
|
|
Packit |
1e8aac |
size_t len = 0;
|
|
Packit |
1e8aac |
guint i = 0;
|
|
Packit |
1e8aac |
guint j = 0;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_assert (name && name[0]);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
str = g_strdup (name);
|
|
Packit |
1e8aac |
len = strlen (str);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
while (i + j <= len)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (str[i + j] == '_')
|
|
Packit |
1e8aac |
j++;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
str[i] = str[i + j];
|
|
Packit |
1e8aac |
i++;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
clean_name = g_strndup (str, i - j);
|
|
Packit |
1e8aac |
g_free (str);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return clean_name;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GType
|
|
Packit |
1e8aac |
glade_standard_stock_get_type (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
static GType etype = 0;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (etype == 0)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GArray *values = list_stock_items (FALSE);
|
|
Packit |
1e8aac |
gint i, n_values = values->len;
|
|
Packit |
1e8aac |
GEnumValue *enum_values = (GEnumValue *) values->data;
|
|
Packit |
1e8aac |
GtkStockItem item;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
etype = g_enum_register_static ("GladeStock",
|
|
Packit |
1e8aac |
(GEnumValue *) g_array_free (values,
|
|
Packit |
1e8aac |
FALSE));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Register displayable by GType, i.e. after the types been created. */
|
|
Packit |
1e8aac |
for (i = 0; i < n_values; i++)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
Packit |
1e8aac |
gboolean valid_item = gtk_stock_lookup (enum_values[i].value_nick, &item);
|
|
Packit |
1e8aac |
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (valid_item)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gchar *clean_name = clean_stock_name (item.label);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!glade_get_displayable_value (etype, enum_values[i].value_nick))
|
|
Packit |
1e8aac |
glade_register_translated_value (etype, enum_values[i].value_nick, clean_name);
|
|
Packit |
1e8aac |
g_free (clean_name);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
return etype;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GType
|
|
Packit |
1e8aac |
glade_standard_stock_image_get_type (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
static GType etype = 0;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (etype == 0)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GArray *values = list_stock_items (TRUE);
|
|
Packit |
1e8aac |
gint i, n_values = values->len;
|
|
Packit |
1e8aac |
GEnumValue *enum_values = (GEnumValue *) values->data;
|
|
Packit |
1e8aac |
GtkStockItem item;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
etype = g_enum_register_static ("GladeStockImage",
|
|
Packit |
1e8aac |
(GEnumValue *) g_array_free (values,
|
|
Packit |
1e8aac |
FALSE));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Register displayable by GType, i.e. after the types been created. */
|
|
Packit |
1e8aac |
for (i = 0; i < n_values; i++)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
Packit |
1e8aac |
gboolean valid_item = gtk_stock_lookup (enum_values[i].value_nick, &item);
|
|
Packit |
1e8aac |
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
Packit |
1e8aac |
if (valid_item)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gchar *clean_name = clean_stock_name (item.label);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* These are translated, we just cut out the mnemonic underscores */
|
|
Packit |
1e8aac |
if (!glade_get_displayable_value (etype, enum_values[i].value_nick))
|
|
Packit |
1e8aac |
glade_register_translated_value (etype, enum_values[i].value_nick, clean_name);
|
|
Packit |
1e8aac |
g_free (clean_name);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (i = 0; i < G_N_ELEMENTS (builtin_stock_images); i++)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
/* these ones are translated from glade */
|
|
Packit |
1e8aac |
if (!glade_get_displayable_value (etype, builtin_stock_images[i]))
|
|
Packit |
1e8aac |
glade_register_displayable_value (etype,
|
|
Packit |
1e8aac |
builtin_stock_images[i],
|
|
Packit |
1e8aac |
GETTEXT_PACKAGE,
|
|
Packit |
1e8aac |
builtin_stock_displayables[i]);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
return etype;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_stock_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_param_spec_enum ("stock", _("Stock"),
|
|
Packit |
1e8aac |
_("A builtin stock item"),
|
|
Packit |
1e8aac |
GLADE_TYPE_STOCK, 0, G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_stock_image_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_param_spec_enum ("stock-image", _("Stock Image"),
|
|
Packit |
1e8aac |
_("A builtin stock image"),
|
|
Packit |
1e8aac |
GLADE_TYPE_STOCK_IMAGE, 0, G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/****************************************************************
|
|
Packit |
1e8aac |
* A GList boxed type used by GladeParamSpecObjects and *
|
|
Packit |
1e8aac |
* GladeParamSpecAccel (which is now in the glade-gtk backend) *
|
|
Packit |
1e8aac |
****************************************************************/
|
|
Packit |
1e8aac |
GType
|
|
Packit |
1e8aac |
glade_glist_get_type (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
static GType type_id = 0;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!type_id)
|
|
Packit |
1e8aac |
type_id = g_boxed_type_register_static
|
|
Packit |
1e8aac |
("GladeGList",
|
|
Packit |
1e8aac |
(GBoxedCopyFunc) g_list_copy, (GBoxedFreeFunc) g_list_free);
|
|
Packit |
1e8aac |
return type_id;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/****************************************************************
|
|
Packit |
1e8aac |
* Built-in GladeParamSpecObjects for object list properties *
|
|
Packit |
1e8aac |
* (Used as a pspec to desctibe an AtkRelationSet, but can *
|
|
Packit |
1e8aac |
* for any object list property) *
|
|
Packit |
1e8aac |
****************************************************************/
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
param_objects_init (GParamSpec * pspec)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeParamSpecObjects *ospec = GLADE_PARAM_SPEC_OBJECTS (pspec);
|
|
Packit |
1e8aac |
ospec->type = G_TYPE_OBJECT;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
param_objects_set_default (GParamSpec * pspec, GValue * value)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (value->data[0].v_pointer != NULL)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_free (value->data[0].v_pointer);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
value->data[0].v_pointer = NULL;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gboolean
|
|
Packit |
1e8aac |
param_objects_validate (GParamSpec * pspec, GValue * value)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeParamSpecObjects *ospec = GLADE_PARAM_SPEC_OBJECTS (pspec);
|
|
Packit |
1e8aac |
GList *objects, *list, *toremove = NULL;
|
|
Packit |
1e8aac |
GObject *object;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
objects = value->data[0].v_pointer;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (list = objects; list; list = list->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
object = list->data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!(G_OBJECT_TYPE (object) == ospec->type ||
|
|
Packit |
1e8aac |
g_type_is_a (G_OBJECT_TYPE (object), ospec->type)))
|
|
Packit |
1e8aac |
toremove = g_list_prepend (toremove, object);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (list = toremove; list; list = list->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
object = list->data;
|
|
Packit |
1e8aac |
objects = g_list_remove (objects, object);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
if (toremove)
|
|
Packit |
1e8aac |
g_list_free (toremove);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
value->data[0].v_pointer = objects;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return toremove != NULL;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gint
|
|
Packit |
1e8aac |
param_objects_values_cmp (GParamSpec * pspec,
|
|
Packit |
1e8aac |
const GValue * value1, const GValue * value2)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
guint8 *p1 = value1->data[0].v_pointer;
|
|
Packit |
1e8aac |
guint8 *p2 = value2->data[0].v_pointer;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* not much to compare here, try to at least provide stable lesser/greater result */
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return p1 < p2 ? -1 : p1 > p2;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GType
|
|
Packit |
1e8aac |
glade_param_objects_get_type (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
static GType objects_type = 0;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (objects_type == 0)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
static /* const */ GParamSpecTypeInfo pspec_info = {
|
|
Packit |
1e8aac |
sizeof (GladeParamSpecObjects), /* instance_size */
|
|
Packit |
1e8aac |
16, /* n_preallocs */
|
|
Packit |
1e8aac |
param_objects_init, /* instance_init */
|
|
Packit |
1e8aac |
0xdeadbeef, /* value_type, assigned further down */
|
|
Packit |
1e8aac |
NULL, /* finalize */
|
|
Packit |
1e8aac |
param_objects_set_default, /* value_set_default */
|
|
Packit |
1e8aac |
param_objects_validate, /* value_validate */
|
|
Packit |
1e8aac |
param_objects_values_cmp, /* values_cmp */
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
pspec_info.value_type = GLADE_TYPE_GLIST;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
objects_type = g_param_type_register_static
|
|
Packit |
1e8aac |
("GladeParamObjects", &pspec_info);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
return objects_type;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_param_spec_objects (const gchar * name,
|
|
Packit |
1e8aac |
const gchar * nick,
|
|
Packit |
1e8aac |
const gchar * blurb,
|
|
Packit |
1e8aac |
GType accepted_type, GParamFlags flags)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeParamSpecObjects *pspec;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
pspec = g_param_spec_internal (GLADE_TYPE_PARAM_OBJECTS,
|
|
Packit |
1e8aac |
name, nick, blurb, flags);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
pspec->type = accepted_type;
|
|
Packit |
1e8aac |
return G_PARAM_SPEC (pspec);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_param_spec_objects_set_type (GladeParamSpecObjects * pspec, GType type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
pspec->type = type;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GType
|
|
Packit |
1e8aac |
glade_param_spec_objects_get_type (GladeParamSpecObjects * pspec)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return pspec->type;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* This was developed for the purpose of holding a list
|
|
Packit |
1e8aac |
* of 'targets' in an AtkRelation (we are setting it up
|
|
Packit |
1e8aac |
* as a property)
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_objects_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return glade_param_spec_objects ("objects", _("Objects"),
|
|
Packit |
1e8aac |
_("A list of objects"),
|
|
Packit |
1e8aac |
G_TYPE_OBJECT, G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Pixbuf Type */
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_pixbuf_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_param_spec_object ("pixbuf", _("Image File Name"),
|
|
Packit |
1e8aac |
_("Enter a filename, relative path or full path to "
|
|
Packit |
1e8aac |
"load the image"), GDK_TYPE_PIXBUF,
|
|
Packit |
1e8aac |
G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* GdkColor */
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_gdkcolor_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_param_spec_boxed ("gdkcolor", _("Color"),
|
|
Packit |
1e8aac |
_("A GDK color value"), GDK_TYPE_COLOR,
|
|
Packit |
1e8aac |
G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/****************************************************************
|
|
Packit |
1e8aac |
* Basic types follow *
|
|
Packit |
1e8aac |
****************************************************************/
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_int_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_param_spec_int ("int", "Integer",
|
|
Packit |
1e8aac |
"An integer value",
|
|
Packit |
1e8aac |
G_MININT, G_MAXINT, 0, G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_uint_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_param_spec_uint ("uint", "Unsigned Integer",
|
|
Packit |
1e8aac |
"An unsigned integer value",
|
|
Packit |
1e8aac |
0, G_MAXUINT, 0, G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_string_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_param_spec_string ("string", _("String"),
|
|
Packit |
1e8aac |
_("An entry"), "", G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_strv_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_param_spec_boxed ("strv", "Strv",
|
|
Packit |
1e8aac |
"String array", G_TYPE_STRV, G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_float_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_param_spec_float ("float", "Float",
|
|
Packit |
1e8aac |
"A floating point entry",
|
|
Packit |
1e8aac |
0.0F, G_MAXFLOAT, 0.0F, G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GParamSpec *
|
|
Packit |
1e8aac |
glade_standard_boolean_spec (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_param_spec_boolean ("boolean", "Boolean",
|
|
Packit |
1e8aac |
"A boolean value", FALSE, G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
}
|