[evolution] Bug 751620 - OK button disabled by default in Copy to Calendar dialogue
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 751620 - OK button disabled by default in Copy to Calendar dialogue
- Date: Mon, 29 Jun 2015 17:38:30 +0000 (UTC)
commit 84dd0a99825c9184db0962c2184c3e91bc90bc27
Author: Milan Crha <mcrha redhat com>
Date: Mon Jun 29 19:38:04 2015 +0200
Bug 751620 - OK button disabled by default in Copy to Calendar dialogue
calendar/gui/dialogs/select-source-dialog.c | 2 +-
.../evolution-util/evolution-util-sections.txt | 2 +
e-util/e-source-selector-dialog.c | 99 +++++++++++++++++---
e-util/e-source-selector-dialog.h | 5 +
4 files changed, 93 insertions(+), 15 deletions(-)
---
diff --git a/calendar/gui/dialogs/select-source-dialog.c b/calendar/gui/dialogs/select-source-dialog.c
index d670925..e914d9a 100644
--- a/calendar/gui/dialogs/select-source-dialog.c
+++ b/calendar/gui/dialogs/select-source-dialog.c
@@ -67,7 +67,7 @@ select_source_dialog (GtkWindow *parent,
gtk_window_set_icon_name (GTK_WINDOW (dialog), icon_name);
if (except_source)
- g_object_set_data (G_OBJECT (dialog), "except-source", except_source);
+ e_source_selector_dialog_set_except_source (E_SOURCE_SELECTOR_DIALOG (dialog), except_source);
if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK)
goto exit;
diff --git a/doc/reference/evolution-util/evolution-util-sections.txt
b/doc/reference/evolution-util/evolution-util-sections.txt
index 3a52d2f..9f063de 100644
--- a/doc/reference/evolution-util/evolution-util-sections.txt
+++ b/doc/reference/evolution-util/evolution-util-sections.txt
@@ -4305,6 +4305,8 @@ e_source_selector_dialog_get_registry
e_source_selector_dialog_get_extension_name
e_source_selector_dialog_get_selector
e_source_selector_dialog_peek_primary_selection
+e_source_selector_dialog_get_except_source
+e_source_selector_dialog_set_except_source
<SUBSECTION Standard>
E_SOURCE_SELECTOR_DIALOG
E_IS_SOURCE_SELECTOR_DIALOG
diff --git a/e-util/e-source-selector-dialog.c b/e-util/e-source-selector-dialog.c
index 908370b..b54ee71 100644
--- a/e-util/e-source-selector-dialog.c
+++ b/e-util/e-source-selector-dialog.c
@@ -34,6 +34,7 @@ struct _ESourceSelectorDialogPrivate {
GtkWidget *selector;
ESourceRegistry *registry;
ESource *selected_source;
+ ESource *except_source;
gchar *extension_name;
};
@@ -41,7 +42,8 @@ enum {
PROP_0,
PROP_EXTENSION_NAME,
PROP_REGISTRY,
- PROP_SELECTOR
+ PROP_SELECTOR,
+ PROP_EXCEPT_SOURCE
};
G_DEFINE_TYPE (
@@ -69,13 +71,10 @@ primary_selection_changed_cb (ESourceSelector *selector,
priv->selected_source =
e_source_selector_ref_primary_selection (selector);
- /* FIXME Add an API for "except-source" or to
- * get the ESourceSelector from outside. */
if (priv->selected_source != NULL) {
ESource *except_source;
- except_source = g_object_get_data (
- G_OBJECT (dialog), "except-source");
+ except_source = e_source_selector_dialog_get_except_source (dialog);
if (except_source != NULL)
if (e_source_equal (except_source, priv->selected_source)) {
@@ -127,6 +126,12 @@ source_selector_dialog_set_property (GObject *object,
E_SOURCE_SELECTOR_DIALOG (object),
g_value_get_object (value));
return;
+
+ case PROP_EXCEPT_SOURCE:
+ e_source_selector_dialog_set_except_source (
+ E_SOURCE_SELECTOR_DIALOG (object),
+ g_value_get_object (value));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -159,6 +164,13 @@ source_selector_dialog_get_property (GObject *object,
e_source_selector_dialog_get_selector (
E_SOURCE_SELECTOR_DIALOG (object)));
return;
+
+ case PROP_EXCEPT_SOURCE:
+ g_value_set_object (
+ value,
+ e_source_selector_dialog_get_except_source (
+ E_SOURCE_SELECTOR_DIALOG (object)));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -171,15 +183,9 @@ source_selector_dialog_dispose (GObject *object)
priv = E_SOURCE_SELECTOR_DIALOG_GET_PRIVATE (object);
- if (priv->registry != NULL) {
- g_object_unref (priv->registry);
- priv->registry = NULL;
- }
-
- if (priv->selected_source != NULL) {
- g_object_unref (priv->selected_source);
- priv->selected_source = NULL;
- }
+ g_clear_object (&priv->registry);
+ g_clear_object (&priv->selected_source);
+ g_clear_object (&priv->except_source);
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (e_source_selector_dialog_parent_class)->dispose (object);
@@ -202,6 +208,7 @@ static void
source_selector_dialog_constructed (GObject *object)
{
ESourceSelectorDialog *dialog;
+ ESource *primary_selection;
GtkWidget *label, *hgrid;
GtkWidget *container;
GtkWidget *widget;
@@ -279,6 +286,11 @@ source_selector_dialog_constructed (GObject *object)
g_signal_connect (
widget, "primary_selection_changed",
G_CALLBACK (primary_selection_changed_cb), dialog);
+
+ primary_selection = e_source_selector_ref_primary_selection (E_SOURCE_SELECTOR (widget));
+ if (primary_selection)
+ primary_selection_changed_cb (E_SOURCE_SELECTOR (widget), dialog);
+ g_clear_object (&primary_selection);
}
static void
@@ -326,6 +338,16 @@ e_source_selector_dialog_class_init (ESourceSelectorDialogClass *class)
NULL,
E_TYPE_SOURCE_SELECTOR,
G_PARAM_READABLE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_EXCEPT_SOURCE,
+ g_param_spec_object (
+ "except-source",
+ NULL,
+ NULL,
+ E_TYPE_SOURCE,
+ G_PARAM_WRITABLE));
}
static void
@@ -452,3 +474,52 @@ e_source_selector_dialog_peek_primary_selection (ESourceSelectorDialog *dialog)
return dialog->priv->selected_source;
}
+
+/**
+ * e_source_selector_dialog_get_except_source:
+ * @dialog: an #ESourceSelectorDialog
+ *
+ * Get the currently #ESource, which cannot be selected in the given @dialog.
+ * Use e_source_selector_dialog_set_except_source() to set such.
+ *
+ * Returns: the #ESource, which cannot be selected
+ *
+ * Since: 3.18
+ **/
+ESource *
+e_source_selector_dialog_get_except_source (ESourceSelectorDialog *dialog)
+{
+ g_return_val_if_fail (E_IS_SOURCE_SELECTOR_DIALOG (dialog), NULL);
+
+ return dialog->priv->except_source;
+}
+
+/**
+ * e_source_selector_dialog_set_except_source:
+ * @dialog: an #ESourceSelectorDialog
+ * @except_source: (allow-none): an #ESource, which cannot be selected, or %NULL
+ *
+ * Set the @except_source, the one which cannot be selected in the given @dialog.
+ * Use %NULL to allow to select all sources.
+ *
+ * Since: 3.18
+ **/
+void
+e_source_selector_dialog_set_except_source (ESourceSelectorDialog *dialog,
+ ESource *except_source)
+{
+ g_return_if_fail (E_IS_SOURCE_SELECTOR_DIALOG (dialog));
+ if (except_source)
+ g_return_if_fail (E_IS_SOURCE (except_source));
+
+ if ((dialog->priv->except_source && except_source && e_source_equal (dialog->priv->except_source,
except_source)) ||
+ dialog->priv->except_source == except_source)
+ return;
+
+ g_clear_object (&dialog->priv->except_source);
+ dialog->priv->except_source = except_source ? g_object_ref (except_source) : NULL;
+
+ primary_selection_changed_cb (E_SOURCE_SELECTOR (dialog->priv->selector), dialog);
+
+ g_object_notify (G_OBJECT (dialog), "except-source");
+}
diff --git a/e-util/e-source-selector-dialog.h b/e-util/e-source-selector-dialog.h
index ee9f0dd..f577015 100644
--- a/e-util/e-source-selector-dialog.h
+++ b/e-util/e-source-selector-dialog.h
@@ -76,6 +76,11 @@ ESourceSelector *
(ESourceSelectorDialog *dialog);
ESource * e_source_selector_dialog_peek_primary_selection
(ESourceSelectorDialog *dialog);
+ESource * e_source_selector_dialog_get_except_source
+ (ESourceSelectorDialog *dialog);
+void e_source_selector_dialog_set_except_source
+ (ESourceSelectorDialog *dialog,
+ ESource *except_source);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]