Made MooGladeXML a GObject; fixed not-freeing of it
parent
f269a4a40a
commit
21cfa159be
|
@ -428,7 +428,7 @@ moo_edit_save_multiple_changes_dialog (GSList *docs,
|
|||
|
||||
g_free (msg);
|
||||
gtk_widget_destroy (dialog);
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -745,7 +745,7 @@ moo_text_prompt_on_replace_dialog (GtkWidget *parent)
|
|||
xml = moo_glade_xml_new_from_buf (MOO_TEXT_FIND_GLADE_UI, -1,
|
||||
"prompt_on_replace_dialog", NULL);
|
||||
dialog = moo_glade_xml_get_widget (xml, "prompt_on_replace_dialog");
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
|
||||
moo_position_window (dialog, parent, FALSE, FALSE, 0, 0);
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ moo_find_init (MooFind *find)
|
|||
|
||||
if (!moo_glade_xml_parse_memory (find->xml, MOO_TEXT_FIND_GLADE_UI, -1, "vbox"))
|
||||
{
|
||||
moo_glade_xml_unref (find->xml);
|
||||
g_object_unref (find->xml);
|
||||
find->xml = NULL;
|
||||
g_return_if_reached ();
|
||||
}
|
||||
|
@ -196,7 +196,7 @@ moo_find_finalize (GObject *object)
|
|||
{
|
||||
MooFind *find = MOO_FIND (object);
|
||||
|
||||
moo_glade_xml_unref (find->xml);
|
||||
g_object_unref (find->xml);
|
||||
egg_regex_unref (find->regex);
|
||||
|
||||
G_OBJECT_CLASS(moo_find_parent_class)->finalize (object);
|
||||
|
@ -972,7 +972,7 @@ moo_text_view_run_goto_line (GtkTextView *view)
|
|||
|
||||
moo_position_window (dialog, GTK_WIDGET (view), FALSE, FALSE, 0, 0);
|
||||
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
|
||||
if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK)
|
||||
{
|
||||
|
|
|
@ -664,7 +664,7 @@ save_as_dialog (GtkWidget *parent,
|
|||
|
||||
out:
|
||||
if (xml)
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
if (dialog)
|
||||
gtk_widget_destroy (dialog);
|
||||
return fullname;
|
||||
|
|
|
@ -815,9 +815,9 @@ find_window_plugin_destroy (WindowStuff *stuff)
|
|||
if (stuff->find_dialog)
|
||||
gtk_widget_destroy (stuff->find_dialog);
|
||||
if (stuff->grep_xml)
|
||||
moo_glade_xml_unref (stuff->grep_xml);
|
||||
g_object_unref (stuff->grep_xml);
|
||||
if (stuff->find_xml)
|
||||
moo_glade_xml_unref (stuff->find_xml);
|
||||
g_object_unref (stuff->find_xml);
|
||||
if (stuff->grep_completion)
|
||||
g_object_unref (stuff->grep_completion);
|
||||
if (stuff->find_completion)
|
||||
|
|
|
@ -36,6 +36,13 @@
|
|||
(gtype-id "MOO_TYPE_FILTER_MGR")
|
||||
)
|
||||
|
||||
(define-object GladeXML
|
||||
(in-module "Moo")
|
||||
(parent "GObject")
|
||||
(c-name "MooGladeXML")
|
||||
(gtype-id "MOO_TYPE_GLADE_XML")
|
||||
)
|
||||
|
||||
(define-object HistoryEntry
|
||||
(in-module "Moo")
|
||||
(parent "MooCombo")
|
||||
|
@ -849,18 +856,6 @@
|
|||
)
|
||||
)
|
||||
|
||||
(define-method ref
|
||||
(of-object "MooGladeXML")
|
||||
(c-name "moo_glade_xml_ref")
|
||||
(return-type "MooGladeXML*")
|
||||
)
|
||||
|
||||
(define-method unref
|
||||
(of-object "MooGladeXML")
|
||||
(c-name "moo_glade_xml_unref")
|
||||
(return-type "none")
|
||||
)
|
||||
|
||||
(define-method get_widget
|
||||
(of-object "MooGladeXML")
|
||||
(c-name "moo_glade_xml_get_widget")
|
||||
|
|
|
@ -579,7 +579,7 @@ moo_accel_prefs_page_new (MooActionGroup *actions)
|
|||
stuff->shortcut = moo_glade_xml_get_widget (xml, "shortcut");
|
||||
stuff->default_label = moo_glade_xml_get_widget (xml, "default_label");
|
||||
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
|
||||
stuff->store = gtk_tree_store_new (N_COLUMNS,
|
||||
G_TYPE_STRING,
|
||||
|
@ -1055,7 +1055,7 @@ moo_accel_prefs_dialog_new (MooActionGroup *group)
|
|||
page_holder = moo_glade_xml_get_widget (xml, "page_holder");
|
||||
gtk_container_add (GTK_CONTAINER (page_holder), page);
|
||||
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
|
||||
#if GTK_MINOR_VERSION >= 6
|
||||
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
|
||||
|
|
|
@ -292,7 +292,7 @@ static void moo_accel_button_clicked (MooAccelButton *button)
|
|||
response = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
|
||||
gtk_widget_destroy (dialog);
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
|
||||
if (response == GTK_RESPONSE_OK)
|
||||
{
|
||||
|
|
|
@ -820,7 +820,7 @@ GtkWidget *moo_bookmark_mgr_get_editor (MooBookmarkMgr *mgr)
|
|||
g_assert (dialog != NULL);
|
||||
|
||||
g_object_set_data_full (G_OBJECT (dialog), "dialog-glade-xml",
|
||||
xml, (GDestroyNotify) moo_glade_xml_unref);
|
||||
xml, (GDestroyNotify) g_object_unref);
|
||||
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ moo_file_props_dialog_init (MooFilePropsDialog *dialog)
|
|||
|
||||
if (!moo_glade_xml_parse_memory (dialog->xml, MOO_FILE_PROPS_GLADE_UI, -1, "notebook"))
|
||||
{
|
||||
moo_glade_xml_unref (dialog->xml);
|
||||
g_object_unref (dialog->xml);
|
||||
dialog->xml = NULL;
|
||||
g_return_if_reached ();
|
||||
}
|
||||
|
@ -263,7 +263,7 @@ moo_file_props_dialog_destroy (GtkObject *object)
|
|||
|
||||
if (dialog->xml)
|
||||
{
|
||||
moo_glade_xml_unref (dialog->xml);
|
||||
g_object_unref (dialog->xml);
|
||||
if (dialog->file)
|
||||
moo_file_unref (dialog->file);
|
||||
if (dialog->folder)
|
||||
|
@ -341,7 +341,7 @@ moo_create_folder_dialog (GtkWidget *parent,
|
|||
else
|
||||
new_folder_name = NULL;
|
||||
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
gtk_widget_destroy (dialog);
|
||||
return new_folder_name;
|
||||
}
|
||||
|
@ -484,7 +484,7 @@ moo_file_view_save_drop_dialog (GtkWidget *parent,
|
|||
}
|
||||
|
||||
out:
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
gtk_widget_destroy (dialog);
|
||||
g_free (start_name);
|
||||
return fullname;
|
||||
|
|
|
@ -32,6 +32,9 @@
|
|||
#endif
|
||||
|
||||
|
||||
G_DEFINE_TYPE (MooGladeXML, moo_glade_xml, G_TYPE_OBJECT)
|
||||
|
||||
|
||||
#define FOREACH_ELM_START(parent,elm) \
|
||||
G_STMT_START { \
|
||||
MooMarkupNode *elm; \
|
||||
|
@ -117,8 +120,7 @@ struct _PackingProps {
|
|||
PackPropMask mask;
|
||||
};
|
||||
|
||||
struct _MooGladeXML {
|
||||
guint ref_count;
|
||||
struct _MooGladeXMLPrivate {
|
||||
MooMarkupDoc *doc;
|
||||
MooMarkupNode *root;
|
||||
GHashTable *widgets;
|
||||
|
@ -181,7 +183,7 @@ static gboolean parse_property (GParamSpec *param_spec,
|
|||
static gboolean moo_glade_xml_parse_markup (MooGladeXML *xml,
|
||||
MooMarkupDoc *doc,
|
||||
const char *root);
|
||||
static void moo_glade_xml_free (MooGladeXML *xml);
|
||||
static void moo_glade_xml_dispose (GObject *object);
|
||||
static void moo_glade_xml_add_widget (MooGladeXML *xml,
|
||||
const char *id,
|
||||
GtkWidget *widget);
|
||||
|
@ -408,14 +410,15 @@ connect_signals (MooGladeXML *xml,
|
|||
if (connect_special_signal (xml, node, signal))
|
||||
continue;
|
||||
|
||||
if (xml->signal_func)
|
||||
if (xml->priv->signal_func)
|
||||
{
|
||||
connected = xml->signal_func (xml, node->id,
|
||||
node->widget,
|
||||
signal->name,
|
||||
signal->handler,
|
||||
signal->object,
|
||||
xml->signal_func_data);
|
||||
connected = xml->priv->signal_func (xml, node->id,
|
||||
node->widget,
|
||||
signal->name,
|
||||
signal->handler,
|
||||
signal->object,
|
||||
xml->priv->signal_func_data);
|
||||
|
||||
if (connected)
|
||||
continue;
|
||||
}
|
||||
|
@ -548,7 +551,7 @@ moo_glade_xml_create_widget (MooGladeXML *xml,
|
|||
|
||||
g_return_val_if_fail (node != NULL, NULL);
|
||||
|
||||
pair = g_hash_table_lookup (xml->id_to_func, node->id);
|
||||
pair = g_hash_table_lookup (xml->priv->id_to_func, node->id);
|
||||
|
||||
if (pair)
|
||||
{
|
||||
|
@ -976,20 +979,20 @@ widget_new (MooGladeXML *xml,
|
|||
|
||||
id = moo_markup_get_prop (node, "id");
|
||||
|
||||
if (g_hash_table_lookup (xml->id_to_func, id))
|
||||
if (g_hash_table_lookup (xml->priv->id_to_func, id))
|
||||
{
|
||||
type = GTK_TYPE_WIDGET;
|
||||
}
|
||||
else
|
||||
{
|
||||
type = GPOINTER_TO_SIZE (g_hash_table_lookup (xml->id_to_type, id));
|
||||
type = GPOINTER_TO_SIZE (g_hash_table_lookup (xml->priv->id_to_type, id));
|
||||
|
||||
if (!type)
|
||||
{
|
||||
class_name = moo_markup_get_prop (node, "class");
|
||||
g_return_val_if_fail (id != NULL && class_name != NULL, NULL);
|
||||
|
||||
type = GPOINTER_TO_SIZE (g_hash_table_lookup (xml->class_to_type, class_name));
|
||||
type = GPOINTER_TO_SIZE (g_hash_table_lookup (xml->priv->class_to_type, class_name));
|
||||
|
||||
if (!type)
|
||||
{
|
||||
|
@ -1688,55 +1691,33 @@ out:
|
|||
}
|
||||
|
||||
|
||||
GType
|
||||
moo_glade_xml_get_type (void)
|
||||
static void
|
||||
moo_glade_xml_class_init (MooGladeXMLClass *klass)
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (!type)
|
||||
type = g_boxed_type_register_static ("MooGladeXML",
|
||||
(GBoxedCopyFunc) moo_glade_xml_ref,
|
||||
(GBoxedFreeFunc) moo_glade_xml_unref);
|
||||
|
||||
return type;
|
||||
G_OBJECT_CLASS(klass)->dispose = moo_glade_xml_dispose;
|
||||
}
|
||||
|
||||
|
||||
MooGladeXML*
|
||||
moo_glade_xml_ref (MooGladeXML *xml)
|
||||
static void
|
||||
moo_glade_xml_init (MooGladeXML *xml)
|
||||
{
|
||||
if (xml)
|
||||
++xml->ref_count;
|
||||
return xml;
|
||||
xml->priv = g_new0 (MooGladeXMLPrivate, 1);
|
||||
|
||||
xml->priv->widgets = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, NULL);
|
||||
xml->priv->class_to_type = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, NULL);
|
||||
xml->priv->id_to_type = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, NULL);
|
||||
xml->priv->id_to_func = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, (GDestroyNotify) func_data_pair_free);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_glade_xml_unref (MooGladeXML *xml)
|
||||
{
|
||||
if (xml && !--xml->ref_count)
|
||||
moo_glade_xml_free (xml);
|
||||
}
|
||||
|
||||
|
||||
MooGladeXML*
|
||||
MooGladeXML *
|
||||
moo_glade_xml_new_empty (void)
|
||||
{
|
||||
MooGladeXML *xml;
|
||||
|
||||
xml = g_new0 (MooGladeXML, 1);
|
||||
|
||||
xml->widgets = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, NULL);
|
||||
xml->class_to_type = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, NULL);
|
||||
xml->id_to_type = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, NULL);
|
||||
xml->id_to_func = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free,
|
||||
(GDestroyNotify) func_data_pair_free);
|
||||
|
||||
return xml;
|
||||
return g_object_new (MOO_TYPE_GLADE_XML, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1822,7 +1803,7 @@ moo_glade_xml_new (const char *file,
|
|||
|
||||
if (!moo_glade_xml_parse_file (xml, file, root))
|
||||
{
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1844,7 +1825,7 @@ moo_glade_xml_new_from_buf (const char *buffer,
|
|||
|
||||
if (!moo_glade_xml_parse_memory (xml, buffer, size, root))
|
||||
{
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1898,7 +1879,7 @@ moo_glade_xml_parse_markup (MooGladeXML *xml,
|
|||
Widget *widget;
|
||||
|
||||
g_return_val_if_fail (doc != NULL, FALSE);
|
||||
g_return_val_if_fail (xml->doc == NULL, FALSE);
|
||||
g_return_val_if_fail (xml->priv->doc == NULL, FALSE);
|
||||
|
||||
glade_elm = moo_markup_get_root_element (doc, "glade-interface");
|
||||
g_return_val_if_fail (glade_elm != NULL, FALSE);
|
||||
|
@ -1942,16 +1923,16 @@ moo_glade_xml_parse_markup (MooGladeXML *xml,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
xml->doc = moo_markup_doc_ref (doc);
|
||||
xml->root = root;
|
||||
xml->priv->doc = moo_markup_doc_ref (doc);
|
||||
xml->priv->root = root;
|
||||
|
||||
widget = widget_new (xml, NULL, xml->root);
|
||||
widget = widget_new (xml, NULL, xml->priv->root);
|
||||
|
||||
if (!widget)
|
||||
{
|
||||
moo_markup_doc_unref (xml->doc);
|
||||
xml->doc = NULL;
|
||||
xml->root = NULL;
|
||||
moo_markup_doc_unref (xml->priv->doc);
|
||||
xml->priv->doc = NULL;
|
||||
xml->priv->root = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -1959,9 +1940,9 @@ moo_glade_xml_parse_markup (MooGladeXML *xml,
|
|||
|
||||
if (!moo_glade_xml_build (xml, widget))
|
||||
{
|
||||
moo_markup_doc_unref (xml->doc);
|
||||
xml->doc = NULL;
|
||||
xml->root = NULL;
|
||||
moo_markup_doc_unref (xml->priv->doc);
|
||||
xml->priv->doc = NULL;
|
||||
xml->priv->root = NULL;
|
||||
widget_free (widget);
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -1970,45 +1951,36 @@ moo_glade_xml_parse_markup (MooGladeXML *xml,
|
|||
gtk_widget_show_all (widget->widget);
|
||||
#endif
|
||||
|
||||
xml->root_id = g_strdup (widget->id);
|
||||
xml->priv->root_id = g_strdup (widget->id);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
cmp_widget (G_GNUC_UNUSED gpointer key,
|
||||
gpointer value,
|
||||
gpointer widget)
|
||||
{
|
||||
return widget == value;
|
||||
}
|
||||
|
||||
static const char*
|
||||
get_widget_id (MooGladeXML *xml,
|
||||
GtkWidget *widget)
|
||||
{
|
||||
return g_hash_table_find (xml->widgets,
|
||||
(GHRFunc) cmp_widget,
|
||||
widget);
|
||||
}
|
||||
|
||||
|
||||
GtkWidget*
|
||||
moo_glade_xml_get_root (MooGladeXML *xml)
|
||||
{
|
||||
g_return_val_if_fail (xml != NULL, NULL);
|
||||
return moo_glade_xml_get_widget (xml, xml->root_id);
|
||||
return moo_glade_xml_get_widget (xml, xml->priv->root_id);
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
cmp_widget (G_GNUC_UNUSED gpointer key,
|
||||
gpointer widget,
|
||||
gpointer dead)
|
||||
{
|
||||
return widget == dead;
|
||||
}
|
||||
|
||||
static void
|
||||
widget_destroyed (MooGladeXML *xml,
|
||||
gpointer widget)
|
||||
{
|
||||
const char *id = get_widget_id (xml, widget);
|
||||
g_return_if_fail (id != NULL);
|
||||
g_hash_table_remove (xml->widgets, id);
|
||||
guint removed;
|
||||
removed = g_hash_table_foreach_remove (xml->priv->widgets,
|
||||
(GHRFunc) cmp_widget, widget);
|
||||
g_return_if_fail (removed == 1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2018,8 +1990,8 @@ moo_glade_xml_add_widget (MooGladeXML *xml,
|
|||
{
|
||||
g_return_if_fail (id != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
g_hash_table_insert (xml->widgets, g_strdup (id), widget);
|
||||
g_assert (!g_hash_table_lookup (xml->priv->widgets, id));
|
||||
g_hash_table_insert (xml->priv->widgets, g_strdup (id), widget);
|
||||
g_object_weak_ref (G_OBJECT (widget), (GWeakNotify) widget_destroyed, xml);
|
||||
}
|
||||
|
||||
|
@ -2033,20 +2005,25 @@ unref_widget (G_GNUC_UNUSED gpointer key,
|
|||
}
|
||||
|
||||
static void
|
||||
moo_glade_xml_free (MooGladeXML *xml)
|
||||
moo_glade_xml_dispose (GObject *object)
|
||||
{
|
||||
if (xml)
|
||||
MooGladeXML *xml = MOO_GLADE_XML (object);
|
||||
|
||||
if (xml->priv)
|
||||
{
|
||||
g_hash_table_foreach (xml->widgets,
|
||||
(GHFunc) unref_widget, NULL);
|
||||
g_hash_table_destroy (xml->widgets);
|
||||
g_hash_table_destroy (xml->class_to_type);
|
||||
g_hash_table_destroy (xml->id_to_type);
|
||||
g_hash_table_destroy (xml->id_to_func);
|
||||
moo_markup_doc_unref (xml->doc);
|
||||
g_free (xml->root_id);
|
||||
g_free (xml);
|
||||
g_hash_table_foreach (xml->priv->widgets,
|
||||
(GHFunc) unref_widget, xml);
|
||||
g_hash_table_destroy (xml->priv->widgets);
|
||||
g_hash_table_destroy (xml->priv->class_to_type);
|
||||
g_hash_table_destroy (xml->priv->id_to_type);
|
||||
g_hash_table_destroy (xml->priv->id_to_func);
|
||||
moo_markup_doc_unref (xml->priv->doc);
|
||||
g_free (xml->priv->root_id);
|
||||
g_free (xml->priv);
|
||||
xml->priv = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS(moo_glade_xml_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2056,7 +2033,7 @@ moo_glade_xml_get_widget (MooGladeXML *xml,
|
|||
{
|
||||
g_return_val_if_fail (xml != NULL, NULL);
|
||||
g_return_val_if_fail (id != NULL, NULL);
|
||||
return g_hash_table_lookup (xml->widgets, id);
|
||||
return g_hash_table_lookup (xml->priv->widgets, id);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2069,11 +2046,11 @@ moo_glade_xml_map_class (MooGladeXML *xml,
|
|||
g_return_if_fail (class_name != NULL);
|
||||
|
||||
if (type)
|
||||
g_hash_table_insert (xml->class_to_type,
|
||||
g_hash_table_insert (xml->priv->class_to_type,
|
||||
g_strdup (class_name),
|
||||
GSIZE_TO_POINTER (type));
|
||||
else
|
||||
g_hash_table_remove (xml->class_to_type,
|
||||
g_hash_table_remove (xml->priv->class_to_type,
|
||||
class_name);
|
||||
}
|
||||
|
||||
|
@ -2087,11 +2064,11 @@ moo_glade_xml_map_id (MooGladeXML *xml,
|
|||
g_return_if_fail (id != NULL);
|
||||
|
||||
if (use_type)
|
||||
g_hash_table_insert (xml->id_to_type,
|
||||
g_hash_table_insert (xml->priv->id_to_type,
|
||||
g_strdup (id),
|
||||
GSIZE_TO_POINTER (use_type));
|
||||
else
|
||||
g_hash_table_remove (xml->id_to_type, id);
|
||||
g_hash_table_remove (xml->priv->id_to_type, id);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2104,11 +2081,11 @@ void moo_glade_xml_map_custom (MooGladeXML *xml,
|
|||
g_return_if_fail (id != NULL);
|
||||
|
||||
if (func)
|
||||
g_hash_table_insert (xml->id_to_func,
|
||||
g_hash_table_insert (xml->priv->id_to_func,
|
||||
g_strdup (id),
|
||||
func_data_pair_new (func, data));
|
||||
else
|
||||
g_hash_table_remove (xml->id_to_func, id);
|
||||
g_hash_table_remove (xml->priv->id_to_func, id);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2118,8 +2095,8 @@ moo_glade_xml_map_signal (MooGladeXML *xml,
|
|||
gpointer data)
|
||||
{
|
||||
g_return_if_fail (xml != NULL);
|
||||
xml->signal_func = func;
|
||||
xml->signal_func_data = data;
|
||||
xml->priv->signal_func = func;
|
||||
xml->priv->signal_func_data = data;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -18,9 +18,29 @@
|
|||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef struct _MooGladeXML MooGladeXML;
|
||||
|
||||
#define MOO_TYPE_GLADE_XML (moo_glade_xml_get_type ())
|
||||
#define MOO_TYPE_GLADE_XML (moo_glade_xml_get_type ())
|
||||
#define MOO_GLADE_XML(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOO_TYPE_GLADE_XML, MooGladeXML))
|
||||
#define MOO_GLADE_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOO_TYPE_GLADE_XML, MooGladeXMLClass))
|
||||
#define MOO_IS_GLADE_XML(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOO_TYPE_GLADE_XML))
|
||||
#define MOO_IS_GLADE_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOO_TYPE_GLADE_XML))
|
||||
#define MOO_GLADE_XML_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOO_TYPE_GLADE_XML, MooGladeXMLClass))
|
||||
|
||||
|
||||
typedef struct _MooGladeXML MooGladeXML;
|
||||
typedef struct _MooGladeXMLPrivate MooGladeXMLPrivate;
|
||||
typedef struct _MooGladeXMLClass MooGladeXMLClass;
|
||||
|
||||
|
||||
struct _MooGladeXML {
|
||||
GObject base;
|
||||
MooGladeXMLPrivate *priv;
|
||||
};
|
||||
|
||||
struct _MooGladeXMLClass {
|
||||
GObjectClass base_class;
|
||||
};
|
||||
|
||||
|
||||
typedef GtkWidget* (*MooGladeCreateFunc) (MooGladeXML *xml,
|
||||
const char *id,
|
||||
|
@ -68,9 +88,6 @@ MooGladeXML *moo_glade_xml_new_from_buf (const char *buffer,
|
|||
const char *root,
|
||||
const char *unused);
|
||||
|
||||
MooGladeXML *moo_glade_xml_ref (MooGladeXML *xml);
|
||||
void moo_glade_xml_unref (MooGladeXML *xml);
|
||||
|
||||
gpointer moo_glade_xml_get_widget (MooGladeXML *xml,
|
||||
const char *id);
|
||||
GtkWidget *moo_glade_xml_get_root (MooGladeXML *xml);
|
||||
|
|
|
@ -179,6 +179,10 @@ moo_prefs_dialog_destroy (GtkObject *object)
|
|||
|
||||
if (dialog->store)
|
||||
{
|
||||
GtkTreeSelection *selection = gtk_tree_view_get_selection (dialog->pages_list);
|
||||
g_signal_handlers_disconnect_by_func (selection,
|
||||
(gpointer) pages_list_selection_changed,
|
||||
dialog);
|
||||
gtk_tree_view_set_model (dialog->pages_list, NULL);
|
||||
gtk_tree_model_foreach (GTK_TREE_MODEL (dialog->store),
|
||||
(GtkTreeModelForeachFunc) destroy_page, NULL);
|
||||
|
|
|
@ -149,7 +149,7 @@ static void moo_prefs_dialog_page_finalize (GObject *object)
|
|||
if (page->icon)
|
||||
g_object_unref (page->icon);
|
||||
if (page->xml)
|
||||
moo_glade_xml_unref (page->xml);
|
||||
g_object_unref (page->xml);
|
||||
g_slist_free (page->widgets);
|
||||
|
||||
G_OBJECT_CLASS (moo_prefs_dialog_page_parent_class)->finalize (object);
|
||||
|
@ -324,7 +324,7 @@ moo_prefs_dialog_page_new_from_xml (const char *label,
|
|||
if (!moo_glade_xml_parse_memory (xml, buffer, buffer_size, page_id))
|
||||
{
|
||||
g_critical ("%s: could not parse xml", G_STRLOC);
|
||||
moo_glade_xml_unref (xml);
|
||||
g_object_unref (xml);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue