/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ /* importer.c * * Copyright (C) 2000 Ximian, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * Author: Iain Holmes */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #include #include #include "e-shell.h" #include "e-shell-view.h" #include "e-shell-folder-selection-dialog.h" #include "importer/evolution-importer-client.h" #include #include #include #include #include #include #include "e-shell-importer.h" #include "importer/GNOME_Evolution_Importer.h" typedef struct _ImportDialogFilePage { GtkWidget *vbox; GtkWidget *filename; GtkWidget *filetype; GtkWidget *menu; gboolean need_filename; } ImportDialogFilePage; typedef struct _ImportData { EShell *shell; EShellView *view; GladeXML *wizard; GtkWidget *dialog; GtkWidget *druid; ImportDialogFilePage *filepage; GtkWidget *filedialog; GtkWidget *vbox; char *choosen_iid; } ImportData; /* #define IMPORTER_DEBUG */ #ifdef IMPORTER_DEBUG #define IN g_print ("=====> %s (%d)\n", __FUNCTION__, __LINE__) #define OUT g_print ("<==== %s (%d)\n", __FUNCTION__, __LINE__) #else #define IN #define OUT #endif /* Some HTML helper functions copied from mail/mail-config-druid.c */ static struct { char *name; char *text; } info[] = { { "file_html", N_("Choose the file that you want to import into Evolution, " "and select what type of file it is from the list.\n\n" "You can select \"Automatic\" if you do not know, and " "Evolution will attempt to work it out.") } }; static int num_info = (sizeof (info) / sizeof (info[0])); static void html_size_req (GtkWidget *widget, GtkRequisition *requisition) { requisition->height = GTK_LAYOUT (widget)->height; } static GtkWidget * create_html (const char *name) { GtkWidget *scrolled, *html; GtkHTMLStream *stream; GtkStyle *style; char *utf8; int i; html = gtk_html_new (); GTK_LAYOUT (html)->height = 0; gtk_signal_connect (GTK_OBJECT (html), "size_request", GTK_SIGNAL_FUNC (html_size_req), NULL); gtk_html_set_editable (GTK_HTML (html), FALSE); style = gtk_rc_get_style (html); if (!style) style = gtk_widget_get_style (html); if (style) { gtk_html_set_default_background_color (GTK_HTML (html), &style->bg[0]); } gtk_widget_show (html); scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolled); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_NEVER, GTK_POLICY_NEVER); gtk_container_add (GTK_CONTAINER (scrolled), html); for (i = 0; i < num_info; i++) { if (!strcmp (name, info[i].name)) break; } g_return_val_if_fail (i != num_info, scrolled); stream = gtk_html_begin_content (GTK_HTML (html), "text/html; charset=utf-8"); gtk_html_write (GTK_HTML (html), stream, "

", 9); utf8 = e_utf8_from_locale_string (_(info[i].text)); gtk_html_write (GTK_HTML (html), stream, utf8, strlen (utf8)); g_free (utf8); gtk_html_write (GTK_HTML (html), stream, "

