[evolution-kolab: 9/9] EPlugin: update ACL tab after add/edit
- From: Christian Hilberg <chilberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-kolab: 9/9] EPlugin: update ACL tab after add/edit
- Date: Fri, 12 Oct 2012 17:28:01 +0000 (UTC)
commit a992e133895af04f1c7f0e70dff77f0a51ad6156
Author: Christian Hilberg <hilberg kernelconcepts de>
Date: Fri Oct 12 19:22:25 2012 +0200
EPlugin: update ACL tab after add/edit
* update the ACL treeview from the changes
made in the add/edit sub-dialog
src/eplugin/e-kolab-folder-permissions.c | 136 +++++++++++++++++++++---------
1 files changed, 97 insertions(+), 39 deletions(-)
---
diff --git a/src/eplugin/e-kolab-folder-permissions.c b/src/eplugin/e-kolab-folder-permissions.c
index 1109c2f..b61b9c5 100644
--- a/src/eplugin/e-kolab-folder-permissions.c
+++ b/src/eplugin/e-kolab-folder-permissions.c
@@ -378,6 +378,71 @@ kolab_folder_permissions_ui_update_add_edit_dialog (KolabFolderPermUIData *uidat
}
static void
+kolab_folder_permissions_ui_update_treeview (KolabFolderPermUIData *uidata)
+{
+ GtkTreeView *treeview = NULL;
+ GtkListStore *liststore = NULL;
+ GList *acl_ptr = NULL;
+
+ g_return_if_fail (uidata != NULL);
+ g_return_if_fail (uidata->permissions != NULL);
+ g_return_if_fail (uidata->widgets != NULL);
+ g_return_if_fail (GTK_IS_TREE_VIEW (uidata->widgets->treeview));
+
+ treeview = GTK_TREE_VIEW (uidata->widgets->treeview);
+ liststore = GTK_LIST_STORE (gtk_tree_view_get_model (treeview));
+
+ gtk_list_store_clear (liststore);
+
+ acl_ptr = uidata->permissions->acl;
+ while (acl_ptr != NULL) {
+ CamelImapxAclEntry *entry = NULL;
+ gchar *access_id = NULL;
+ gchar *rights = NULL;
+
+ entry = (CamelImapxAclEntry *) acl_ptr->data;
+ if (entry == NULL)
+ goto skip;
+
+ access_id = entry->access_id;
+ rights = entry->rights;
+
+ gtk_list_store_insert_with_values (liststore,
+ NULL, /* GtkTreeIter not needed */
+ -1, /* append to liststore */
+ 0, g_strdup (access_id),
+ 1, g_strdup (rights),
+ -1);
+ skip:
+ acl_ptr = g_list_next (acl_ptr);
+ }
+}
+
+static void
+kolab_folder_permissions_ui_update_from_dialog (KolabFolderPermUIData *uidata,
+ const gchar *access_id,
+ const gchar *rights)
+{
+ CamelImapxAclEntry *entry = NULL;
+
+ g_return_if_fail (uidata != NULL);
+ g_return_if_fail (access_id != NULL);
+ /* rights may be NULL */
+
+ /* update payload data */
+ entry = camel_imapx_acl_entry_new (access_id,
+ rights,
+ NULL);
+ (void) camel_imapx_acl_list_update_from_entry (&(uidata->permissions->acl),
+ entry,
+ NULL);
+ camel_imapx_acl_entry_free (entry);
+
+ /* update treeview */
+ kolab_folder_permissions_ui_update_treeview (uidata);
+}
+
+static void
kolab_folder_permissions_ui_add_edit_dialog_response_cb (GObject *dialog,
gint response_id,
gpointer *userdata)
@@ -387,6 +452,8 @@ kolab_folder_permissions_ui_add_edit_dialog_response_cb (GObject *dialog,
GtkComboBoxText *entry = NULL;
gchar *access_id = NULL;
const gchar *rights = NULL;
+ const gchar *prev_rights = NULL;
+ gchar *new_rights = NULL;
GError *tmp_err = NULL;
g_return_if_fail (dialog != NULL);
@@ -413,16 +480,28 @@ kolab_folder_permissions_ui_add_edit_dialog_response_cb (GObject *dialog,
g_return_if_fail (rights != NULL);
/* previously set rights */
+ prev_rights = camel_imapx_acl_list_get_rights (uidata->permissions->acl,
+ access_id,
+ &tmp_err);
+ if (tmp_err != NULL)
+ goto exit;
- /* FIXME implement me */
- g_warning ("%s()[%u] FIXME implement me", __func__, __LINE__);
-
-
- /* merge rights */
-
+ /* merge current and previous rights */
+ new_rights = camel_imapx_acl_rights_merge (prev_rights,
+ rights,
+ &tmp_err);
+ if (tmp_err != NULL)
+ goto exit;
/* set new access_id,rights */
+ kolab_folder_permissions_ui_update_from_dialog (uidata,
+ access_id,
+ new_rights);
+
+ if (new_rights != NULL)
+ g_free (new_rights);
+ exit:
if (tmp_err != NULL) {
e_kolab_plugin_util_ui_alert_bar_add_error (uidata->alert_bar,
@@ -782,6 +861,10 @@ e_kolab_folder_permissions_ui_free (KolabFolderPermUIData *uidata)
if (uidata == NULL)
return;
+ /* the actual widgets will have been deleted already,
+ * so just deleting the struct shell and supplemental
+ * data structures for the widgets here
+ */
if (uidata->widgets != NULL) {
if (uidata->widgets->folder_perm_map != NULL)
g_hash_table_destroy (uidata->widgets->folder_perm_map);
@@ -805,46 +888,21 @@ e_kolab_folder_permissions_ui_free (KolabFolderPermUIData *uidata)
void
e_kolab_folder_permissions_ui_update_from_uidata (KolabFolderPermUIData *uidata)
{
- GtkTreeView *treeview = NULL;
- GtkListStore *liststore = NULL;
- GList *acl_ptr = NULL;
+ GtkWidget *label = NULL;
+ gpointer data = NULL;
+ gchar *rights = NULL;
g_return_if_fail (uidata != NULL);
g_return_if_fail (uidata->permissions != NULL);
g_return_if_fail (uidata->widgets != NULL);
- g_return_if_fail (GTK_IS_TREE_VIEW (uidata->widgets->treeview));
g_return_if_fail (GTK_IS_LABEL (uidata->widgets->myrights_lbl));
- treeview = GTK_TREE_VIEW (uidata->widgets->treeview);
- liststore = GTK_LIST_STORE (gtk_tree_view_get_model (treeview));
-
- acl_ptr = uidata->permissions->acl;
- while (acl_ptr != NULL) {
- CamelImapxAclEntry *entry = NULL;
- gchar *access_id = NULL;
- gchar *rights = NULL;
-
- entry = (CamelImapxAclEntry *) acl_ptr->data;
- if (entry == NULL)
- goto skip;
-
- access_id = entry->access_id;
- rights = entry->rights;
-
- gtk_list_store_insert_with_values (liststore,
- NULL, /* GtkTreeIter not needed */
- -1, /* append to liststore */
- 0, g_strdup (access_id),
- 1, g_strdup (rights),
- -1);
- skip:
- acl_ptr = g_list_next (acl_ptr);
- }
+ kolab_folder_permissions_ui_update_treeview (uidata);
if (uidata->permissions->myrights != NULL) {
- GtkWidget *label = uidata->widgets->myrights_lbl;
- gpointer data = uidata->permissions->myrights->data;
- gchar *rights = NULL;
+ label = uidata->widgets->myrights_lbl;
+ data = uidata->permissions->myrights->data;
+ rights = NULL;
if (data != NULL)
rights = ((CamelImapxAclEntry *) data)->rights;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]