static void action_address_book_delete_cb (GtkAction *action, EBookShellView *book_shell_view) { EShellView *shell_view; EShellWindow *shell_window; EBookShellBackend *book_shell_backend; EBookShellSidebar *book_shell_sidebar; ESource *source; ESourceSelector *selector; ESourceGroup *source_group; ESourceList *source_list; EBookClient *book; gint response; GError *error = NULL; shell_view = E_SHELL_VIEW (book_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); book_shell_backend = book_shell_view->priv->book_shell_backend; source_list = e_book_shell_backend_get_source_list (book_shell_backend); book_shell_sidebar = book_shell_view->priv->book_shell_sidebar; selector = e_book_shell_sidebar_get_selector (book_shell_sidebar); source = e_source_selector_get_primary_selection (selector); g_return_if_fail (source != NULL); response = e_alert_run_dialog_for_args ( GTK_WINDOW (shell_window), "addressbook:ask-delete-addressbook", e_source_peek_name (source), NULL); if (response != GTK_RESPONSE_YES) return; book = e_book_client_new (source, &error); if (error != NULL) { g_warning ("Error removing addressbook: %s", error->message); g_error_free (error); return; } if (!e_client_remove_sync (E_CLIENT (book), NULL, NULL)) { e_alert_run_dialog_for_args ( GTK_WINDOW (shell_window), "addressbook:remove-addressbook", NULL); g_object_unref (book); return; } if (e_source_selector_source_is_selected (selector, source)) e_source_selector_unselect_source (selector, source); source_group = e_source_peek_group (source); e_source_group_remove_source (source_group, source); e_source_list_sync (source_list, NULL); g_object_unref (book); }
static void on_permissions_cb(GtkAction *action, EShellView *shell_view) { EShellSidebar *shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); ESourceSelector *selector; g_object_get (shell_sidebar, "selector", &selector, NULL); ESource *source = e_source_selector_peek_primary_selection (selector); ESourceGroup *group = e_source_peek_group (source); EeeAccount *account; if (!e_source_is_3e (source)) { display_error_message (gtk_widget_get_toplevel (GTK_WIDGET (selector)), _("This action is available only for 3e calendars.")); g_object_unref (selector); return; } if (!eee_plugin_online) { display_error_message (gtk_widget_get_toplevel (GTK_WIDGET (selector)), _("This action is not available with 3e plugin in offline mode.")); g_object_unref (selector); return; } g_object_unref (selector); account = eee_accounts_manager_find_account_by_source(mgr(), source); acl_gui_create(mgr(), account, source); }
gboolean eee_calendar_properties_check(EPlugin *epl, EConfigHookPageCheckData *data) { ECalConfigTargetSource *target = (ECalConfigTargetSource *)data->target; ESourceGroup *group = e_source_peek_group(target->source); //g_debug("** EEE ** Properties Dialog Check Hook Call:\n\n%s\n\n", e_source_to_standalone_xml(target->source)); if (!e_source_group_is_3e(group)) { return TRUE; } if (!eee_plugin_online) { return FALSE; } if (is_new_calendar_dialog(target->source)) { EeeAccount *account = eee_accounts_manager_find_account_by_group(mgr(), group); if (account == NULL || account->state != EEE_ACCOUNT_STATE_ONLINE) { return FALSE; } } else { EeeAccount *account = eee_accounts_manager_find_account_by_source(mgr(), target->source); if (account == NULL || account->state != EEE_ACCOUNT_STATE_ONLINE) { return FALSE; } } return TRUE; }
static void unsubscribe_dialog_ab_response (GtkDialog *dialog, int response, gpointer data) { if (response == GTK_RESPONSE_OK) { ExchangeAccount *account = NULL; gchar *path = NULL; gchar *uri = NULL; const char *source_uid = NULL; ESourceGroup *source_group = NULL; ESource *source = NULL; EABPopupTargetSource *target = data; account = exchange_operations_get_exchange_account (); if (!account) return; source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); uri = e_source_get_uri (source); path = g_strdup (uri + strlen ("exchange://") + strlen (account->account_filename)); source_uid = e_source_peek_uid (source); exchange_account_remove_shared_folder (account, path); source_group = e_source_peek_group (source); e_source_group_remove_source_by_uid (source_group, source_uid); g_free (path); gtk_widget_destroy (GTK_WIDGET (dialog)); } if (response == GTK_RESPONSE_CANCEL) gtk_widget_destroy (GTK_WIDGET (dialog)); if (response == GTK_RESPONSE_DELETE_EVENT) gtk_widget_destroy (GTK_WIDGET (dialog)); }
static void unsubscribe_dialog_response (GtkDialog *dialog, int response, gpointer data) { if (response == GTK_RESPONSE_OK) { GSList *ids, *node_to_be_deleted; ExchangeAccount *account = NULL; gchar *path = NULL; gchar *ruri = NULL; const char *source_uid = NULL; GConfClient *client; ESourceGroup *source_group = NULL; ESource *source = NULL; ECalPopupTargetSource *target = data; client = gconf_client_get_default (); account = exchange_operations_get_exchange_account (); if (!account) return; source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); ruri = (gchar *) e_source_peek_relative_uri (source); source_uid = e_source_peek_uid (source); path = g_strdup (ruri + strlen (account->account_filename)); exchange_account_remove_shared_folder (account, path); ids = gconf_client_get_list (client, CONF_KEY_SELECTED_CAL_SOURCES, GCONF_VALUE_STRING, NULL); if (ids) { node_to_be_deleted = g_slist_find_custom ( ids, source_uid, (GCompareFunc) strcmp); if (node_to_be_deleted) { g_free (node_to_be_deleted->data); ids = g_slist_delete_link (ids, node_to_be_deleted); gconf_client_set_list (client, CONF_KEY_SELECTED_CAL_SOURCES, GCONF_VALUE_STRING, ids, NULL); } g_slist_foreach (ids, (GFunc) g_free, NULL); g_slist_free (ids); } source_group = e_source_peek_group (source); e_source_group_remove_source_by_uid (source_group, source_uid); g_free (path); gtk_widget_destroy (GTK_WIDGET (dialog)); } if (response == GTK_RESPONSE_CANCEL) gtk_widget_destroy (GTK_WIDGET (dialog)); if (response == GTK_RESPONSE_DELETE_EVENT) gtk_widget_destroy (GTK_WIDGET (dialog)); }
static void dump_group (ESourceGroup *group) { GSList *sources, *p; g_print ("Group %s\n", e_source_group_peek_uid (group)); g_print ("\tname: %s\n", e_source_group_peek_name (group)); g_print ("\tbase_uri: %s\n", e_source_group_peek_base_uri (group)); sources = e_source_group_peek_sources (group); for (p = sources; p != NULL; p = p->next) { ESource *source = E_SOURCE (p->data); dump_source (source); if (e_source_peek_group (source) != group) g_warning ("\t\t** ERROR ** parent pointer is %p, should be %p", (gpointer) e_source_peek_group (source), (gpointer) group); } }
static void on_delete_cb(GtkAction *action, EShellView *shell_view) { EShellSidebar *shell_sidebar = e_shell_view_get_shell_sidebar(shell_view); ESourceSelector *selector; g_object_get(shell_sidebar, "selector", &selector, NULL); ESource *source = e_source_selector_peek_primary_selection(selector); if (e_alert_run_dialog_for_args(GTK_WINDOW(shell_view), "calendar:prompt-delete-calendar", e_source_peek_name(source), NULL) != GTK_RESPONSE_YES) { g_object_unref (selector); return; } ESourceGroup *group = e_source_peek_group(source); char *calname = (char *)e_source_get_property(source, "eee-calname"); EeeAccount *account; GError *err = NULL; if (!eee_plugin_online) { display_error_message (gtk_widget_get_toplevel (GTK_WIDGET (selector)), _("This action is not available with 3e plugin in offline mode.")); g_object_unref (selector); return; } if (!e_source_is_3e_owned_calendar(source)) { display_error_message (gtk_widget_get_toplevel (GTK_WIDGET (selector)), _("This action is available only for 3e calendars.")); g_object_unref (selector); return; } g_object_unref (selector); account = eee_accounts_manager_find_account_by_source(mgr(), source); if (eee_account_delete_calendar(account, calname)) { // get ECal and remove calendar from the server ECalClient *ecal = e_cal_client_new(source, E_CAL_CLIENT_SOURCE_TYPE_EVENTS, &err); if (!e_client_remove_sync((EClient *)ecal, NULL, &err)) { g_warning("** EEE ** ECal remove failed (%d:%s)", err->code, err->message); g_clear_error(&err); } g_object_unref(ecal); e_source_group_remove_source(group, source); } eee_account_disconnect(account); eee_accounts_manager_restart_sync(mgr()); }
void org_gnome_exchange_check_address_book_subscribed (EPlugin *ep, EABPopupTargetSource *target) { GSList *menus = NULL; int i = 0; ESource *source = NULL; gchar *uri = NULL; gchar *path = NULL; char *sub_folder = NULL; const char *base_uri; ExchangeAccount *account = NULL; ESourceGroup *group; account = exchange_operations_get_exchange_account (); if (!account) return; source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); group = e_source_peek_group (source); base_uri = e_source_group_peek_base_uri (group); if (!base_uri || strcmp (base_uri, "exchange://")) return; uri = e_source_get_uri (source); path = g_strdup (uri + strlen ("exchange://") + strlen (account->account_filename) + strlen ("/;")); g_free (uri); sub_folder = strchr (path, '@'); if (!sub_folder) { g_free (path); return; } for (i = 0; i < sizeof (popup_ab_items) / sizeof (popup_ab_items[0]); i++) menus = g_slist_prepend (menus, &popup_ab_items[i]); e_popup_add_items (target->target.popup, menus, NULL, popup_ab_free, target); g_free (path); }
GtkWidget * plugin_couchdb_calendar (EPlugin *epl, EConfigHookItemFactoryData *data) { ESource *source; ESourceGroup *group; const gchar *base_uri; ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target; source = t->source; group = e_source_peek_group (source); base_uri = e_source_group_peek_base_uri (group); g_object_set_data (G_OBJECT (epl), "cwidget", NULL); if (strcmp (base_uri, COUCHDB_BASE_URI) != 0) return NULL; build_couchdb_settings (epl, source, data->parent); return NULL; }
gpointer check_username_filled (ESource *source) { gboolean res = TRUE; g_return_val_if_fail (source != NULL, NULL); if (g_ascii_strncasecmp ( GOOGLE_BASE_URI, e_source_group_peek_base_uri ( e_source_peek_group (source)), strlen (GOOGLE_BASE_URI)) == 0) { gchar *username; username = g_strdup (e_source_get_property (source, "username")); if (username) username = g_strstrip (username); res = username && *username; g_free (username); } return GINT_TO_POINTER (res ? 1 : 0); }
GtkWidget * plugin_google_contacts (EPlugin *epl, EConfigHookItemFactoryData *data) { EABConfigTargetSource *t = (EABConfigTargetSource *) data->target; ESource *source; ESourceGroup *group; const gchar *base_uri; const gchar *username; const gchar *refresh_interval_str; guint refresh_interval; const gchar *use_ssl_str; gchar *buff; gboolean use_ssl; GtkWidget *parent; GtkWidget *vbox; GtkWidget *section; GtkWidget *vbox2; GtkWidget *hbox; GtkWidget *spacer; GtkWidget *label; GtkWidget *username_entry; GtkWidget *interval_sb; GtkWidget *interval_combo; IntervalType type; gint time; GtkWidget *ssl_cb; struct ui_data *ui; source = t->source; group = e_source_peek_group (source); base_uri = e_source_group_peek_base_uri (group); g_object_set_data (G_OBJECT (epl), "gwidget", NULL); if (g_ascii_strncasecmp (GOOGLE_BASE_URI, base_uri, 9) != 0) return NULL; /* Build up the UI */ parent = data->parent; vbox = gtk_widget_get_ancestor ( gtk_widget_get_parent (parent), GTK_TYPE_VBOX); vbox2 = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox), vbox2, FALSE, FALSE, 0); section = gtk_label_new (NULL); buff = g_strconcat ("<b>", _("Server"), "</b>", NULL); gtk_label_set_markup (GTK_LABEL (section), buff); g_free (buff); gtk_misc_set_alignment (GTK_MISC (section), 0.0, 0.0); gtk_box_pack_start (GTK_BOX (vbox2), section, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 10); gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); spacer = gtk_label_new (" "); gtk_box_pack_start (GTK_BOX (hbox), spacer, FALSE, FALSE, 0); label = gtk_label_new_with_mnemonic (_("User_name:")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); username_entry = gtk_entry_new (); username = e_source_get_property (source, "username"); if (username) gtk_entry_set_text (GTK_ENTRY (username_entry), username); gtk_box_pack_start (GTK_BOX (hbox), username_entry, TRUE, TRUE, 0); hbox = gtk_hbox_new (FALSE, 10); gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); spacer = gtk_label_new (" "); gtk_box_pack_start (GTK_BOX (hbox), spacer, FALSE, FALSE, 0); use_ssl_str = e_source_get_property (source, "use-ssl"); if (use_ssl_str && ('1' == use_ssl_str[0] || 0 == g_ascii_strcasecmp (use_ssl_str, "true"))) { use_ssl = 1; } else { use_ssl = 0; } ssl_cb = gtk_check_button_new_with_mnemonic (_("Use _secure connection")); gtk_box_pack_start (GTK_BOX (hbox), ssl_cb, FALSE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ssl_cb), use_ssl); hbox = gtk_hbox_new (FALSE, 10); gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); spacer = gtk_label_new (" "); gtk_box_pack_start (GTK_BOX (hbox), spacer, FALSE, FALSE, 0); refresh_interval_str = e_source_get_property (source, "refresh-interval"); if (refresh_interval_str && (1 == sscanf (refresh_interval_str, "%u", &refresh_interval))) { } else { refresh_interval = -1; } seconds_to_interval (refresh_interval, &type, &time); label = gtk_label_new_with_mnemonic (_("Re_fresh:")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); interval_sb = gtk_spin_button_new_with_range (1, 100, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (interval_sb), time); gtk_box_pack_start (GTK_BOX (hbox), interval_sb, FALSE, FALSE, 0); interval_combo = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (interval_combo), _("minutes")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (interval_combo), _("hours")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (interval_combo), _("days")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (interval_combo), _("weeks")); gtk_combo_box_set_active (GTK_COMBO_BOX (interval_combo), type); gtk_box_pack_start (GTK_BOX (hbox), interval_combo, FALSE, FALSE, 0); gtk_widget_show_all (vbox2); g_object_set_data (G_OBJECT (interval_sb), "interval-combo", interval_combo); g_object_set_data (G_OBJECT (interval_combo), "interval-sb", interval_sb); ui = g_malloc0 (sizeof (struct ui_data)); ui->widget = vbox2; g_object_set_data_full(G_OBJECT(epl), "gwidget", ui, destroy_ui_data); g_signal_connect ( ui->widget, "destroy", G_CALLBACK (gtk_widget_destroyed), &ui->widget); g_signal_connect ( username_entry, "changed", G_CALLBACK (on_username_entry_changed), source); g_signal_connect ( interval_combo, "changed", G_CALLBACK (on_interval_combo_changed), source); g_signal_connect ( ssl_cb, "toggled", G_CALLBACK (on_ssl_cb_toggled), source); g_signal_connect ( interval_sb, "value-changed", G_CALLBACK (on_interval_sb_value_changed), source); return NULL; }
GtkWidget * plugin_couchdb_contacts (EPlugin *epl, EConfigHookItemFactoryData *data) { ESource *source; ESourceGroup *group; const gchar *base_uri; GtkWidget *parent; GtkWidget *table, *label, *parent_vbox; UIData *ui; const gchar *property; EABConfigTargetSource *t = (EABConfigTargetSource *) data->target; source = t->source; group = e_source_peek_group (source); base_uri = e_source_group_peek_base_uri (group); g_object_set_data (G_OBJECT (epl), "cwidget", NULL); if (strcmp (base_uri, COUCHDB_BASE_URI) != 0) return NULL; /* Build up the UI */ ui = g_new0 (UIData, 1); ui->source = t->source; parent = data->parent; parent_vbox = gtk_widget_get_ancestor (gtk_widget_get_parent (parent), GTK_TYPE_VBOX); ui->vbox = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (parent_vbox), ui->vbox, FALSE, FALSE, 0); label = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label), _("<b>Server</b>")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0); gtk_box_pack_start (GTK_BOX (ui->vbox), label, FALSE, FALSE, 0); table = gtk_table_new (3, 3, FALSE); gtk_box_pack_start (GTK_BOX (ui->vbox), table, TRUE, TRUE, 0); label = gtk_label_new (" "); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); ui->user_db_button = gtk_radio_button_new_with_label (NULL, _("Desktop CouchDB")); gtk_table_attach (GTK_TABLE (table), ui->user_db_button, 1, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 3, 3); ui->system_db_button = gtk_radio_button_new_with_label ( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ui->user_db_button)), _("System-wide CouchDB")); gtk_table_attach (GTK_TABLE (table), ui->system_db_button, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 3, 3); ui->remote_db_button = gtk_radio_button_new_with_label ( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ui->user_db_button)), _("Remote CouchDB server")); gtk_table_attach (GTK_TABLE (table), ui->remote_db_button, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 3, 3); ui->remote_db_entry = gtk_entry_new (); gtk_table_attach (GTK_TABLE (table), ui->remote_db_entry, 2, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 3, 3); gtk_widget_show_all (ui->vbox); /* Set values from the source */ property = e_source_get_property (ui->source, "couchdb_instance"); if (g_strcmp0 (property, "system") == 0) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->system_db_button), TRUE); gtk_widget_set_sensitive (ui->remote_db_entry, FALSE); } else if (g_strcmp0 (property, "remote") == 0) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->remote_db_button), TRUE); gtk_widget_set_sensitive (ui->remote_db_entry, TRUE); gtk_entry_set_text (GTK_ENTRY (ui->remote_db_entry), e_source_get_property (ui->source, "couchdb_remote_server")); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->user_db_button), TRUE); if (!property) e_source_set_property (ui->source, "couchdb_instance", "user"); gtk_widget_set_sensitive (ui->remote_db_entry, FALSE); } g_object_set_data_full (G_OBJECT (epl), "cwidget", ui, destroy_ui_data); g_signal_connect (ui->vbox, "destroy", G_CALLBACK (gtk_widget_destroyed), &ui->vbox); /* Signals */ g_signal_connect (G_OBJECT (ui->user_db_button), "toggled", G_CALLBACK (on_user_db_toggled), ui); g_signal_connect (G_OBJECT (ui->system_db_button), "toggled", G_CALLBACK (on_system_db_toggled), ui); g_signal_connect (G_OBJECT (ui->remote_db_button), "toggled", G_CALLBACK (on_remote_db_toggled), ui); g_signal_connect (G_OBJECT (ui->remote_db_entry), "changed", G_CALLBACK (on_remote_db_changed), ui); return NULL; }
void eee_calendar_properties_commit(EPlugin *epl, ECalConfigTargetSource *target) { ESource *source = target->source; ESourceGroup *group = e_source_peek_group(source); const char *color = e_source_peek_color_spec(source); GdkColor parsed_color; char converted_color[COLOR_COMPONENT_SIZE * 3 * 2 + 2]; //3 components, 2 hex chars in byte, 2 additional chars (# and \0) if (!gdk_color_parse(color, &parsed_color)) { g_warning("EEE: Unable to convert color \"%s\" from Evolution.", color); parsed_color.red = -1; parsed_color.green = 0; parsed_color.blue = 0; } parsed_color.red >>= (2 - COLOR_COMPONENT_SIZE) * 8; //GdkColor comonent is 2 byte integer, there are 8 bits in byte parsed_color.green >>= (2 - COLOR_COMPONENT_SIZE) * 8; parsed_color.blue >>= (2 - COLOR_COMPONENT_SIZE) * 8; snprintf(converted_color, COLOR_COMPONENT_SIZE * 3 * 2 + 2, "#%0*X%0*X%0*X", COLOR_COMPONENT_SIZE * 2, parsed_color.red, COLOR_COMPONENT_SIZE * 2, parsed_color.green, COLOR_COMPONENT_SIZE * 2, parsed_color.blue); converted_color[COLOR_COMPONENT_SIZE * 3 * 2 + 1] = '\0'; //g_debug("** EEE ** Properties Dialog Commit Hook Call:\n\n%s\n\n", e_source_to_standalone_xml(target->source)); if (!e_source_group_is_3e(group)) { return; } if (!eee_plugin_online) { return; } if (is_new_calendar_dialog(source)) { char *calname = NULL; EeeAccount *account = eee_accounts_manager_find_account_by_group(mgr(), group); if (account == NULL || account->state != EEE_ACCOUNT_STATE_ONLINE) { return; } if (eee_account_create_new_calendar(account, &calname)) { eee_account_update_calendar_settings(account, account->name, calname, e_source_peek_name(source), converted_color); } eee_account_disconnect(account); e_source_set_3e_properties(source, calname, account->name, account, "write", NULL, 0); // title and color are already set eee_accounts_manager_add_source(mgr(), account->name, g_object_ref(source)); g_free(calname); } else { EeeAccount *account = eee_accounts_manager_find_account_by_source(mgr(), source); if (account == NULL || account->state != EEE_ACCOUNT_STATE_ONLINE) { return; } const char *calname = e_source_get_property(source, "eee-calname"); const char *owner = e_source_get_property(source, "eee-owner"); eee_account_update_calendar_settings(account, owner, calname, e_source_peek_name(source), converted_color); eee_account_disconnect(account); struct acl_context * ctx = g_object_get_data (G_OBJECT (target->source), "eee-acl-context"); store_acl (ctx); acl_gui_destroy (); } eee_accounts_manager_restart_sync(mgr()); }
GtkWidget *eee_calendar_properties_factory(EPlugin *epl, EConfigHookItemFactoryData *data) { ECalConfigTargetSource *target = (ECalConfigTargetSource *)data->target; ESourceGroup *group = e_source_peek_group(target->source); EeeAccount *account; GtkWidget *perms; guint row; if (!e_plugin_util_is_group_proto (group, "eee")) return NULL; if (is_new_calendar_dialog (target->source)) return NULL; g_object_get (data->parent, "n-rows", &row, NULL); account = eee_accounts_manager_find_account_by_group (mgr(), group); calendar_properties_dialog_polish(data); struct acl_context * ctx = acl_gui_create (mgr(), account, target->source); g_object_set_data (G_OBJECT (target->source), "eee-acl-context", ctx); gtk_widget_show (ctx->win); gtk_table_attach (GTK_TABLE (data->parent), ctx->win, 0, 2, row, row+1, GTK_FILL, 0, 0, 0); return ctx->win; /* GtkWidget *label; guint row; gtk_table_get_size(GTK_TABLE(data->parent), &row, NULL); char *msg; //g_debug("** EEE ** Properties Dialog Items Hook Call:\n\n%s\n\n", e_source_to_standalone_xml(target->source)); if (!hidden) { hidden = gtk_label_new(""); } if (!e_source_group_is_3e(group)) { return hidden; } account = eee_accounts_manager_find_account_by_group(mgr(), group); msg = g_markup_printf_escaped("<span weight=\"bold\" foreground=\"#ff0000\">%s</span>", _("Evolution is in offline mode. You cannot create or modify calendars now.\n" "Please switch to online mode for such operations.")); label = gtk_label_new(""); gtk_label_set_markup(GTK_LABEL(label), msg); g_free(msg); gtk_table_attach(GTK_TABLE(data->parent), label, 0, 2, row, row + 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); offline_labels = g_slist_append(offline_labels, label); g_signal_connect(label, "destroy", G_CALLBACK(on_label_destroy), NULL); // can't do anything in offline mode if (!eee_plugin_online) { gtk_widget_show(label); } if (is_new_calendar_dialog(target->source)) { target->disable_source_update = TRUE; if (account == NULL || account->state != EEE_ACCOUNT_STATE_ONLINE) { row++; msg = g_markup_printf_escaped("<span weight=\"bold\" foreground=\"#ff0000\">%s</span>", _("You cannot create calendars for this 3e account.")); label = gtk_label_new(""); gtk_label_set_markup(GTK_LABEL(label), msg); g_free(msg); gtk_table_attach(GTK_TABLE(data->parent), label, 0, 2, row, row + 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); gtk_widget_show(label); } } return hidden;*/ }
void dates_cal_open_cb (ECal *ecal, ECalendarStatus status, DatesData *d) { gboolean read_only; GError *error = NULL; const char *ecal_name; ESource *source; ESourceGroup *group; GtkTreeIter iter; gchar *primary_uid; GSList *selected_list; gboolean selected; gchar * cal_name; #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("Calendar opened, setting up..."); #endif if (status != E_CALENDAR_STATUS_OK) { g_warning ("Error '%d' opening ecal", status); g_object_unref (ecal); if (d->first_load) { GtkWidget *dialog = gtk_message_dialog_new ( GTK_WINDOW (d->main_window), GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Dates failed to open the system calendar. " "You will not be able to view or create " "events; this may be remedied by restarting.")); gtk_dialog_run (GTK_DIALOG (dialog)); } return; } source = e_cal_get_source (ecal); ecal_name = e_source_peek_name (source); if (!e_cal_is_read_only (ecal, &read_only, &error)) { g_warning ("Error querying calendar's read-only status: %s", error->message); g_error_free (error); g_object_unref (ecal); return; } /* * Work around the fact that eds-dbus seems to be returning the wrong * value for e_cal_is_read_only on the calendar itself for the http * backend. But on the events themselves it is fine */ group = e_source_peek_group (source); if (strncmp (e_source_group_peek_base_uri (group), "webcal://", 9) == 0) read_only = TRUE; selected_list = gconf_client_get_list (gconf_client_get_default (), CALENDAR_GCONF_SELECTED, GCONF_VALUE_STRING, NULL); #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("selected_list %p: is in uids %d", selected_list, is_in_uids (selected_list, source)); #endif if (selected_list && is_in_uids (selected_list, source)) { dates_view_add_calendar (d->view, ecal); g_signal_connect (G_OBJECT (ecal), "backend_died", G_CALLBACK (dates_backend_died_cb), d); selected = TRUE; } else { selected = FALSE; } if ((!read_only) && (selected)) { if (!d->dcal) d->dcal = ecal; else { /* Find out if it's the default calendar */ primary_uid = gconf_client_get_string ( gconf_client_get_default (), CALENDAR_GCONF_PRIMARY, NULL); if (primary_uid) { if (strcmp (e_source_peek_uid (source), primary_uid) == 0) d->dcal = ecal; g_free (primary_uid); } } d->cal_loaded = TRUE; if (d->TBNew) { #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("*** Setting TBNew button sensitive ***"); #endif gtk_widget_set_sensitive (d->TBNew, TRUE); } } else { #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("*** RO %d, Selected %d ***", read_only, selected); #endif } if (ecal_name && !read_only) cal_name = g_strdup (ecal_name); else if (ecal_name) cal_name = g_strconcat (ecal_name, _(" (Read Only)"), NULL); else if (!read_only) cal_name = g_strdup (_("Unknown")); else cal_name = g_strconcat (_("Unknown"), _(" (Read Only)"), NULL); gtk_list_store_insert_with_values (d->cal_list_store, &iter, G_MAXINT, COL_CALNAME, cal_name, COL_CALPTR, ecal, COL_NOTREADONLY, !read_only, COL_SELECTED, selected, -1); g_free (cal_name); #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("Calendar added."); #endif dates_platform_cal_open (d); }