static void form_grid_populate_popup_cb (GtkWidget *wid, GtkMenu *menu, UiFormGrid *formgrid) { /* add actions to execute to menu */ GdaDataModelIter *iter; TConnection *tcnc = NULL; tcnc = get_t_connection (formgrid); if (!tcnc) return; iter = gdaui_data_selector_get_data_set (GDAUI_DATA_SELECTOR (formgrid->priv->raw_grid)); /* actions */ GSList *actions_list, *list; actions_list = t_favorites_actions_get (t_connection_get_favorites (tcnc), tcnc, GDA_SET (iter)); if (actions_list) { GtkWidget *mitem, *submenu; mitem = gtk_menu_item_new_with_label (_("Execute action")); gtk_widget_show (mitem); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem); submenu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (mitem), submenu); for (list = actions_list; list; list = list->next) { TFavoritesAction *act = (TFavoritesAction*) list->data; mitem = gtk_menu_item_new_with_label (act->name); gtk_widget_show (mitem); gtk_menu_shell_append (GTK_MENU_SHELL (submenu), mitem); g_object_set_data_full (G_OBJECT (mitem), "action", act, (GDestroyNotify) t_favorites_action_free); g_signal_connect (mitem, "activate", G_CALLBACK (execute_action_mitem_cb), formgrid); } g_slist_free (actions_list); } #ifdef HAVE_LDAP /* LDAP specific */ if (t_connection_is_ldap (tcnc)) { GdaHolder *dnh; dnh = gda_set_get_holder (GDA_SET (iter), "dn"); if (dnh) { const GValue *cvalue; cvalue = gda_holder_get_value (GDA_HOLDER (dnh)); if (!cvalue && (G_VALUE_TYPE (cvalue) != G_TYPE_STRING)) dnh = NULL; } if (!dnh) { GSList *list; for (list = GDA_SET (iter)->holders; list; list = list->next) { const GValue *cvalue; cvalue = gda_holder_get_value (GDA_HOLDER (list->data)); if (cvalue && (G_VALUE_TYPE (cvalue) == G_TYPE_STRING) && gda_ldap_is_dn (g_value_get_string (cvalue))) { dnh = GDA_HOLDER (list->data); break; } } } if (dnh) { const GValue *cvalue; cvalue = gda_holder_get_value (dnh); GtkWidget *mitem; mitem = gtk_menu_item_new_with_label (_("View LDAP entry's details")); gtk_widget_show (mitem); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem); g_object_set_data_full (G_OBJECT (mitem), "dn", g_value_dup_string (cvalue), g_free); g_signal_connect (mitem, "activate", G_CALLBACK (ldap_view_dn_mitem_cb), formgrid); } } #endif if (wid == formgrid->priv->raw_form) { GtkWidget *mitem; gboolean add_scale; g_object_get (G_OBJECT (formgrid->priv->overlay_form), "add-scale", &add_scale, NULL); mitem = gtk_check_menu_item_new_with_label (_("Zoom...")); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mitem), add_scale); gtk_widget_show (mitem); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem); g_signal_connect (mitem, "toggled", G_CALLBACK (zoom_form_mitem_cb), formgrid); } else if (wid == formgrid->priv->raw_grid) { GtkWidget *mitem; gboolean add_scale; g_object_get (G_OBJECT (formgrid->priv->overlay_grid), "add-scale", &add_scale, NULL); mitem = gtk_check_menu_item_new_with_label (_("Zoom...")); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mitem), add_scale); gtk_widget_show (mitem); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem); g_signal_connect (mitem, "toggled", G_CALLBACK (zoom_grid_mitem_cb), formgrid); } }
static void entry_info_fetched_done (EntryProperties *eprop, GdaLdapEntry *entry) { GtkTextBuffer *tbuffer; GtkTextIter start, end; TConnection *tcnc = eprop->priv->tcnc; tbuffer = eprop->priv->text; gtk_text_buffer_get_start_iter (tbuffer, &start); gtk_text_buffer_get_end_iter (tbuffer, &end); gtk_text_buffer_delete (tbuffer, &start, &end); guint i; GtkTextIter current; gtk_text_buffer_get_start_iter (tbuffer, ¤t); /* DN */ gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, _("Distinguished Name:"), -1, "section", NULL); gtk_text_buffer_insert (tbuffer, ¤t, "\n", -1); gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, " ", -1, "starter", NULL); gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, entry->dn, -1, "data", NULL); gtk_text_buffer_insert (tbuffer, ¤t, "\n", -1); /* other attributes */ const gchar *basedn; GdaDataHandler *ts_dh = NULL; basedn = t_connection_ldap_get_base_dn (tcnc); for (i = 0; i < entry->nb_attributes; i++) { GdaLdapAttribute *attr; gchar *tmp; attr = entry->attributes [i]; tmp = g_strdup_printf ("%s:", attr->attr_name); gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, tmp, -1, "section", NULL); g_free (tmp); gtk_text_buffer_insert (tbuffer, ¤t, "\n", -1); guint j; for (j = 0; j < attr->nb_values; j++) { const GValue *cvalue; cvalue = attr->values [j]; gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, " ", -1, "starter", NULL); if (G_VALUE_TYPE (cvalue) == GDA_TYPE_BINARY) { GValue *copyvalue; GtkTextTagTable *table; GtkTextTag *tag; GtkTextMark *mark; copyvalue = gda_value_copy (cvalue); table = gtk_text_buffer_get_tag_table (tbuffer); tag = gtk_text_tag_new (NULL); gtk_text_tag_table_add (table, tag); g_object_set_data_full ((GObject*) tag, "binvalue", copyvalue, (GDestroyNotify) gda_value_free); g_object_unref ((GObject*) tag); mark = gtk_text_buffer_create_mark (tbuffer, NULL, ¤t, TRUE); GdkPixbuf *pixbuf; pixbuf = data_to_pixbuf (cvalue); if (pixbuf) { gtk_text_buffer_insert_pixbuf (tbuffer, ¤t, pixbuf); g_object_unref (pixbuf); } else { GdaDataHandler *dh; dh = gda_data_handler_get_default (G_VALUE_TYPE (cvalue)); if (dh) tmp = gda_data_handler_get_str_from_value (dh, cvalue); else tmp = gda_value_stringify (cvalue); gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, tmp, -1, "data", NULL); g_free (tmp); } GtkTextIter before; gtk_text_buffer_get_iter_at_mark (tbuffer, &before, mark); gtk_text_buffer_apply_tag (tbuffer, tag, &before, ¤t); gtk_text_buffer_delete_mark (tbuffer, mark); gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, "\n", 1, "data", NULL); } else { GdaDataHandler *dh; dh = gda_data_handler_get_default (G_VALUE_TYPE (cvalue)); if (dh) tmp = gda_data_handler_get_str_from_value (dh, cvalue); else tmp = gda_value_stringify (cvalue); if (tmp) { if (*tmp && ((basedn && g_str_has_suffix (tmp, basedn)) || !basedn) && gda_ldap_is_dn (tmp)) { /* we have a DN */ GtkTextTag *tag; tag = gtk_text_buffer_create_tag (tbuffer, NULL, "foreground", "blue", "weight", PANGO_WEIGHT_NORMAL, "underline", PANGO_UNDERLINE_SINGLE, NULL); g_object_set_data_full (G_OBJECT (tag), "dn", g_strdup (tmp), g_free); gtk_text_buffer_insert_with_tags (tbuffer, ¤t, tmp, -1, tag, NULL); } else if (attr->attr_name && !g_ascii_strcasecmp (attr->attr_name, "objectClass")) { GtkTextTag *tag; tag = gtk_text_buffer_create_tag (tbuffer, NULL, "foreground", "blue", "weight", PANGO_WEIGHT_NORMAL, "underline", PANGO_UNDERLINE_SINGLE, NULL); g_object_set_data_full (G_OBJECT (tag), "class", g_strdup (tmp), g_free); gtk_text_buffer_insert_with_tags (tbuffer, ¤t, tmp, -1, tag, NULL); } else gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, tmp, -1, "data", NULL); gchar *extrainfo = NULL; if (!strncmp (attr->attr_name, "shadow", 6) && (!strcmp (attr->attr_name, "shadowLastChange") || !strcmp (attr->attr_name, "shadowMax") || !strcmp (attr->attr_name, "shadowMin") || !strcmp (attr->attr_name, "shadowInactive") || !strcmp (attr->attr_name, "shadowExpire"))) extrainfo = unix_shadow_to_string (tmp, attr->attr_name); else if (!strcmp (attr->attr_name, "badPasswordTime") || !strcmp (attr->attr_name, "lastLogon") || !strcmp (attr->attr_name, "pwdLastSet") || !strcmp (attr->attr_name, "accountExpires") || !strcmp (attr->attr_name, "lockoutTime") || !strcmp (attr->attr_name, "lastLogonTimestamp")) extrainfo = ad_1601_timestamp_to_string (tmp, attr->attr_name); else if (!strcmp (attr->attr_name, "userAccountControl")) extrainfo = ad_1601_uac_to_string (tmp); else if (!strcmp (attr->attr_name, "sAMAccountType")) extrainfo = ad_sam_account_type_to_string (tmp); if (extrainfo) { gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, " ", 1, "data", NULL); gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, extrainfo, -1, "convdata", NULL); g_free (extrainfo); } g_free (tmp); } else { gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, _("Can't display attribute value"), -1, "error", NULL); } gtk_text_buffer_insert_with_tags_by_name (tbuffer, ¤t, "\n", 1, "data", NULL); } } } if (ts_dh) g_object_unref (ts_dh); gda_ldap_entry_free (entry); if (eprop->priv->text_search && gtk_widget_get_visible (eprop->priv->text_search)) text_search_rerun (TEXT_SEARCH (eprop->priv->text_search)); }