Use the slice allocator for many small allocations.

2006-01-04  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkaccelmap.c:
	* gtk/gtkactiongroup.c:
	* gtk/gtkdialog.c:
	* gtk/gtkfilesystemunix.c:
	* gtk/gtkgc.c:
	* gtk/gtkkeyhash.c:
	* gtk/gtkplug.c:
	* gtk/gtktextiter.c:
	* gtk/gtktextlayout.c:
	* gtk/gtkuimanager.c:
	* gtk/gtkwidget.c:
	* gtk/gtkwindow.c:
	* gtk/gtkxembed.c: Use the slice allocator for many small
	allocations.

	* gtk/gtkcolorsel.c:
	* gtk/gtktreeview.c: Use IPN.

	* gtk/gtkwidget.c: Remove an unused field from the AccelPath
	struct.
This commit is contained in:
Matthias Clasen 2006-01-04 07:06:12 +00:00 committed by Matthias Clasen
parent f827de4ec4
commit 04eceaf621
18 changed files with 166 additions and 95 deletions

View File

@ -1,3 +1,26 @@
2006-01-04 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkaccelmap.c:
* gtk/gtkactiongroup.c:
* gtk/gtkdialog.c:
* gtk/gtkfilesystemunix.c:
* gtk/gtkgc.c:
* gtk/gtkkeyhash.c:
* gtk/gtkplug.c:
* gtk/gtktextiter.c:
* gtk/gtktextlayout.c:
* gtk/gtkuimanager.c:
* gtk/gtkwidget.c:
* gtk/gtkwindow.c:
* gtk/gtkxembed.c: Use the slice allocator for many small
allocations.
* gtk/gtkcolorsel.c:
* gtk/gtktreeview.c: Use IPN.
* gtk/gtkwidget.c: Remove an unused field from the AccelPath
struct.
2006-01-04 Tor Lillqvist <tml@novell.com>
* gtk-zip.sh.in: Include also the gtk20-properties message catalogs.

View File

@ -1,3 +1,26 @@
2006-01-04 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkaccelmap.c:
* gtk/gtkactiongroup.c:
* gtk/gtkdialog.c:
* gtk/gtkfilesystemunix.c:
* gtk/gtkgc.c:
* gtk/gtkkeyhash.c:
* gtk/gtkplug.c:
* gtk/gtktextiter.c:
* gtk/gtktextlayout.c:
* gtk/gtkuimanager.c:
* gtk/gtkwidget.c:
* gtk/gtkwindow.c:
* gtk/gtkxembed.c: Use the slice allocator for many small
allocations.
* gtk/gtkcolorsel.c:
* gtk/gtktreeview.c: Use IPN.
* gtk/gtkwidget.c: Remove an unused field from the AccelPath
struct.
2006-01-04 Tor Lillqvist <tml@novell.com>
* gtk-zip.sh.in: Include also the gtk20-properties message catalogs.

View File

