aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addressbook/ChangeLog15
-rw-r--r--addressbook/gui/contact-editor/e-contact-editor.c62
2 files changed, 65 insertions, 12 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index 90f9133d0d..c41fc4276a 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,18 @@
+2004-08-19 Hans Petter Jansson <hpj@ximian.com>
+
+ Makes the contact image selector use GtkFileChooser if available.
+
+ * gui/contact-editor/e-contact-editor.c (image_selected_cb): Take just
+ the editor as an argument, so we can call from other places without
+ having to supply dummy args. Rename to image_selected, since it's no
+ longer strictly a callback. Include optional code to use the new
+ GtkFileChooser.
+ (image_cleared_cb): Ditto. Rename to image_cleared.
+ (file_chooser_response): Optional response handling for GtkFileChooser.
+ (image_clicked): Include optional code to use the new GtkFileChooser.
+ Move common strings to variables. For GtkFileSelection, swap callback
+ parameters for the modified image_selected () and image_cleared ().
+
2004-08-19 Chris Toshok <toshok@ximian.com>
[ likely fixes #61500 ]
diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c
index f08434ab3d..180db61d24 100644
--- a/addressbook/gui/contact-editor/e-contact-editor.c
+++ b/addressbook/gui/contact-editor/e-contact-editor.c
@@ -2447,12 +2447,17 @@ categories_clicked (GtkWidget *button, EContactEditor *editor)
}
static void
-image_selected_cb (GtkWidget *widget, EContactEditor *editor)
+image_selected (EContactEditor *editor)
{
- const gchar *file_name;
- GtkWidget *image_chooser;
+ gchar *file_name;
+ GtkWidget *image_chooser;
+
+#ifdef USE_GTKFILECHOOSER
+ file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (editor->file_selector));
+#else
+ file_name = (gchar *) gtk_file_selection_get_filename (GTK_FILE_SELECTION (editor->file_selector));
+#endif
- file_name = gtk_file_selection_get_filename (GTK_FILE_SELECTION (editor->file_selector));
if (!file_name)
return;
@@ -2467,7 +2472,7 @@ image_selected_cb (GtkWidget *widget, EContactEditor *editor)
}
static void
-image_cleared_cb (GtkWidget *widget, EContactEditor *editor)
+image_cleared (EContactEditor *editor)
{
GtkWidget *image_chooser;
gchar *file_name;
@@ -2486,6 +2491,21 @@ image_cleared_cb (GtkWidget *widget, EContactEditor *editor)
object_changed (G_OBJECT (image_chooser), editor);
}
+#ifdef USE_GTKFILECHOOSER
+
+static void
+file_chooser_response (GtkWidget *widget, gint response, EContactEditor *editor)
+{
+ if (response == GTK_RESPONSE_ACCEPT)
+ image_selected (editor);
+ else if (response == GTK_RESPONSE_NO)
+ image_cleared (editor);
+
+ gtk_widget_hide (editor->file_selector);
+}
+
+#endif
+
static gboolean
file_selector_deleted (GtkWidget *widget)
{
@@ -2498,23 +2518,40 @@ image_clicked (GtkWidget *button, EContactEditor *editor)
{
GtkWidget *clear_button;
GtkWidget *dialog;
+ const gchar *title = _("Please select an image for this contact");
+ const gchar *no_image = _("No image");
if (!editor->file_selector) {
+#ifdef USE_GTKFILECHOOSER
+ editor->file_selector = gtk_file_chooser_dialog_new (title,
+ GTK_WINDOW (editor->app),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ no_image, GTK_RESPONSE_NO,
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (editor->file_selector), GTK_RESPONSE_ACCEPT);
+
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (editor->file_selector), g_get_home_dir ());
+
+ g_signal_connect (editor->file_selector, "response",
+ G_CALLBACK (file_chooser_response), editor);
+#else
/* Create the selector */
- editor->file_selector = gtk_file_selection_new (_("Please select an image for this contact"));
+ editor->file_selector = gtk_file_selection_new (title);
dialog = GTK_FILE_SELECTION (editor->file_selector)->fileop_dialog;
- clear_button = gtk_dialog_add_button (GTK_DIALOG (editor->file_selector), _("No image"), 0);
+ clear_button = gtk_dialog_add_button (GTK_DIALOG (editor->file_selector), no_image, 0);
- g_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (editor->file_selector)->ok_button),
- "clicked", G_CALLBACK (image_selected_cb), editor);
+ g_signal_connect_swapped (GTK_OBJECT (GTK_FILE_SELECTION (editor->file_selector)->ok_button),
+ "clicked", G_CALLBACK (image_selected), editor);
- g_signal_connect (clear_button,
- "clicked", G_CALLBACK (image_cleared_cb), editor);
+ g_signal_connect_swapped (clear_button,
+ "clicked", G_CALLBACK (image_cleared), editor);
- /* Ensure that the dialog box is hidden when the user clicks a button */
+ /* Ensure that the dialog box gets hidden when the user clicks a button */
g_signal_connect_swapped (GTK_OBJECT (GTK_FILE_SELECTION (editor->file_selector)->ok_button),
"clicked", G_CALLBACK (gtk_widget_hide), editor->file_selector);
@@ -2524,6 +2561,7 @@ image_clicked (GtkWidget *button, EContactEditor *editor)
g_signal_connect_swapped (clear_button,
"clicked", G_CALLBACK (gtk_widget_hide), editor->file_selector);
+#endif
g_signal_connect_after (editor->file_selector,
"delete-event", G_CALLBACK (file_selector_deleted),