aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/ChangeLog16
-rw-r--r--shell/evolution-folder-selector-button.c29
-rw-r--r--shell/evolution-folder-selector-button.h2
3 files changed, 45 insertions, 2 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index 8682a3c374..ce8dd95929 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,19 @@
+2002-05-20 Chris Toshok <toshok@ximian.com>
+
+ * evolution-folder-selector-button.c (clicked): set the parent
+ window insensitive before popping up the dialog and sensitive
+ after it's popped down, to give us semi-modal behavior. Also,
+ emit a "popped_up" signal when popping up the dialog, and emit
+ "canceled" when the return folder is NULL (when the user canceled
+ the dialog).
+ (class_init): fix typo (?) - parent type isn't
+ bonobo_object_get_type(), it's PARENT_TYPE. Also, initialize the
+ POPPED_UP and CANCELED signals.
+
+ * evolution-folder-selector-button.h (struct
+ _EvolutionFolderSelectorButtonClass): add popped_up and canceled
+ signals.
+
2002-05-20 Ettore Perazzoli <ettore@ximian.com>
* e-shell-offline-sync.c (sync_folder): Skip the folder if it
diff --git a/shell/evolution-folder-selector-button.c b/shell/evolution-folder-selector-button.c
index 35ddf19c7a..56cc1ca13b 100644
--- a/shell/evolution-folder-selector-button.c
+++ b/shell/evolution-folder-selector-button.c
@@ -39,7 +39,9 @@ struct _EvolutionFolderSelectorButtonPrivate {
};
enum {
+ POPPED_UP,
SELECTED,
+ CANCELED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
@@ -131,17 +133,28 @@ clicked (GtkButton *button)
gtk_widget_get_ancestor (GTK_WIDGET (button),
GTK_TYPE_WINDOW);
+ gtk_widget_set_sensitive (GTK_WIDGET (parent_window), FALSE);
+
folder_selector_button = EVOLUTION_FOLDER_SELECTOR_BUTTON (button);
priv = folder_selector_button->priv;
+ gtk_signal_emit (GTK_OBJECT (folder_selector_button),
+ signals[POPPED_UP]);
+
evolution_shell_client_user_select_folder (priv->shell_client,
parent_window,
priv->title,
priv->uri ? priv->uri : "",
(const char **)priv->possible_types,
&return_folder);
- if (!return_folder)
+
+ gtk_widget_set_sensitive (GTK_WIDGET (parent_window), TRUE);
+
+ if (!return_folder) {
+ gtk_signal_emit (GTK_OBJECT (folder_selector_button),
+ signals[CANCELED]);
return;
+ }
g_free (priv->uri);
priv->uri = g_strdup (return_folder->evolutionUri);
@@ -184,7 +197,7 @@ class_init (EvolutionFolderSelectorButtonClass *klass)
GtkObjectClass *object_class;
GtkButtonClass *button_class;
- parent_class = gtk_type_class (bonobo_object_get_type ());
+ parent_class = gtk_type_class (PARENT_TYPE);
object_class = GTK_OBJECT_CLASS (klass);
button_class = GTK_BUTTON_CLASS (klass);
@@ -192,6 +205,12 @@ class_init (EvolutionFolderSelectorButtonClass *klass)
button_class->clicked = clicked;
object_class->destroy = destroy;
+ signals[POPPED_UP] = gtk_signal_new ("popped_up",
+ GTK_RUN_FIRST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (EvolutionFolderSelectorButtonClass, popped_up),
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE, 0);
signals[SELECTED] = gtk_signal_new ("selected",
GTK_RUN_FIRST,
object_class->type,
@@ -199,6 +218,12 @@ class_init (EvolutionFolderSelectorButtonClass *klass)
gtk_marshal_NONE__POINTER,
GTK_TYPE_NONE, 1,
GTK_TYPE_POINTER);
+ signals[CANCELED] = gtk_signal_new ("canceled",
+ GTK_RUN_FIRST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (EvolutionFolderSelectorButtonClass, canceled),
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE, 0);
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
}
diff --git a/shell/evolution-folder-selector-button.h b/shell/evolution-folder-selector-button.h
index d2918bd143..5f5e1115d1 100644
--- a/shell/evolution-folder-selector-button.h
+++ b/shell/evolution-folder-selector-button.h
@@ -52,7 +52,9 @@ struct _EvolutionFolderSelectorButtonClass {
GtkButtonClass parent_class;
/* signals */
+ void (*popped_up) (EvolutionFolderSelectorButton *button);
void (*selected) (EvolutionFolderSelectorButton *button, GNOME_Evolution_Folder *folder);
+ void (*canceled) (EvolutionFolderSelectorButton *button);
};