@ -57,8 +57,8 @@ typedef struct {
guint accel_mods;
guint std_accel_key;
guint std_accel_mods;
guint changed : 1;
guint lock_count;
guint changed : 1;
guint lock_count : 15;
GSList *groups;
} AccelEntry;
@ -179,8 +179,8 @@ gtk_accel_map_add_entry (const gchar *accel_path,
}
else
{
entry = g_new0 (AccelEntry, 1);
entry->accel_path = g_quark_to_string (g_quark_from_string (accel_path));
entry = g_slice_new0 (AccelEntry);
entry->accel_path = g_intern_string (accel_path);
entry->std_accel_key = accel_key;
entry->std_accel_mods = accel_mods;
entry->accel_key = accel_key;

View File

@ -714,7 +714,7 @@ shared_data_unref (gpointer data)
if (shared_data->destroy)
(*shared_data->destroy) (shared_data->data);
g_free (shared_data);
g_slice_free (SharedData, shared_data);
}
}
@ -748,7 +748,7 @@ gtk_action_group_add_actions_full (GtkActionGroup *action_group,
g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
shared_data = g_new0 (SharedData, 1);
shared_data = g_slice_new0 (SharedData);
shared_data->ref_count = 1;
shared_data->data = user_data;
shared_data->destroy = destroy;
@ -844,7 +844,7 @@ gtk_action_group_add_toggle_actions_full (GtkActionGroup *action_gro
g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
shared_data = g_new0 (SharedData, 1);
shared_data = g_slice_new0 (SharedData);
shared_data->ref_count = 1;
shared_data->data = user_data;
shared_data->destroy = destroy;

View File

@ -108,6 +108,7 @@ struct _ColorSelectionPrivate
guint changing : 1;
guint default_set : 1;
guint default_alpha_set : 1;
guint has_grab : 1;
gdouble color[COLORSEL_NUM_CHANNELS];
gdouble old_color[COLORSEL_NUM_CHANNELS];
@ -140,7 +141,6 @@ struct _ColorSelectionPrivate
/* Window for grabbing on */
GtkWidget *dropper_grab_widget;
guint32 grab_time;
gboolean has_grab;
/* Connection to settings */
gulong settings_connection;
@ -1907,6 +1907,8 @@ gtk_color_selection_class_init (GtkColorSelectionClass *klass)
P_("Palette to use in the color selector"),
default_colors,
GTK_PARAM_READWRITE));
g_type_class_add_private (gobject_class, sizeof (ColorSelectionPrivate));
}
/* widget functions */
@ -1925,7 +1927,7 @@ gtk_color_selection_init (GtkColorSelection *colorsel)
gtk_widget_push_composite_child ();
priv = colorsel->private_data = g_new0 (ColorSelectionPrivate, 1);
priv = colorsel->private_data = G_TYPE_INSTANCE_GET_PRIVATE (colorsel, GTK_TYPE_COLOR_SELECTION, ColorSelectionPrivate);
priv->changing = FALSE;
priv->default_set = FALSE;
priv->default_alpha_set = FALSE;
@ -2118,14 +2120,6 @@ gtk_color_selection_destroy (GtkObject *object)
static void
gtk_color_selection_finalize (GObject *object)
{
GtkColorSelection *cselection = GTK_COLOR_SELECTION (object);
if (cselection->private_data)
{
g_free (cselection->private_data);
cselection->private_data = NULL;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
}

View File

@ -532,6 +532,12 @@ gtk_dialog_new_with_buttons (const gchar *title,
return GTK_WIDGET (dialog);
}
static void
response_data_free (gpointer data)
{
g_slice_free (ResponseData, data);
}
static ResponseData*
get_response_data (GtkWidget *widget,
gboolean create)
@ -541,12 +547,12 @@ get_response_data (GtkWidget *widget,
if (ad == NULL && create)
{
ad = g_new (ResponseData, 1);
ad = g_slice_new (ResponseData);
g_object_set_data_full (G_OBJECT (widget),
I_("gtk-dialog-response-data"),
ad,
g_free);
response_data_free);
}
return ad;

View File

@ -702,7 +702,7 @@ icon_cache_element_free (IconCacheElement *element)
{
if (element->pixbuf)
g_object_unref (element->pixbuf);
g_free (element);
g_slice_free (IconCacheElement, element);
}
static void
@ -744,7 +744,7 @@ get_cached_icon (GtkWidget *widget,
element = g_hash_table_lookup (cache, name);
if (!element)
{
element = g_new0 (IconCacheElement, 1);
element = g_slice_new0 (IconCacheElement);
g_hash_table_insert (cache, g_strdup (name), element);
}

View File

@ -64,7 +64,7 @@ static gint gtk_gc_drawable_equal (GtkGCDrawable *a,
static gint initialize = TRUE;
static GCache *gc_cache = NULL;
static GQuark quark_gtk_gc_drawable_ht = 0;
GdkGC*
gtk_gc_get (gint depth,
@ -102,21 +102,21 @@ free_gc_drawable (gpointer data)
{
GtkGCDrawable *drawable = data;
g_object_unref (drawable->drawable);
g_free (drawable);
g_slice_free (GtkGCDrawable, drawable);
}
static GHashTable*
gtk_gc_get_drawable_ht (GdkScreen *screen)
{
GHashTable *ht = g_object_get_data (G_OBJECT (screen), "gtk-gc-drawable-ht");
GHashTable *ht = g_object_get_qdata (G_OBJECT (screen), quark_gtk_gc_drawable_ht);
if (!ht)
{
ht = g_hash_table_new_full ((GHashFunc) gtk_gc_drawable_hash,
(GEqualFunc) gtk_gc_drawable_equal,
NULL, free_gc_drawable);
g_object_set_data_full (G_OBJECT (screen),
I_("gtk-gc-drawable-ht"), ht,
(GDestroyNotify)g_hash_table_destroy);
g_object_set_qdata_full (G_OBJECT (screen),
quark_gtk_gc_drawable_ht, ht,
(GDestroyNotify)g_hash_table_destroy);
}
return ht;
@ -127,6 +127,8 @@ gtk_gc_init (void)
{
initialize = FALSE;
quark_gtk_gc_drawable_ht = g_quark_from_static_string ("gtk-gc-drawable-ht");
gc_cache = g_cache_new ((GCacheNewFunc) gtk_gc_new,
(GCacheDestroyFunc) gtk_gc_destroy,
(GCacheDupFunc) gtk_gc_key_dup,
@ -170,7 +172,7 @@ gtk_gc_new (gpointer key)
drawable = g_hash_table_lookup (ht, &keyval->depth);
if (!drawable)
{
drawable = g_new (GtkGCDrawable, 1);
drawable = g_slice_new (GtkGCDrawable);
drawable->depth = keyval->depth;
drawable->drawable = gdk_pixmap_new (gdk_screen_get_root_window (screen),
1, 1, drawable->depth);

View File

@ -147,7 +147,7 @@ key_hash_free_entry (GtkKeyHash *key_hash,
(*key_hash->destroy_notify) (entry->value);
g_free (entry->keys);
g_free (entry);
g_slice_free (GtkKeyHashEntry, entry);
}
static void
@ -202,7 +202,7 @@ _gtk_key_hash_add_entry (GtkKeyHash *key_hash,
GdkModifierType modifiers,
gpointer value)
{
GtkKeyHashEntry *entry = g_new (GtkKeyHashEntry, 1);
GtkKeyHashEntry *entry = g_slice_new (GtkKeyHashEntry);
entry->value = value;
entry->keyval = keyval;

View File

@ -802,7 +802,7 @@ keys_foreach (GtkWindow *window,
gpointer data)
{
GHashTable *new_grabbed_keys = data;
GrabbedKey *key = g_new (GrabbedKey, 1);
GrabbedKey *key = g_slice_new (GrabbedKey);
key->accelerator_key = keyval;
key->accelerator_mods = modifiers;
@ -810,13 +810,19 @@ keys_foreach (GtkWindow *window,
g_hash_table_replace (new_grabbed_keys, key, key);
}
static void
grabbed_key_free (gpointer data)
{
g_slice_free (GrabbedKey, data);
}
static void
gtk_plug_keys_changed (GtkWindow *window)
{
GHashTable *new_grabbed_keys, *old_grabbed_keys;
GtkPlug *plug = GTK_PLUG (window);
new_grabbed_keys = g_hash_table_new_full (grabbed_key_hash, grabbed_key_equal, (GDestroyNotify)g_free, NULL);
new_grabbed_keys = g_hash_table_new_full (grabbed_key_hash, grabbed_key_equal, (GDestroyNotify)grabbed_key_free, NULL);
_gtk_window_keys_foreach (window, keys_foreach, new_grabbed_keys);
if (plug->socket_window)

View File

@ -441,7 +441,7 @@ gtk_text_iter_copy (const GtkTextIter *iter)
g_return_val_if_fail (iter != NULL, NULL);
new_iter = g_new (GtkTextIter, 1);
new_iter = g_slice_new (GtkTextIter);
*new_iter = *iter;
@ -462,7 +462,7 @@ gtk_text_iter_free (GtkTextIter *iter)
{
g_return_if_fail (iter != NULL);
g_free (iter);
g_slice_free (GtkTextIter, iter);
}
GType

View File

@ -1323,7 +1323,7 @@ gtk_text_attr_appearance_destroy (PangoAttribute *attr)
if (appearance->fg_stipple)
g_object_unref (appearance->fg_stipple);
g_free (attr);
g_slice_free (GtkTextAttrAppearance, attr);
}
static gboolean
@ -1369,7 +1369,7 @@ gtk_text_attr_appearance_new (const GtkTextAppearance *appearance)
klass.type = gtk_text_attr_appearance_type =
pango_attr_type_register ("GtkTextAttrAppearance");
result = g_new (GtkTextAttrAppearance, 1);
result = g_slice_new (GtkTextAttrAppearance);
result->attr.klass = &klass;
result->appearance = *appearance;

View File

@ -170,6 +170,7 @@ gtk_tree_sortable_set_sort_func (GtkTreeSortable *sortable,
GtkTreeSortableIface *iface;
g_return_if_fail (GTK_IS_TREE_SORTABLE (sortable));
g_return_if_fail (sort_func != NULL);
iface = GTK_TREE_SORTABLE_GET_IFACE (sortable);

View File

@ -1151,12 +1151,15 @@ gtk_tree_view_class_init (GtkTreeViewClass *class)
gtk_binding_entry_add_signal (binding_set, GDK_f, GDK_CONTROL_MASK, "start_interactive_search", 0);
gtk_binding_entry_add_signal (binding_set, GDK_F, GDK_CONTROL_MASK, "start_interactive_search", 0);
g_type_class_add_private (o_class, sizeof (GtkTreeViewPrivate));
}
static void
gtk_tree_view_init (GtkTreeView *tree_view)
{
tree_view->priv = g_new0 (GtkTreeViewPrivate, 1);
tree_view->priv = G_TYPE_INSTANCE_GET_PRIVATE (tree_view, GTK_TYPE_TREE_VIEW, GtkTreeViewPrivate);
GTK_WIDGET_SET_FLAGS (tree_view, GTK_CAN_FOCUS);
gtk_widget_set_redraw_on_allocate (GTK_WIDGET (tree_view), FALSE);
@ -1316,10 +1319,6 @@ gtk_tree_view_get_property (GObject *object,
static void
gtk_tree_view_finalize (GObject *object)
{
GtkTreeView *tree_view = (GtkTreeView *) object;
g_free (tree_view->priv);
(* G_OBJECT_CLASS (parent_class)->finalize) (object);
}

View File

@ -980,12 +980,18 @@ get_node (GtkUIManager *self,
return node;
}
static void
node_ui_reference_free (gpointer data)
{
g_slice_free (NodeUIReference, data);
}
static gboolean
free_node (GNode *node)
{
Node *info = NODE_INFO (node);
g_list_foreach (info->uifiles, (GFunc) g_free, NULL);
g_list_foreach (info->uifiles, (GFunc) node_ui_reference_free, NULL);
g_list_free (info->uifiles);
if (info->action)
@ -1032,7 +1038,7 @@ node_prepend_ui_reference (GNode *gnode,
reference = node->uifiles->data;
else
{
reference = g_new (NodeUIReference, 1);
reference = g_slice_new (NodeUIReference);
node->uifiles = g_list_prepend (node->uifiles, reference);
}
@ -1058,7 +1064,7 @@ node_remove_ui_reference (GNode *gnode,
if (p == node->uifiles)
mark_node_dirty (gnode);
node->uifiles = g_list_delete_link (node->uifiles, p);
g_free (reference);
g_slice_free (NodeUIReference, reference);
break;
}

View File

@ -3340,7 +3340,6 @@ gtk_widget_list_accel_closures (GtkWidget *widget)
typedef struct {
GQuark path_quark;
GtkWidget *widget;
GtkAccelGroup *accel_group;
GClosure *closure;
} AccelPath;
@ -3355,7 +3354,7 @@ destroy_accel_path (gpointer data)
/* closures_destroy takes care of unrefing the closure */
g_object_unref (apath->accel_group);
g_free (apath);
g_slice_free (AccelPath, apath);
}
@ -3399,11 +3398,10 @@ gtk_widget_set_accel_path (GtkWidget *widget,
g_return_if_fail (_gtk_accel_path_is_valid (accel_path));
gtk_accel_map_add_entry (accel_path, 0, 0);
apath = g_new (AccelPath, 1);
apath->widget = widget;
apath = g_slice_new (AccelPath);
apath->accel_group = g_object_ref (accel_group);
apath->path_quark = g_quark_from_string (accel_path);
apath->closure = widget_new_accel_closure (apath->widget, GTK_WIDGET_GET_CLASS (apath->widget)->activate_signal);
apath->closure = widget_new_accel_closure (widget, GTK_WIDGET_GET_CLASS (widget)->activate_signal);
}
else
apath = NULL;
@ -5920,14 +5918,14 @@ gtk_widget_set_events (GtkWidget *widget,
if (events)
{
if (!eventp)
eventp = g_new (gint, 1);
eventp = g_slice_new (gint);
*eventp = events;
g_object_set_qdata (G_OBJECT (widget), quark_event_mask, eventp);
}
else if (eventp)
{
g_free (eventp);
g_slice_free (gint, eventp);
g_object_set_qdata (G_OBJECT (widget), quark_event_mask, NULL);
}
@ -5983,7 +5981,7 @@ gtk_widget_add_events (GtkWidget *widget,
{
if (!eventp)
{
eventp = g_new (gint, 1);
eventp = g_slice_new (gint);
*eventp = 0;
}
@ -5992,7 +5990,7 @@ gtk_widget_add_events (GtkWidget *widget,
}
else if (eventp)
{
g_free (eventp);
g_slice_free (gint, eventp);
g_object_set_qdata (G_OBJECT (widget), quark_event_mask, NULL);
}
@ -6033,7 +6031,7 @@ gtk_widget_set_extension_events (GtkWidget *widget,
modep = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode);
if (!modep)
modep = g_new (GdkExtensionMode, 1);
modep = g_slice_new (GdkExtensionMode);
*modep = mode;
g_object_set_qdata (G_OBJECT (widget), quark_extension_event_mode, modep);
@ -6695,11 +6693,11 @@ gtk_widget_finalize (GObject *object)
events = g_object_get_qdata (G_OBJECT (widget), quark_event_mask);
if (events)
g_free (events);
g_slice_free (gint, events);
mode = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode);
if (mode)
g_free (mode);
g_slice_free (GdkExtensionMode, mode);
accessible = g_object_get_qdata (G_OBJECT (widget), quark_accessible_object);
if (accessible)
@ -6973,7 +6971,7 @@ static void
gtk_widget_shape_info_destroy (GtkWidgetShapeInfo *info)
{
g_object_unref (info->shape_mask);
g_free (info);
g_slice_free (GtkWidgetShapeInfo, info);
}
/**
@ -7012,7 +7010,7 @@ gtk_widget_shape_combine_mask (GtkWidget *widget,
{
GTK_PRIVATE_SET_FLAG (widget, GTK_HAS_SHAPE_MASK);
shape_info = g_new (GtkWidgetShapeInfo, 1);
shape_info = g_slice_new (GtkWidgetShapeInfo);
g_object_set_qdata_full (G_OBJECT (widget), quark_shape_info, shape_info,
(GDestroyNotify) gtk_widget_shape_info_destroy);

View File

@ -289,6 +289,11 @@ static guint default_icon_serial = 0;
static gboolean disable_startup_notification = FALSE;
static gboolean sent_startup_notification = FALSE;
static GQuark quark_gtk_embedded = 0;
static GQuark quark_gtk_window_key_hash = 0;
static GQuark quark_gtk_window_default_icon_pixmap = 0;
static GQuark quark_gtk_window_icon_info = 0;
static void gtk_window_set_property (GObject *object,
guint prop_id,
const GValue *value,
@ -376,6 +381,11 @@ gtk_window_class_init (GtkWindowClass *klass)
parent_class = g_type_class_peek_parent (klass);
quark_gtk_embedded = g_quark_from_static_string ("gtk-embedded");
quark_gtk_window_key_hash = g_quark_from_static_string ("gtk-window-key-hash");
quark_gtk_window_default_icon_pixmap = g_quark_from_static_string ("gtk-window-default-icon-pixmap");
quark_gtk_window_icon_info = g_quark_from_static_string ("gtk-window-icon-info");
gobject_class->dispose = gtk_window_dispose;
gobject_class->finalize = gtk_window_finalize;
@ -1726,17 +1736,16 @@ gtk_window_add_embedded_xid (GtkWindow *window, guint xid)
g_return_if_fail (GTK_IS_WINDOW (window));
embedded_windows = g_object_get_data (G_OBJECT (window), "gtk-embedded");
embedded_windows = g_object_get_qdata (G_OBJECT (window), quark_gtk_embedded);
if (embedded_windows)
g_object_steal_qdata (G_OBJECT (window),
g_quark_from_static_string ("gtk-embedded"));
g_object_steal_qdata (G_OBJECT (window), quark_gtk_embedded);
embedded_windows = g_list_prepend (embedded_windows,
GUINT_TO_POINTER (xid));
g_object_set_data_full (G_OBJECT (window), I_("gtk-embedded"),
embedded_windows,
embedded_windows ?
(GDestroyNotify) g_list_free : NULL);
g_object_set_qdata_full (G_OBJECT (window), quark_gtk_embedded,
embedded_windows,
embedded_windows ?
(GDestroyNotify) g_list_free : NULL);
}
void
@ -1747,10 +1756,9 @@ gtk_window_remove_embedded_xid (GtkWindow *window, guint xid)
g_return_if_fail (GTK_IS_WINDOW (window));
embedded_windows = g_object_get_data (G_OBJECT (window), "gtk-embedded");
embedded_windows = g_object_get_qdata (G_OBJECT (window), quark_gtk_embedded);
if (embedded_windows)
g_object_steal_qdata (G_OBJECT (window),
g_quark_from_static_string ("gtk-embedded"));
g_object_steal_qdata (G_OBJECT (window), quark_gtk_embedded);
node = g_list_find (embedded_windows, GUINT_TO_POINTER (xid));
if (node)
@ -1759,10 +1767,10 @@ gtk_window_remove_embedded_xid (GtkWindow *window, guint xid)
g_list_free_1 (node);
}
g_object_set_data_full (G_OBJECT (window), I_("gtk-embedded"),
embedded_windows,
embedded_windows ?
(GDestroyNotify) g_list_free : NULL);
g_object_set_qdata_full (G_OBJECT (window), quark_gtk_embedded,
embedded_windows,
embedded_windows ?
(GDestroyNotify) g_list_free : NULL);
}
void
@ -2538,15 +2546,14 @@ gtk_window_get_deletable (GtkWindow *window)
static GtkWindowIconInfo*
get_icon_info (GtkWindow *window)
{
return g_object_get_data (G_OBJECT (window),
"gtk-window-icon-info");
return g_object_get_qdata (G_OBJECT (window), quark_gtk_window_icon_info);
}
static void
free_icon_info (GtkWindowIconInfo *info)
{
g_free (info->icon_name);
g_free (info);
g_slice_free (GtkWindowIconInfo, info);
}
@ -2559,9 +2566,9 @@ ensure_icon_info (GtkWindow *window)
if (info == NULL)
{
info = g_new0 (GtkWindowIconInfo, 1);
g_object_set_data_full (G_OBJECT (window),
I_("gtk-window-icon-info"),
info = g_slice_new0 (GtkWindowIconInfo);
g_object_set_qdata_full (G_OBJECT (window),
quark_gtk_window_icon_info,
info,
(GDestroyNotify)free_icon_info);
}
@ -2578,12 +2585,13 @@ typedef struct {
static ScreenIconInfo *
get_screen_icon_info (GdkScreen *screen)
{
ScreenIconInfo *info = g_object_get_data (G_OBJECT (screen),
"gtk-window-default-icon-pixmap");
ScreenIconInfo *info = g_object_get_qdata (G_OBJECT (screen),
quark_gtk_window_default_icon_pixmap);
if (!info)
{
info = g_new0 (ScreenIconInfo, 1);
g_object_set_data (G_OBJECT (screen), I_("gtk-window-default-icon-pixmap"), info);
info = g_slice_new0 (ScreenIconInfo);
g_object_set_qdata (G_OBJECT (screen),
quark_gtk_window_default_icon_pixmap, info);
}
if (info->serial != default_icon_serial)
@ -4775,7 +4783,7 @@ send_client_message_to_embedded_windows (GtkWidget *widget,
{
GList *embedded_windows;
embedded_windows = g_object_get_data (G_OBJECT (widget), "gtk-embedded");
embedded_windows = g_object_get_qdata (G_OBJECT (widget), quark_gtk_embedded);
if (embedded_windows)
{
GdkEvent *send_event = gdk_event_new (GDK_CLIENT_EVENT);
@ -7490,9 +7498,15 @@ struct _GtkWindowKeyEntry
{
guint keyval;
guint modifiers;
gboolean is_mnemonic;
guint is_mnemonic : 1;
};
static void
window_key_entry_destroy (gpointer data)
{
g_slice_free (GtkWindowKeyEntry, data);
}
static void
add_to_key_hash (GtkWindow *window,
guint keyval,
@ -7502,7 +7516,7 @@ add_to_key_hash (GtkWindow *window,
{
GtkKeyHash *key_hash = data;
GtkWindowKeyEntry *entry = g_new (GtkWindowKeyEntry, 1);
GtkWindowKeyEntry *entry = g_slice_new (GtkWindowKeyEntry);
entry->keyval = keyval;
entry->modifiers = modifiers;
@ -7526,15 +7540,15 @@ static GtkKeyHash *
gtk_window_get_key_hash (GtkWindow *window)
{
GdkScreen *screen = gtk_window_check_screen (window);
GtkKeyHash *key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
GtkKeyHash *key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
if (key_hash)
return key_hash;
key_hash = _gtk_key_hash_new (gdk_keymap_get_for_display (gdk_screen_get_display (screen)),
(GDestroyNotify)g_free);
(GDestroyNotify)window_key_entry_destroy);
_gtk_window_keys_foreach (window, add_to_key_hash, key_hash);
g_object_set_data (G_OBJECT (window), I_("gtk-window-key-hash"), key_hash);
g_object_set_qdata (G_OBJECT (window), quark_gtk_window_key_hash, key_hash);
return key_hash;
}
@ -7542,11 +7556,11 @@ gtk_window_get_key_hash (GtkWindow *window)
static void
gtk_window_free_key_hash (GtkWindow *window)
{
GtkKeyHash *key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
GtkKeyHash *key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
if (key_hash)
{
_gtk_key_hash_free (key_hash);
g_object_set_data (G_OBJECT (window), "gtk-window-key-hash", NULL);
g_object_set_qdata (G_OBJECT (window), quark_gtk_window_key_hash, NULL);
}
}
@ -7566,13 +7580,13 @@ gboolean
gtk_window_activate_key (GtkWindow *window,
GdkEventKey *event)
{
GtkKeyHash *key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
GtkKeyHash *key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
GtkWindowKeyEntry *found_entry = NULL;
if (!key_hash)
{
gtk_window_keys_changed (window);
key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
}
if (key_hash)

View File

@ -47,7 +47,7 @@ static GSList *current_messages;
void
_gtk_xembed_push_message (XEvent *xevent)
{
GtkXEmbedMessage *message = g_new (GtkXEmbedMessage, 1);
GtkXEmbedMessage *message = g_slice_new (GtkXEmbedMessage);
message->time = xevent->xclient.data.l[0];
message->message = xevent->xclient.data.l[1];
@ -68,8 +68,7 @@ _gtk_xembed_pop_message (void)
{
GtkXEmbedMessage *message = current_messages->data;
current_messages = g_slist_delete_link (current_messages, current_messages);
g_free (message);
g_slice_free (GtkXEmbedMessage, message);
}
/**