Author: peter
Date: 2007-01-10 13:53:01 +0000 (Wed, 10 Jan 2007)
New Revision: 24344

Modified:
   squeeze/trunk/src/preferences_dialog.c
   squeeze/trunk/src/widget_factory.c
Log:
Opening add and exctract dialogs multiple times and changing the properties; 
doesn't crash anymore


Modified: squeeze/trunk/src/preferences_dialog.c
===================================================================
--- squeeze/trunk/src/preferences_dialog.c      2007-01-10 11:53:30 UTC (rev 
24343)
+++ squeeze/trunk/src/preferences_dialog.c      2007-01-10 13:53:01 UTC (rev 
24344)
@@ -37,7 +37,10 @@
 
 inline static void
 sq_preferences_dialog_create_support_page(SQPreferencesDialog *dialog);
-
+/*
+inline static void
+sq_preferences_dialog_create_general_page(SQPreferencesDialog *dialog);
+*/
 static GtkWidget *
 sq_preferences_dialog_create_support_object_page(SQSupportTuple *tuple);
 
@@ -149,7 +152,52 @@
        return dialog;
 }
 
+/*
 inline static void
+sq_preferences_dialog_create_general_page(SQPreferencesDialog *dialog)
+{
+       box = gtk_vbox_new(FALSE, 0);
+       label = gtk_label_new_with_mnemonic(_("_General"));
+       gtk_notebook_append_page(GTK_NOTEBOOK(dialog->notebook), box, label);
+
+       frame  = gtk_frame_new(_("Archive viewer:"));
+       gtk_box_pack_start(GTK_BOX(box), frame,FALSE, FALSE, 0);
+       gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE);
+       gtk_container_set_border_width(GTK_CONTAINER(frame), 0);
+
+       GtkWidget *_vbox = gtk_vbox_new(FALSE, 0);
+       gtk_container_add(GTK_CONTAINER(frame), _vbox);
+       gtk_container_set_border_width(GTK_CONTAINER(_vbox), 0);
+
+       dialog->general.viewer.show_icons = 
gtk_check_button_new_with_mnemonic(_("_Show Icons"));
+       gtk_box_pack_start(GTK_BOX(_vbox), dialog->general.viewer.show_icons, 
FALSE, FALSE, 0);
+
+       dialog->general.viewer.rules_hint = 
gtk_check_button_new_with_mnemonic(_("_Rules Hint"));
+       gtk_box_pack_start(GTK_BOX(_vbox), dialog->general.viewer.rules_hint, 
FALSE, FALSE, 0);
+
+       frame  = gtk_frame_new(_("Sorting:"));
+       gtk_box_pack_start(GTK_BOX(_vbox), frame,FALSE, FALSE, 0);
+       gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE);
+       gtk_container_set_border_width(GTK_CONTAINER(frame), 0);
+
+       GtkWidget *sort_vbox = gtk_vbox_new(FALSE, 0);
+       gtk_container_add(GTK_CONTAINER(frame), sort_vbox);
+       gtk_container_set_border_width(GTK_CONTAINER(sort_vbox), 0);
+
+       dialog->general.viewer.sorting.sort_case = 
gtk_check_button_new_with_mnemonic(_("Sort _Case Sensitive "));
+       gtk_box_pack_start(GTK_BOX(sort_vbox), 
dialog->general.viewer.sorting.sort_case, FALSE, FALSE, 0);
+
+       dialog->general.viewer.sorting.sort_folders = 
gtk_check_button_new_with_mnemonic(_("Sort _Folders First"));
+       gtk_box_pack_start(GTK_BOX(sort_vbox), 
dialog->general.viewer.sorting.sort_folders, FALSE, FALSE, 0);
+
+#ifdef SQ_MAIN_ANY_BAR
+  frame = sq_widget_factory_create_property_widget(window->widget_factory, 
G_OBJECT(window), "navigation-style");
+       gtk_box_pack_start(GTK_BOX(box), frame,FALSE, FALSE, 0);
+#endif
+}
+*/
+
+inline static void
 sq_preferences_dialog_create_support_page(SQPreferencesDialog *dialog)
 {
        GtkWidget *iconview;

Modified: squeeze/trunk/src/widget_factory.c
===================================================================
--- squeeze/trunk/src/widget_factory.c  2007-01-10 11:53:30 UTC (rev 24343)
+++ squeeze/trunk/src/widget_factory.c  2007-01-10 13:53:01 UTC (rev 24344)
@@ -65,6 +65,8 @@
 cb_sq_widget_factory_property_changed(GtkWidget *widget, gpointer user_data);
 static void
 cb_sq_widget_factory_property_notify(GObject *obj, GParamSpec *pspec, gpointer 
user_data);
+static void
+cb_sq_widget_factory_widget_destroyed(GtkObject *obj, gpointer user_data);
 
 static void
 cb_sq_widget_factory_action_triggered(GtkWidget *widget, gpointer user_data);
@@ -125,6 +127,7 @@
        g_object_set_data(G_OBJECT(check), SQ_PROPERTY_SPEC_DATA, pspec);
        g_signal_connect(G_OBJECT(check), "toggled", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
        g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), check);
