diff options
Diffstat (limited to 'e-util/e-dialog-utils.c')
-rw-r--r-- | e-util/e-dialog-utils.c | 93 |
1 files changed, 53 insertions, 40 deletions
diff --git a/e-util/e-dialog-utils.c b/e-util/e-dialog-utils.c index 2a4a3bb07d..bf51a63914 100644 --- a/e-util/e-dialog-utils.c +++ b/e-util/e-dialog-utils.c @@ -22,9 +22,14 @@ * Ettore Perazzoli <ettore@ximian.com> */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + #include "e-dialog-utils.h" -#include <glib.h> +#include "widgets/misc/e-bonobo-widget.h" + #include <gdk/gdkx.h> #include <gdk/gdkprivate.h> #include <gdk/gdk.h> @@ -33,6 +38,7 @@ #include <gtk/gtksignal.h> #include <gtk/gtkfilesel.h> +#include <libgnome/gnome-defs.h> #include <libgnome/gnome-i18n.h> #include <libgnome/gnome-util.h> #include <libgnomeui/gnome-dialog-util.h> @@ -50,9 +56,9 @@ transient_realize_callback (GtkWidget *widget) { GdkWindow *window; - window = g_object_get_data ((GObject *) widget, TRANSIENT_DATA_ID); + window = gtk_object_get_data (GTK_OBJECT (widget), TRANSIENT_DATA_ID); g_assert (window != NULL); - + gdk_window_set_transient_for (GTK_WIDGET (widget)->window, window); } @@ -61,18 +67,18 @@ transient_unrealize_callback (GtkWidget *widget) { GdkWindow *window; - window = g_object_get_data ((GObject *) widget, TRANSIENT_DATA_ID); + window = gtk_object_get_data (GTK_OBJECT (widget), TRANSIENT_DATA_ID); g_assert (window != NULL); - + gdk_property_delete (window, gdk_atom_intern ("WM_TRANSIENT_FOR", FALSE)); } static void -transient_destroy_callback (GtkWidget *widget, GObject *deadbeef) +transient_destroy_callback (GtkWidget *widget) { GdkWindow *window; - window = g_object_get_data ((GObject *) widget, "transient"); + window = gtk_object_get_data (GTK_OBJECT (widget), "transient"); if (window != NULL) gdk_window_unref (window); } @@ -82,28 +88,32 @@ set_transient_for_gdk (GtkWindow *window, GdkWindow *parent) { g_return_if_fail (window != NULL); - g_return_if_fail (g_object_get_data ((GObject *) window, TRANSIENT_DATA_ID) == NULL); - + g_return_if_fail (gtk_object_get_data (GTK_OBJECT (window), TRANSIENT_DATA_ID) == NULL); + /* if the parent window doesn't exist anymore, * something is probably about to go very wrong, * but at least let's not segfault here. */ - + if (parent == NULL) { g_warning ("set_transient_for_gdk: uhoh, parent of window %p is NULL", window); return; } - + gdk_window_ref (parent); /* FIXME? */ - - g_object_set_data ((GObject *) window, TRANSIENT_DATA_ID, parent); - + + gtk_object_set_data (GTK_OBJECT (window), TRANSIENT_DATA_ID, parent); + if (GTK_WIDGET_REALIZED (window)) gdk_window_set_transient_for (GTK_WIDGET (window)->window, parent); + + gtk_signal_connect (GTK_OBJECT (window), "realize", + GTK_SIGNAL_FUNC (transient_realize_callback), NULL); + + gtk_signal_connect (GTK_OBJECT (window), "unrealize", + GTK_SIGNAL_FUNC (transient_unrealize_callback), NULL); - g_signal_connect (window, "realize", G_CALLBACK (transient_realize_callback), NULL); - g_signal_connect (window, "unrealize", G_CALLBACK (transient_unrealize_callback), NULL); - - g_object_weak_ref ((GObject *) window, (GWeakNotify) transient_destroy_callback, window); + gtk_signal_connect (GTK_OBJECT (window), "destroy", + GTK_SIGNAL_FUNC (transient_destroy_callback), NULL); } @@ -121,7 +131,11 @@ void e_set_dialog_parent (GtkWindow *dialog, GtkWidget *parent_widget) { + Bonobo_PropertyBag property_bag; GtkWidget *toplevel; + GdkWindow *gdk_window; + CORBA_char *id; + guint32 xid; g_return_if_fail (dialog != NULL); g_return_if_fail (GTK_IS_WINDOW (dialog)); @@ -138,12 +152,6 @@ e_set_dialog_parent (GtkWindow *dialog, return; } -#if 0 - Bonobo_PropertyBag property_bag; - GdkWindow *gdk_window; - CORBA_char *id; - guint32 xid; - property_bag = bonobo_control_get_ambient_properties (BONOBO_CONTROL (toplevel), NULL); if (property_bag == CORBA_OBJECT_NIL) return; @@ -156,7 +164,6 @@ e_set_dialog_parent (GtkWindow *dialog, gdk_window = gdk_window_foreign_new (xid); set_transient_for_gdk (dialog, gdk_window); -#endif } /** @@ -178,7 +185,7 @@ e_set_dialog_parent_from_xid (GtkWindow *dialog, } static void -e_gnome_dialog_parent_destroyed (GnomeDialog *dialog, GObject *deadbeef) +e_gnome_dialog_parent_destroyed (GtkWidget *parent, GtkWidget *dialog) { gnome_dialog_close (GNOME_DIALOG (dialog)); } @@ -187,7 +194,9 @@ void e_gnome_dialog_set_parent (GnomeDialog *dialog, GtkWindow *parent) { gnome_dialog_set_parent (dialog, parent); - g_object_weak_ref ((GObject *) parent, (GWeakNotify) e_gnome_dialog_parent_destroyed, dialog); + gtk_signal_connect_while_alive (GTK_OBJECT (parent), "destroy", + e_gnome_dialog_parent_destroyed, + dialog, GTK_OBJECT (dialog)); } GtkWidget * @@ -196,7 +205,8 @@ e_gnome_warning_dialog_parented (const char *warning, GtkWindow *parent) GtkWidget *dialog; dialog = gnome_warning_dialog_parented (warning, parent); - g_object_weak_ref ((GObject *) parent, (GWeakNotify) e_gnome_dialog_parent_destroyed, dialog); + gtk_signal_connect_while_alive (GTK_OBJECT (parent), "destroy", + e_gnome_dialog_parent_destroyed, dialog, GTK_OBJECT(dialog)); return dialog; } @@ -208,7 +218,8 @@ e_gnome_ok_cancel_dialog_parented (const char *message, GnomeReplyCallback callb GtkWidget *dialog; dialog = gnome_ok_cancel_dialog_parented (message, callback, data, parent); - g_object_weak_ref ((GObject *) parent, (GWeakNotify) e_gnome_dialog_parent_destroyed, dialog); + gtk_signal_connect_while_alive (GTK_OBJECT (parent), "destroy", + e_gnome_dialog_parent_destroyed, dialog, GTK_OBJECT(dialog)); return dialog; } @@ -218,23 +229,23 @@ save_ok (GtkWidget *widget, gpointer data) { GtkWidget *fs; char **filename = data; - const char *path; + char *path; int btn = GNOME_YES; - + fs = gtk_widget_get_toplevel (widget); path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); - - if (g_file_test (path, G_FILE_TEST_IS_REGULAR)) { + + if (g_file_test (path, G_FILE_TEST_ISFILE)) { GtkWidget *dlg; - + dlg = gnome_question_dialog_modal (_("A file by that name already exists.\n" "Overwrite it?"), NULL, NULL); btn = gnome_dialog_run_and_close (GNOME_DIALOG (dlg)); } - + if (btn == GNOME_YES) *filename = g_strdup (path); - + gtk_main_quit (); } @@ -243,21 +254,23 @@ e_file_dialog_save (const char *title) { GtkFileSelection *fs; char *path, *filename = NULL; - + fs = GTK_FILE_SELECTION (gtk_file_selection_new (title)); path = g_strdup_printf ("%s/", g_get_home_dir ()); gtk_file_selection_set_filename (fs, path); g_free (path); - g_signal_connect (fs->ok_button, "clicked", G_CALLBACK (save_ok), &filename); - g_signal_connect (fs->cancel_button, "clicked", G_CALLBACK (gtk_main_quit), NULL); + gtk_signal_connect (GTK_OBJECT (fs->ok_button), "clicked", + GTK_SIGNAL_FUNC (save_ok), &filename); + gtk_signal_connect (GTK_OBJECT (fs->cancel_button), "clicked", + GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_widget_show (GTK_WIDGET (fs)); gtk_grab_add (GTK_WIDGET (fs)); gtk_main (); gtk_widget_destroy (GTK_WIDGET (fs)); - + return filename; } |