", 11); gtk_html_end (GTK_HTML (html), stream, GTK_HTML_STREAM_OK); return scrolled; } /* Importing functions */ /* Data to be passed around */ typedef struct _ImporterComponentData { EvolutionImporterClient *client; EvolutionImporterListener *listener; char *filename; GnomeDialog *dialog; GtkWidget *contents; int item; gboolean stop; gboolean destroyed; } ImporterComponentData; static gboolean importer_timeout_fn (gpointer data); static void import_cb (EvolutionImporterListener *listener, EvolutionImporterResult result, gboolean more_items, void *data) { ImporterComponentData *icd = (ImporterComponentData *) data; char *label; IN; if (icd->stop != TRUE) { if (result == EVOLUTION_IMPORTER_NOT_READY) { /* Importer isn't ready yet. Wait 5 seconds and try again. */ label = g_strdup_printf (_("Importing %s\nImporter not ready." "\nWaiting 5 seconds to retry."), icd->filename); gtk_label_set_text (GTK_LABEL (icd->contents), label); g_free (label); while (gtk_events_pending ()) gtk_main_iteration (); gtk_timeout_add (5000, importer_timeout_fn, data); OUT; return; } if (result == EVOLUTION_IMPORTER_BUSY) { gtk_timeout_add (5000, importer_timeout_fn, data); OUT; return; } if (more_items) { label = g_strdup_printf (_("Importing %s\nImporting item %d."), icd->filename, ++(icd->item)); gtk_label_set_text (GTK_LABEL (icd->contents), label); g_free (label); while (gtk_events_pending ()) gtk_main_iteration (); g_idle_add_full (G_PRIORITY_LOW, importer_timeout_fn, data, NULL); OUT; return; } } g_free (icd->filename); if (!icd->destroyed) gtk_object_destroy (GTK_OBJECT (icd->dialog)); bonobo_object_unref (BONOBO_OBJECT (icd->listener)); gtk_object_unref (GTK_OBJECT (icd->client)); g_free (icd); OUT; } static gboolean importer_timeout_fn (gpointer data) { ImporterComponentData *icd = (ImporterComponentData *) data; char *label; IN; label = g_strdup_printf (_("Importing %s\nImporting item %d."), icd->filename, icd->item); gtk_label_set_text (GTK_LABEL (icd->contents), label); g_free (label); while (gtk_events_pending ()) gtk_main_iteration (); evolution_importer_client_process_item (icd->client, icd->listener); OUT; return FALSE; } static void dialog_clicked_cb (GnomeDialog *dialog, int button_number, ImporterComponentData *icd) { if (button_number != 0) return; /* Interesting... */ icd->stop = TRUE; } static void dialog_destroy_cb (GtkObject *object, ImporterComponentData *icd) { icd->stop = TRUE; icd->destroyed = TRUE; } static char * get_iid_for_filetype (const char *filename) { OAF_ServerInfoList *info_list; CORBA_Environment ev; GList *can_handle = NULL, *l; char *ret_iid; int i, len = 0; CORBA_exception_init (&ev); info_list = oaf_query ("repo_ids.has ('IDL:GNOME/Evolution/Importer:1.0')", NULL, &ev); for (i = 0; i < info_list->_length; i++) { CORBA_Environment ev2; CORBA_Object importer; const OAF_ServerInfo *info; info = info_list->_buffer + i; CORBA_exception_init (&ev2); importer = oaf_activate_from_id ((char *) info->iid, 0, NULL, &ev2); if (ev2._major != CORBA_NO_EXCEPTION) { g_warning ("Error activating %s", info->iid); CORBA_exception_free (&ev2); continue; } if (GNOME_Evolution_Importer_supportFormat (importer, filename, &ev2)) { can_handle = g_list_prepend (can_handle, g_strdup (info->iid)); len++; } bonobo_object_release_unref (importer, &ev2); CORBA_exception_free (&ev2); } if (len == 1) { ret_iid = can_handle->data; g_list_free (can_handle); return ret_iid; } else if (len > 1) { /* FIXME: Some way to choose between multiple iids */ /* FIXME: Free stuff */ g_warning ("Multiple iids can support %s", filename); ret_iid = g_strdup (can_handle->data); for (l = can_handle; l; l = l->next) g_free (l->data); g_list_free (can_handle); return ret_iid; } else { return NULL; } } static void start_import (const char *folderpath, const char *filename, const char *iid) { ImporterComponentData *icd; char *label; char *real_iid; if (iid == NULL || strcmp (iid, "Automatic") == 0) { /* Work out the component to use */ real_iid = get_iid_for_filetype (filename); } else { real_iid = g_strdup (iid); } g_print ("Importing with: %s\n", real_iid); if (real_iid == NULL) { char *message; message = g_strdup_printf (_("There is no importer that is able to handle\n%s"), filename); e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, message); g_free (message); return; } icd = g_new (ImporterComponentData, 1); icd->stop = FALSE; icd->destroyed = FALSE; icd->dialog = GNOME_DIALOG (gnome_dialog_new (_("Importing"), GNOME_STOCK_BUTTON_CANCEL, NULL)); gtk_signal_connect (GTK_OBJECT (icd->dialog), "clicked", GTK_SIGNAL_FUNC (dialog_clicked_cb), icd); gtk_signal_connect (GTK_OBJECT (icd->dialog), "destroy", GTK_SIGNAL_FUNC (dialog_destroy_cb), icd); label = g_strdup_printf (_("Importing %s.\nStarting %s"), filename, real_iid); icd->contents = gtk_label_new (label); g_free (label); gtk_box_pack_start (GTK_BOX (icd->dialog->vbox), icd->contents, TRUE, TRUE, 0); gtk_widget_show_all (GTK_WIDGET (icd->dialog)); while (gtk_events_pending ()) gtk_main_iteration (); icd->client = evolution_importer_client_new_from_id (real_iid); if (icd->client == NULL) { label = g_strdup_printf (_("Error starting %s"), real_iid); g_free (real_iid); gtk_label_set_text (GTK_LABEL (icd->contents), label); g_free (label); while (gtk_events_pending ()) gtk_main_iteration (); gtk_object_unref (GTK_OBJECT (icd->dialog)); g_free (icd); return; } g_free (real_iid); /* NULL for folderpath means use Inbox */ if (*folderpath == '/') { folderpath = strchr (folderpath + 1, '/'); } if (evolution_importer_client_load_file (icd->client, filename, folderpath) == FALSE) { label = g_strdup_printf (_("Error loading %s"), filename); gtk_label_set_text (GTK_LABEL (icd->contents), label); g_free (label); while (gtk_events_pending ()) gtk_main_iteration (); gtk_object_unref (GTK_OBJECT (icd->client)); gtk_object_unref (GTK_OBJECT (icd->dialog)); g_free (icd); return; } icd->filename = g_strdup (filename); icd->item = 1; label = g_strdup_printf (_("Importing %s\nImporting item 1."), filename); gtk_label_set_text (GTK_LABEL (icd->contents), label); g_free (label); while (gtk_events_pending ()) gtk_main_iteration (); icd->listener = evolution_importer_listener_new (import_cb, icd); evolution_importer_client_process_item (icd->client, icd->listener); } static void filename_changed (GtkEntry *entry, ImportData *data) { ImportDialogFilePage *page; char *filename; page = data->filepage; filename = gtk_entry_get_text (entry); if (filename != NULL && *filename != '\0') page->need_filename = FALSE; else page->need_filename = TRUE; gnome_druid_set_buttons_sensitive (GNOME_DRUID (data->druid), TRUE, !page->need_filename, TRUE); } static const char * get_name_from_component_info (const OAF_ServerInfo *info) { OAF_Property *property; const char *name; property = oaf_server_info_prop_find ((OAF_ServerInfo *) info, "evolution:menu-name"); if (property == NULL || property->v._d != OAF_P_STRING) return NULL; name = property->v._u.value_string; return name; } static void item_selected (GtkWidget *item, ImportData *data) { char *iid; g_free (data->choosen_iid); iid = gtk_object_get_data (GTK_OBJECT (item), "oafiid"); g_print ("iid: %s\n", iid); if (iid == NULL) data->choosen_iid = g_strdup ("Automatic"); else data->choosen_iid = g_strdup (iid); } static GtkWidget * create_plugin_menu (ImportData *data) { OAF_ServerInfoList *info_list; CORBA_Environment ev; int i; GtkWidget *menu; GtkWidget *item; menu = gtk_menu_new (); item = gtk_menu_item_new_with_label (_("Automatic")); gtk_object_set_data_full (GTK_OBJECT (item), "oafiid", g_strdup ("Automatic"), g_free); gtk_menu_append (GTK_MENU (menu), item); CORBA_exception_init (&ev); info_list = oaf_query ("repo_ids.has ('IDL:GNOME/Evolution/Importer:1.0')", NULL, &ev); for (i = 0; i < info_list->_length; i++) { const OAF_ServerInfo *info; char *name = NULL; info = info_list->_buffer + i; name = g_strdup (get_name_from_component_info (info)); if (name == NULL) { name = g_strdup (info->iid); } item = gtk_menu_item_new_with_label (name); g_free (name); gtk_signal_connect (GTK_OBJECT (item), "activate", GTK_SIGNAL_FUNC (item_selected), data); gtk_object_set_data_full (GTK_OBJECT (item), "oafiid", g_strdup (info->iid), g_free); gtk_menu_append (GTK_MENU (menu), item); } return menu; } static ImportDialogFilePage * importer_file_page_new (ImportData *data) { ImportDialogFilePage *page; GtkWidget *table, *label; int row = 0; page = g_new0 (ImportDialogFilePage, 1); page->vbox = gtk_vbox_new (FALSE, 5); page->need_filename = TRUE; table = gtk_table_new (2, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 10); gtk_container_set_border_width (GTK_CONTAINER (table), 8); gtk_box_pack_start (GTK_BOX (page->vbox), table, TRUE, TRUE, 0); label = gtk_label_new (_("Filename:")); gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); page->filename = gnome_file_entry_new (NULL, _("Select a file")); gtk_signal_connect (GTK_OBJECT (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (page->filename))), "changed", GTK_SIGNAL_FUNC (filename_changed), data); gtk_table_attach (GTK_TABLE (table), page->filename, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); row++; label = gtk_label_new (_("File type:")); gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); page->filetype = gtk_option_menu_new (); page->menu = create_plugin_menu (data); gtk_option_menu_set_menu (GTK_OPTION_MENU (page->filetype), page->menu); gtk_table_attach (GTK_TABLE (table), page->filetype, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_widget_show_all (table); return page; } static void import_druid_cancel (GnomeDruid *druid, ImportData *data) { gtk_widget_destroy (GTK_WIDGET (data->dialog)); } static void import_druid_destroy (GtkObject *object, ImportData *data) { gtk_object_unref (GTK_OBJECT (data->wizard)); g_free (data->choosen_iid); g_free (data); } static void import_druid_finish (GnomeDruidPage *page, GnomeDruid *druid, ImportData *data) { GtkWidget *folder; const char *foldername; char *filename; char *iid; filename = g_strdup (gtk_entry_get_text (GTK_ENTRY (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (data->filepage->filename))))); iid = g_strdup (data->choosen_iid); folder = e_shell_folder_selection_dialog_new (data->shell, _("Select folder"), _("Select a destination folder for importing this data"), e_shell_view_get_current_uri (data->view), NULL); gtk_widget_destroy (data->dialog); gnome_dialog_close_hides (GNOME_DIALOG (folder), TRUE); switch (gnome_dialog_run (GNOME_DIALOG (folder))) { case 0: foldername = e_shell_folder_selection_dialog_get_selected_path (E_SHELL_FOLDER_SELECTION_DIALOG (folder)); start_import (foldername, filename, iid); break; default: gtk_widget_destroy (folder); break; } g_free (filename); g_free (iid); } static gboolean prepare_file_page (GnomeDruidPage *page, GnomeDruid *druid, ImportData *data) { gnome_druid_set_buttons_sensitive (druid, TRUE, !data->filepage->need_filename, TRUE); return FALSE; } /* Hack to change the Finish button */ static void druid_finish_button_change (GnomeDruid *druid) { GtkWidget *button = druid->finish; GtkWidget *hbox = GTK_BIN (button)->child, *hbox2; GtkBoxChild *child; GtkWidget *label; /* Get the second item from the children list */ hbox2 = ((GtkBoxChild *)GTK_BOX (hbox)->children->data)->widget; g_return_if_fail (GTK_IS_BOX (hbox2)); child = (GtkBoxChild *)g_list_nth_data (GTK_BOX (hbox2)->children, 0); label = child->widget; /* Safety check :) */ g_return_if_fail (GTK_IS_LABEL (label)); gtk_label_set_text (GTK_LABEL (label), _("Import")); } void show_import_wizard (BonoboUIComponent *component, gpointer user_data, const char *cname) { ImportData *data = g_new0 (ImportData, 1); GnomeDruidPageStart *start; GnomeDruidPageFinish *finish; GtkWidget *html; data->view = E_SHELL_VIEW (user_data); data->shell = e_shell_view_get_shell (data->view); data->wizard = glade_xml_new (EVOLUTION_GLADEDIR "/import.glade", NULL); data->dialog = glade_xml_get_widget (data->wizard, "importwizard"); gtk_window_set_wmclass (GTK_WINDOW (data->dialog), "importdruid", "Evolution:shell"); data->druid = glade_xml_get_widget (data->wizard, "druid1"); gtk_signal_connect (GTK_OBJECT (data->druid), "cancel", GTK_SIGNAL_FUNC (import_druid_cancel), data); druid_finish_button_change (GNOME_DRUID (data->druid)); start = GNOME_DRUID_PAGE_START (glade_xml_get_widget (data->wizard, "page1")); data->filedialog = glade_xml_get_widget (data->wizard, "page2"); gtk_signal_connect (GTK_OBJECT (data->filedialog), "prepare", GTK_SIGNAL_FUNC (prepare_file_page), data); finish = GNOME_DRUID_PAGE_FINISH (glade_xml_get_widget (data->wizard, "page3")); data->filepage = importer_file_page_new (data); data->vbox = data->filepage->vbox; html = create_html ("file_html"); gtk_box_pack_start (GTK_BOX (data->vbox), html, FALSE, TRUE, 0); gtk_box_reorder_child (GTK_BOX (data->vbox), html, 0); gtk_box_pack_start (GTK_BOX (GNOME_DRUID_PAGE_STANDARD (data->filedialog)->vbox), data->vbox, TRUE, TRUE, 0); /* Finish page */ gtk_signal_connect (GTK_OBJECT (finish), "finish", GTK_SIGNAL_FUNC (import_druid_finish), data); gtk_signal_connect (GTK_OBJECT (data->dialog), "destroy", GTK_SIGNAL_FUNC (import_druid_destroy), data); gtk_widget_show_all (data->dialog); } 01-1/+1 * - Convert to new LIB_DEPENDS formatgahr2014-01-101-3/+2 * - Convert to USES=tkgahr2014-01-102-25/+55 * Remove NEED_ROOT, older automake generate bogus Makefile.in that run RANLIB t...bapt2014-01-101-6/+2 * - Remove some outdated Haskell portspgj2014-01-1011-266/+0 * - Stagify lang/ghc and all the Haskell Cabal portspgj2014-01-1014-14/+0 * - Fix a run-time problem with lang/ghc on FreeBSD 10.0 and later, caused bypgj2014-01-1015-14/+21 * - Convert to USES=tkgahr2014-01-092-8/+10 * - Adopt portnemysis2014-01-093-8/+11 * - Use the new format for LIB_DEPENDSnemysis2014-01-091-5/+3 * - Convert to USES=tkgahr2014-01-092-3/+2 * - Use the new format for LIB_DEPENDSnemysis2014-01-091-4/+7 * - Update to 1.7.45gahr2014-01-084-50/+5 * - Chase x11-toolkits/xforms shlib bumpgahr2014-01-081-1/+1 * - Update to 1.2.1gahr2014-01-083-26/+11 * In preparation for Qt 5 ports:makc2014-01-076-1187/+1306 * - stage supportaz2014-01-058-13/+6 * - stage supportaz2014-01-058-15/+10 * Fix pkg name collisionsbapt2014-01-045-7/+9 * Part 2 at removing now useless FETCH_ARGS redifitionbapt2014-01-031-2/+0 * Update to 3.8.8.kwm2013-12-313-43/+33 * x11-toolkits/py-gtkglext: support stagingwg2013-12-301-3/+1 * x11-toolkits/py-fltk: support stagewg2013-12-302-110/+11 * Stage transmission ports and the rest maintained by me.crees2013-12-301-5/+8 * Fix detection of freetype after the update to 2.5.2.kwm2013-12-281-0/+11 * Fix dependency on x11-toolkits/gtkglext.tijl2013-12-281-1/+1 * Stage supportantoine2013-12-281-4/+2 * Stage supportantoine2013-12-281-4/+2 * Stage supportantoine2013-12-281-3/+1 * Stage supportantoine2013-12-281-3/+1 * Stage supportantoine2013-12-281-2/+1 * Stage supportantoine2013-12-282-3/+3 * Update poppler to 0.24.4.kwm2013-12-282-2/+4 * Update freetype to 2.5.2.kwm2013-12-252-2/+23 * - Support stagingamdmi32013-12-231-13/+12 * Enable explicit depends, this will record X depends in gdk-2.0.pc. Thiskwm2013-12-211-2/+2 * Remove expired ports:rene2013-12-218-86/+0 * - Drop maintainership at maintainer requestswills2013-12-201-2/+2 * - Needs root during stagepawel2013-12-202-3/+2 * Move x11-toolkits/py-kivy to using auto-plist.dbn2013-12-192-947/+4 * - Update to 1.249swills2013-12-193-21/+342 * - Update to 1.224swills2013-12-183-11/+60 * - Change maintainer email of my ports to @FreeBSD.orgnemysis2013-12-182-2/+2 * - Update to 0.17dhn2013-12-182-4/+3 * Fix build of x11-toolkits/py-kivy on some systems (pygame.joystick related).dbn2013-12-171-0/+4 * Switch FreeBSD CURRENT to use the new xorg stack (WITH_NEW_XORG=) [0]zeising2013-12-167-276/+271 * Use setuptools for all Python ports.wg2013-12-167-12/+69 * Update to 2.4.22.kwm2013-12-155-60/+22 * - Remove dependency on infozipantoine2013-12-142-2/+37 * - Use tar to extract zipballsunpoet2013-12-131-1/+1 * Convert LIB_DEPENDS for ports depending on boostbapt2013-12-121-4/+4 * Convert LIB_DEPENDS for ports depending on boostbapt2013-12-121-3/+3 * - update LIB_DEPENDSdinoex2013-12-121-2/+2 * - Update to 1.045sunpoet2013-12-122-4/+5 * - Update to snapshot 10022gahr2013-12-112-3/+3 * - Stage support for all -reference portsantoine2013-12-1015-37/+18 * - Update to 1.7.44gahr2013-12-095-25/+5 * remove GCC version check to support GCC versions 4.7 and upoliver2013-12-091-0/+24 * Add vte3, the Gtk 3 version of the vte terminal widget.kwm2013-12-0817-18/+417 * Set expiration date to 2013-12-19, depends on expired devel/mono-toolsrene2013-12-061-0/+3 * - Respect CMAKE_BUILD_TYPE (and fix packaging with non-default build settings)makc2013-12-031-1/+1 * Set portscout to ignore this port.kwm2013-12-031-2/+6 * - Mark BROKENwen2013-12-011-2/+4 * Remove expired ports:rene2013-12-015-156/+0 * Update to version 2.2.4pawel2013-11-302-4/+3 * - Return almost all of my ports back to the pool. I have no time to make anyaraujo2013-11-291-1/+1 * - x11-toolkits/girara update to 0.1.9madpilot2013-11-293-21/+21 * Fix typos in x11-toolkits/py-kivy.dbn2013-11-281-2/+3 * - Convert to USES=qmakemakc2013-11-261-5/+2 * Say hello to Mate 1.6.kwm2013-11-235-0/+251 * Fix typo.cy2013-11-231-1/+1 * - use STAGEDIRdinoex2013-11-232-48/+79 * - Remove now needless qmake_build from USE_QT4makc2013-11-214-4/+4 * - Support Tcl/Tk 8.6gahr2013-11-212-3/+10 * - Update to 1.9.7gahr2013-11-212-20/+20 * Address conflict with x11/xloadimagecy2013-11-212-2/+15 * - Update WWW:sunpoet2013-11-211-1/+1 * - Remove outdated patchsunpoet2013-11-211-38/+0 * Fix libgnome-keyring dependancy. gnome-keyring2 doesn't includekwm2013-11-211-6/+9 * - Support INSTALL_AS_USERgahr2013-11-203-1/+1349 * - Chase x11-toolkits/blt library name changegahr2013-11-191-2/+2 * - Update to 2.5.3gahr2013-11-1943-2922/+1256 * - Set USE_LDCONFIGgahr2013-11-191-0/+1 * Update x11-toolkits/py-kivy to 1.7.2.dbn2013-11-193-14/+12 * Convert from USE_DOS2UNIX to USES=dos2unixbapt2013-11-191-39/+20 * Add stage support to x11-toolkits/py-kivy.dbn2013-11-192-13/+38 * Remove old *gnome*mm libraries not in used in the ports tree.bapt2013-11-188-145/+0 * - Switch devel/sdl20 to use the autotools-based configuration, since themva2013-11-171-1/+1 * - Replace QT_.*_REL with QT_.* in PLIST_SUB.avilla2013-11-171-3/+3 * Freshen-up port and rename package.romain2013-11-171-3/+4 * Freshen-up port and rename package.romain2013-11-171-9/+6 * - Support STAGEDIRsunpoet2013-11-164-6/+2 * - Remove post-install step (unneeded since staging is supported)gblach2013-11-141-5/+0 * Deprecate and schedule for removal on December 1st, 2013.rene2013-11-111-0/+3 * x11-toolkits/qtada: Convert to stagingmarino2013-11-111-15/+12 * x11-toolkits/gtkada: Convert to stagingmarino2013-11-111-22/+21 * - Add LICENSEsunpoet2013-11-102-2/+4 * - Pass maintainership to submittersunpoet2013-11-101-2/+5 * - Add LICENSEsunpoet2013-11-103-14/+18 * - Add LICENSEsunpoet2013-11-101-1/+3 * - Add LICENSEsunpoet2013-11-102-3/+3 * - Update EFL to 1.7.9gblach2013-11-082-3/+3 * - Convert to USES+=tl and USES+=tkgahr2013-11-071-1/+0 * Support STAGEDIR.vanilla2013-11-0712-368/+373 * Update to 0.57.delphij2013-11-074-15/+58 * Support staging.rakuco2013-11-062-2/+0 * - support STAGEDIRaz2013-11-0334-108/+92 * Stagify Gstreamer ports.kwm2013-11-022-2/+0 * - Convert to USES+=tkgahr2013-10-314-12/+33 * - Add stage supportswills2013-10-308-8/+0 * Restrict python to -2.7kwm2013-10-302-2/+2 * Stageify, use COPYTREE_SHARE instead of doing tar and chown/chmod ourself.kwm2013-10-302-16/+13 * Revert USE_GCC to yespawel2013-10-281-1/+1 * Update to libmpc version 1.0.1 which brings the following fixes:gerald2013-10-26