+       g_signal_connect(GTK_OBJECT(check), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
        const gchar *large_tip = g_param_spec_get_blurb(pspec);
        gchar *small_tip = NULL;
@@ -231,6 +234,7 @@
        g_object_set_data(G_OBJECT(spin), SQ_PROPERTY_SPEC_DATA, pspec);
        g_signal_connect(G_OBJECT(spin), "value-changed", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
        g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), spin);
+       g_signal_connect(GTK_OBJECT(spin), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
        gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 3);
        gtk_box_pack_end(GTK_BOX(box), spin, TRUE, TRUE, 3);
@@ -272,6 +276,7 @@
                g_object_set_data(G_OBJECT(radio), SQ_PROPERTY_VALUE_DATA, 
GINT_TO_POINTER(values[i].value));
                g_signal_connect(G_OBJECT(radio), "toggled", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
                g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), radio);
+       g_signal_connect(GTK_OBJECT(radio), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
                if(g_value_get_enum(value) == values[i].value)
                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), 
TRUE);
@@ -309,6 +314,7 @@
        g_object_set_data(G_OBJECT(combo), SQ_PROPERTY_SPEC_DATA, pspec);
        g_signal_connect(G_OBJECT(combo), "changed", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
        g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), combo);
+       g_signal_connect(GTK_OBJECT(combo), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
        for(i = 0; i < n; ++i)
        {
@@ -360,6 +366,7 @@
                g_object_set_data(G_OBJECT(check), SQ_PROPERTY_VALUE_DATA, 
GINT_TO_POINTER(values[i].value));
                g_signal_connect(G_OBJECT(check), "toggled", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
                g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), check);
+       g_signal_connect(GTK_OBJECT(check), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), 
g_value_get_enum(value) & values[i].value);
                gtk_box_pack_start(GTK_BOX(box), check, FALSE, FALSE, 5);
@@ -392,6 +399,7 @@
        g_object_set_data(G_OBJECT(entry), SQ_PROPERTY_SPEC_DATA, pspec);
        g_signal_connect(G_OBJECT(entry), "activate", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
        g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), entry);
+       g_signal_connect(GTK_OBJECT(entry), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
        gtk_entry_set_text(GTK_ENTRY(entry), g_value_get_string(value));
 
@@ -470,6 +478,8 @@
 
        g_value_unset(&value);
 
+       g_debug("created %p", widget);
+
        return widget;
 }
 
@@ -482,6 +492,7 @@
        g_object_set_data(G_OBJECT(check), SQ_PROPERTY_SPEC_DATA, pspec);
        g_signal_connect(G_OBJECT(check), "toggled", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
        g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), check);
+       g_signal_connect(GTK_OBJECT(check), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(check), 
g_value_get_boolean(value));
 
@@ -508,6 +519,7 @@
                g_object_set_data(G_OBJECT(radio), SQ_PROPERTY_VALUE_DATA, 
GINT_TO_POINTER(values[i].value));
                g_signal_connect(G_OBJECT(radio), "toggled", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
                g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), radio);
+               g_signal_connect(GTK_OBJECT(radio), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
                if(g_value_get_enum(value) == values[i].value)
                        
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(radio), TRUE);
@@ -541,6 +553,7 @@
                g_object_set_data(G_OBJECT(radio), SQ_PROPERTY_VALUE_DATA, 
GINT_TO_POINTER(values[i].value));
                g_signal_connect(G_OBJECT(radio), "toggled", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
                g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), radio);
+               g_signal_connect(GTK_OBJECT(radio), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
                if(g_value_get_enum(value) == values[i].value)
                        
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(radio), TRUE);
@@ -574,6 +587,7 @@
                g_object_set_data(G_OBJECT(check), SQ_PROPERTY_VALUE_DATA, 
GINT_TO_POINTER(values[i].value));
                g_signal_connect(G_OBJECT(check), "toggled", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
                g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), check);
+               g_signal_connect(GTK_OBJECT(check), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
                gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(check), 
g_value_get_enum(value) & values[i].value);
 
@@ -603,6 +617,7 @@
                g_object_set_data(G_OBJECT(check), SQ_PROPERTY_VALUE_DATA, 
GINT_TO_POINTER(values[i].value));
                g_signal_connect(G_OBJECT(check), "toggled", 
G_CALLBACK(cb_sq_widget_factory_property_changed), obj);
                g_signal_connect(obj, "notify", 
G_CALLBACK(cb_sq_widget_factory_property_notify), check);
+               g_signal_connect(GTK_OBJECT(check), "destroy", 
G_CALLBACK(cb_sq_widget_factory_widget_destroyed), obj);
 
                gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(check), 
g_value_get_enum(value) & values[i].value);
 
@@ -776,6 +791,8 @@
 {
        GValue value, other_value;
 
+       g_debug("notify %p", user_data);
+
        if(strcmp(g_param_spec_get_name(pspec), 
g_param_spec_get_name(g_object_get_data(G_OBJECT(user_data), 
SQ_PROPERTY_SPEC_DATA))))
                return;
 
@@ -969,3 +986,10 @@
        lsq_custom_action_execute(g_object_get_data(G_OBJECT(widget), 
SQ_ACTION_CUSTOM_DATA), archive, NULL, NULL);
 }
 
+static void
+cb_sq_widget_factory_widget_destroyed(GtkObject *obj, gpointer user_data)
+{
+       g_signal_handlers_disconnect_by_func(user_data, 
cb_sq_widget_factory_property_notify, obj);
+       g_debug("destroyed %p", obj);
+}
+

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to