/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) version 3. * * 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with the program; if not, see * * * Authors: * Damon Chaplin * * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include "e-util/e-util-private.h" #include "e-timezone-dialog.h" #ifdef G_OS_WIN32 /* Undef the similar macros from pthread.h, they don't check if * gmtime() and localtime() return NULL. */ #undef gmtime_r #undef localtime_r /* The gmtime() and localtime() in Microsoft's C library are MT-safe */ #define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0) #define localtime_r(tp,tmp) (localtime(tp)?(*(tmp)=*localtime(tp),(tmp)):0) #endif #define E_TIMEZONE_DIALOG_MAP_POINT_NORMAL_RGBA 0xc070a0ff #define E_TIMEZONE_DIALOG_MAP_POINT_HOVER_RGBA 0xffff60ff #define E_TIMEZONE_DIALOG_MAP_POINT_SELECTED_1_RGBA 0xff60e0ff #define E_TIMEZONE_DIALOG_MAP_POINT_SELECTED_2_RGBA 0x000000ff struct _ETimezoneDialogPrivate { /* The selected timezone. May be NULL for a 'local time' (i.e. when the displayed name is ""). */ icaltimezone *zone; /* Glade XML data */ GladeXML *xml; EMapPoint *point_selected; EMapPoint *point_hover; EMap *map; /* The timeout used to flash the nearest point. */ guint timeout_id; /* Widgets from the Glade file */ GtkWidget *app; GtkWidget *table; GtkWidget *map_window; GtkWidget *timezone_combo; GtkWidget *preview_label; }; static void e_timezone_dialog_dispose (GObject *object); static void e_timezone_dialog_finalize (GObject *object); static gboolean get_widgets (ETimezoneDialog *etd); static gboolean on_map_timeout (gpointer data); static gboolean on_map_motion (GtkWidget *widget, GdkEventMotion *event, gpointer data); static gboolean on_map_leave (GtkWidget *widget, GdkEventCrossing *event, gpointer data); static gboolean on_map_visibility_changed (GtkWidget *w, GdkEventVisibility *event, gpointer data); static gboolean on_map_button_pressed (GtkWidget *w, GdkEventButton *event, gpointer data); static icaltimezone* get_zone_from_point (ETimezoneDialog *etd, EMapPoint *point); static void set_map_timezone (ETimezoneDialog *etd, icaltimezone *zone); static void on_combo_changed (GtkComboBox *combo, ETimezoneDialog *etd); static void timezone_combo_get_active_text (GtkComboBox *combo, const gchar **zone_name); static gboolean timezone_combo_set_active_text (GtkComboBox *combo, const gchar *zone_name); static void map_destroy_cb (gpointer data, GObject *where_object_was); G_DEFINE_TYPE (ETimezoneDialog, e_timezone_dialog, G_TYPE_OBJECT) /* Class initialization function for the event editor */ static void e_timezone_dialog_class_init (ETimezoneDialogClass *class) { GObjectClass *object_class; object_class = G_OBJECT_CLASS (class); object_class->dispose = e_timezone_dialog_dispose; object_class->finalize = e_timezone_dialog_finalize; } /* Object initialization function for the event editor */ static void e_timezone_dialog_init (ETimezoneDialog *etd) { ETimezoneDialogPrivate *priv; priv = g_new0 (ETimezoneDialogPrivate, 1); etd->priv = priv; priv->point_selected = NULL; priv->point_hover = NULL; priv->timeout_id = 0; } /* Dispose handler for the event editor */ static void e_timezone_dialog_dispose (GObject *object) { ETimezoneDialog *etd; ETimezoneDialogPrivate *priv; g_return_if_fail (object != NULL); g_return_if_fail (E_IS_TIMEZONE_DIALOG (object)); etd = E_TIMEZONE_DIALOG (object); priv = etd->priv; /* Destroy the actual dialog. */ if (priv->app != NULL) { gtk_widget_destroy (priv->app); priv->app = NULL; } if (priv->timeout_id) { g_source_remove (priv->timeout_id); priv->timeout_id = 0; } if (priv->xml) { g_object_unref (priv->xml); priv->xml = NULL; } (* G_OBJECT_CLASS (e_timezone_dialog_parent_class)->dispose) (object); } /* Finalize handler for the event editor */ static void e_timezone_dialog_finalize (GObject *object) { ETimezoneDialog *etd; ETimezoneDialogPrivate *priv; g_return_if_fail (object != NULL); g_return_if_fail (E_IS_TIMEZONE_DIALOG (object)); etd = E_TIMEZONE_DIALOG (object); priv = etd->priv; g_free (priv); (* G_OBJECT_CLASS (e_timezone_dialog_parent_class)->finalize) (object); } static void e_timezone_dialog_add_timezones (ETimezoneDialog *etd) { ETimezoneDialogPrivate *priv; icalarray *zones; GtkComboBox *combo; GList *l, *list_items = NULL; GtkListStore *list_store; GtkTreeIter iter; GtkCellRenderer *cell; GHashTable *index; gint i; priv = etd->priv; /* Get the array of builtin timezones. */ zones = icaltimezone_get_builtin_timezones (); for (i = 0; i < zones->num_elements; i++) { icaltimezone *zone; gchar *location; zone = icalarray_element_at (zones, i); location = _(icaltimezone_get_location (zone)); e_map_add_point (priv->map, location, icaltimezone_get_longitude (zone), icaltimezone_get_latitude (zone), E_TIMEZONE_DIALOG_MAP_POINT_NORMAL_RGBA); list_items = g_list_prepend (list_items, location); } list_items = g_list_sort (list_items, (GCompareFunc) g_utf8_collate); /* Put the "UTC" entry at the top of the combo's list. */ list_items = g_list_prepend (list_items, _("UTC")); combo = GTK_COMBO_BOX (priv->timezone_combo); cell = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start ((GtkCellLayout *) combo, cell, TRUE); gtk_cell_layout_set_attributes ((GtkCellLayout *) combo, cell, "text", 0, NULL); list_store = gtk_list_store_new (1, G_TYPE_STRING); index = g_hash_table_new (g_str_hash, g_str_equal); for (l = list_items, i = 0; l != NULL; l = l->next, ++i) { gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, 0, (gchar *)(l->data), -1); g_hash_table_insert (index, (gchar *)(l->data), GINT_TO_POINTER (i)); } g_object_set_data_full (G_OBJECT (list_store), "index", index, (GDestroyNotify) g_hash_table_destroy); gtk_combo_box_set_model (combo, (GtkTreeModel *) list_store); gtk_rc_parse_string ( "style \"e-timezone-combo-style\" {\n" " GtkComboBox::appears-as-list = 1\n" "}\n" "\n" "widget \"*.e-timezone-dialog-combo\" style \"e-timezone-combo-style\""); gtk_widget_set_name (priv->timezone_combo, "e-timezone-dialog-combo"); g_list_free (list_items); } ETimezoneDialog * e_timezone_dialog_construct (ETimezoneDialog *etd) { ETimezoneDialogPrivate *priv; GtkWidget *map; gchar *filename; g_return_val_if_fail (etd != NULL, NULL); g_return_val_if_fail (E_IS_TIMEZONE_DIALOG (etd), NULL); priv = etd->priv; /* Load the content widgets */ filename = g_build_filename (EVOLUTION_GLADEDIR, "e-timezone-dialog.glade", NULL); priv->xml = glade_xml_new (filename, NULL, NULL); g_free (filename); if (!priv->xml) { g_message ("e_timezone_dialog_construct(): Could not load the Glade XML file!"); goto error; } if (!get_widgets (etd)) { g_message ("e_timezone_dialog_construct(): Could not find all widgets in the XML file!"); goto error; } gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (priv->app)->vbox), 0); gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (priv->app)->action_area), 12); priv->map = e_map_new (); map = GTK_WIDGET (priv->map); g_object_weak_ref(G_OBJECT(map), map_destroy_cb, priv); gtk_widget_set_events (map, gtk_widget_get_events (map) | GDK_LEAVE_NOTIFY_MASK | GDK_VISIBILITY_NOTIFY_MASK); e_timezone_dialog_add_timezones (etd); gtk_container_add (GTK_CONTAINER (priv->map_window), map); gtk_widget_show (map); /* Ensure a reasonable minimum amount of map is visible */ gtk_widget_set_size_request (priv->map_window, 200, 200); g_signal_connect (map, "motion-notify-event", G_CALLBACK (on_map_motion), etd); g_signal_connect (map, "leave-notify-event", G_CALLBACK (on_map_leave), etd); g_signal_connect (map, "visibility-notify-event", G_CALLBACK (on_map_visibility_changed), etd); g_signal_connect (map, "button-press-event", G_CALLBACK (on_map_button_pressed), etd); g_signal_connect (GTK_COMBO_BOX (priv->timezone_combo), "changed", G_CALLBACK (on_combo_changed), etd); return etd; error: g_object_unref (etd); return NULL; } #if 0 static gint get_local_offset (void) { time_t now = time(NULL), t_gmt, t_local; struct tm gmt, local; gint diff; gmtime_r (&now, &gmt); localtime_r (&now, &local); t_gmt = mktime (&gmt); t_local = mktime (&local); diff = t_local - t_gmt; return diff; } #endif static icaltimezone* get_local_timezone(void) { icaltimezone *zone; tzset(); zone = icaltimezone_get_builtin_timezone_from_offset (-timezone, tzname[0]); return zone; } /* Gets the widgets from the XML file and returns if they are all available. * For the widgets whose values can be simply set with e-dialog-utils, it does * that as well. */ static gboolean get_widgets (ETimezoneDialog *etd) { ETimezoneDialogPrivate *priv; priv = etd->priv; #define GW(name) glade_xml_get_widget (priv->xml, name) priv->app = GW ("timezone-dialog"); priv->map_window = GW ("map-window"); priv->timezone_combo = GW ("timezone-combo"); priv->table = GW ("timezone-table"); priv->preview_label = GW ("preview-label"); return (priv->app && priv->map_window && priv->timezone_combo && priv->table && priv->preview_label); } /** * e_timezone_dialog_new: * * Creates a new event editor dialog. * * Return value: A newly-created event editor dialog, or NULL if the event * editor could not be created. **/ ETimezoneDialog * e_timezone_dialog_new (void) { ETimezoneDialog *etd; etd = E_TIMEZONE_DIALOG (g_object_new (E_TYPE_TIMEZONE_DIALOG, NULL)); return e_timezone_dialog_construct (E_TIMEZONE_DIALOG (etd)); } static void format_utc_offset (gint utc_offset, gchar *buffer) { const gchar *sign = "+"; gint hours, minutes, seconds; if (utc_offset < 0) { utc_offset = -utc_offset; sign = "-"; } hours = utc_offset / 3600; minutes = (utc_offset % 3600) / 60; seconds = utc_offset % 60; /* Sanity check. Standard timezone offsets shouldn't be much more than 12 hours, and daylight saving shouldn't change it by more than a few hours. (The maximum offset is 15 hours 56 minutes at present.) */ if (hours < 0 || hours >= 24 || minutes < 0 || minutes >= 60 || seconds < 0 || seconds >= 60) { fprintf (stderr, "Warning: Strange timezone offset: H:%i M:%i S:%i\n", hours, minutes, seconds); } if (hours == 0 && minutes == 0 && seconds == 0) strcpy (buffer, _("UTC")); else if (seconds == 0) sprintf (buffer, "%s %s%02i:%02i", _("UTC"), sign, hours, minutes); else sprintf (buffer, "%s %s%02i:%02i:%02i", _("UTC"), sign, hours, minutes, seconds); } static gchar * zone_display_name_with_offset (icaltimezone *zone) { const gchar *display_name; struct tm local; struct icaltimetype tt; gint offset; gchar buffer [100]; time_t now = time(NULL); gmtime_r ((const time_t *) &now, &local); tt = tm_to_icaltimetype (&local, TRUE); offset = icaltimezone_get_utc_offset(zone, &tt, NULL); format_utc_offset (offset, buffer); display_name = icaltimezone_get_display_name (zone); if (icaltimezone_get_builtin_timezone (display_name)) display_name = _(display_name); return g_strdup_printf("%s (%s)\n", display_name, buffer);; } static const gchar * zone_display_name (icaltimezone *zone) { const gchar *display_name; display_name = icaltimezone_get_display_name (zone); if (icaltimezone_get_builtin_timezone (display_name)) display_name = _(display_name); return display_name; } /* This flashes the currently selected timezone in the map. */ static gboolean on_map_timeout (gpointer data) { ETimezoneDialog *etd; ETimezoneDialogPrivate *priv; etd = E_TIMEZONE_DIALOG (data); priv = etd->priv; if (!priv->point_selected) return TRUE; if (e_map_point_get_color_rgba (priv->point_selected) == E_TIMEZONE_DIALOG_MAP_POINT_SELECTED_1_RGBA) e_map_point_set_color_rgba (priv->map, priv->point_selected, E_TIMEZONE_DIALOG_MAP_POINT_SELECTED_2_RGBA); else e_map_point_set_color_rgba (priv->map, priv->point_selected, E_TIMEZONE_DIALOG_MAP_POINT_SELECTED_1_RGBA); return TRUE; } static gboolean on_map_motion (GtkWidget *widget, GdkEventMotion *event, gpointer data) { ETimezoneDialog *etd; ETimezoneDialogPrivate *priv; double longitude, latitude; icaltimezone *new_zone; gchar *display=NULL; etd = E_TIMEZONE_DIALOG (data); priv = etd->priv; e_map_window_to_world (priv->map, (double) event->x, (double) event->y, &longitude, &latitude); if (priv->point_hover && priv->point_hover != priv->point_selected) e_map_point_set_color_rgba (priv->map, priv->point_hover, E_TIMEZONE_DIALOG_MAP_POINT_NORMAL_RGBA); priv->point_hover = e_map_get_closest_point (priv->map, longitude, latitude, TRUE); if (priv->point_hover != priv->point_selected) e_map_point_set_color_rgba (priv->map, priv->point_hover, E_TIMEZONE_DIALOG_MAP_POINT_HOVER_RGBA); new_zone = get_zone_from_point (etd, priv->point_hover); display = zone_display_name_with_offset(new_zone); gtk_label_set_text (GTK_LABEL (priv->preview_label), display); g_free (display); return TRUE; } static gboolean on_map_leave (GtkWidget *widget, GdkEventCrossing *event, gpointer data) { ETimezoneDialog *etd; ETimezoneDialogPrivate *priv; etd = E_TIMEZONE_DIALOG (data); priv = etd->priv; /* We only want to reset the hover point if this is a normal leave event. For some reason we are getting leave events when the button is pressed in the map, which causes problems. */ if (event->mode != GDK_CROSSING_NORMAL) return FALSE; if (priv->point_hover && priv->point_hover != priv->point_selected) e_map_point_set_color_rgba (priv->map, priv->point_hover, E_TIMEZONE_DIALOG_MAP_POINT_NORMAL_RGBA); timezone_combo_set_active_text (GTK_COMBO_BOX (priv->timezone_combo), zone_display_name (priv->zone)); gtk_label_set_text (GTK_LABEL (priv->preview_label), ""); priv->point_hover = NULL; return FALSE; } static gboolean on_map_visibility_changed (GtkWidget *w, GdkEventVisibility *event, gpointer data) { ETimezoneDialog *etd; ETimezoneDialogPrivate *priv; etd = E_TIMEZONE_DIALOG (data); priv = etd->priv; if (event->state != GDK_VISIBILITY_FULLY_OBSCURED) { /* Map is visible, at least partly, so make sure we flash the selected point. */ if (!priv->timeout_id) priv->timeout_id = g_timeout_add (100, on_map_timeout, etd); } else { /* Map is invisible, so don't waste resources on the timeout.*/ if (priv->timeout_id) { g_source_remove (priv->timeout_id); priv->timeout_id = 0; } } return FALSE; } static gboolean on_map_button_pressed (GtkWidget *w, GdkEventButton *event, gpointer data) { ETimezoneDialog *etd; ETimezoneDialogPrivate *priv; double longitude, latitude; etd = E_TIMEZONE_DIALOG (data); priv = etd->priv; e_map_window_to_world (priv->map, (double) event->x, (double) event->y, &longitude, &latitude); if (event->button != 1) { e_map_zoom_out (priv->map); } else { if (e_map_get_magnification (priv->map) <= 1.0) e_map_zoom_to_location (priv->map, longitude, latitude); if (priv->point_selected) e_map_point_set_color_rgba (priv->map, priv->point_selected, E_TIMEZONE_DIALOG_MAP_POINT_NORMAL_RGBA); priv->point_selected = priv->point_hover; priv->zone = get_zone_from_point (etd, priv->point_selected); timezone_combo_set_active_text (GTK_COMBO_BOX (priv->timezone_combo), zone_display_name (priv->zone)); } return TRUE; } /* Returns the translated timezone location of the given EMapPoint, e.g. "Europe/London". */ static icaltimezone * get_zone_from_point (ETimezoneDialog *etd, EMapPoint *point) { icalarray *zones; double longitude, latitude; gint i; if (point == NULL) return NULL; e_map_point_get_location (point, &longitude, &latitude); /* Get the array of builtin timezones. */ zones = icaltimezone_get_builtin_timezones (); for (i = 0; i < zones->num_elements; i++) { icaltimezone *zone; double zone_longitude, zone_latitude; zone = icalarray_element_at (zones, i); zone_longitude = icaltimezone_get_longitude (zone); zone_latitude = icaltimezone_get_latitude (zone); if (zone_longitude - 0.005 <= longitude && zone_longitude + 0.005 >= longitude && zone_latitude - 0.005 <= latitude && zone_latitude + 0.005 >= latitude) { return zone; } } g_return_val_if_reached(NULL); } /** * e_timezone_dialog_get_timezone: * @etd: the timezone dialog * * Return value: the currently-selected timezone, or %NULL if no timezone * is selected. **/ icaltimezone * e_timezone_dialog_get_timezone (ETimezoneDialog *etd) { ETimezoneDialogPrivate *priv; g_return_val_if_fail (E_IS_TIMEZONE_DIALOG (etd), NULL); priv = etd->priv; return priv->zone; } /** * e_timezone_dialog_set_timezone: * @etd: the timezone dialog * @zone: the timezone * * Sets the timezone of @etd to @zone. Updates the display name and * selected location. The caller must ensure that @zone is not freed * before @etd is destroyed. **/ void e_timezone_dialog_set_timezone (ETimezoneDialog *etd, icaltimezone *zone) { ETimezoneDialogPrivate *priv; gchar *display = NULL; g_return_if_fail (E_IS_TIMEZONE_DIALOG (etd)); if (!zone) { zone = (icaltimezone *)get_local_timezone(); if (!zone) zone = icaltimezone_get_utc_timezone(); } if (zone) display = zone_display_name_with_offset(zone); priv = etd->priv; priv->zone = zone; gtk_label_set_text (GTK_LABEL (priv->preview_label), zone ? display : ""); timezone_combo_set_active_text (GTK_COMBO_BOX (priv->timezone_combo), zone ? zone_display_name(zone) : ""); set_map_timezone (etd, zone); g_free (display); } GtkWidget * e_timezone_dialog_get_toplevel (ETimezoneDialog *etd) { ETimezoneDialogPrivate *priv; g_return_val_if_fail (etd != NULL, NULL); g_return_val_if_fail (E_IS_TIMEZONE_DIALOG (etd), NULL); priv = etd->priv; return priv->app; } static void set_map_timezone (ETimezoneDialog *etd, icaltimezone *zone) { ETimezoneDialogPrivate *priv; EMapPoint *point; double zone_longitude, zone_latitude; priv = etd->priv; if (zone) { zone_longitude = icaltimezone_get_longitude (zone); zone_latitude = icaltimezone_get_latitude (zone); point = e_map_get_closest_point (priv->map, zone_longitude, zone_latitude, FALSE); } else point = NULL; if (priv->point_selected) e_map_point_set_color_rgba (priv->map, priv->point_selected, E_TIMEZONE_DIALOG_MAP_POINT_NORMAL_RGBA); priv->point_selected = point; } static void on_combo_changed (GtkComboBox *combo_box, ETimezoneDialog *etd) { ETimezoneDialogPrivate *priv; const gchar *new_zone_name; icalarray *zones; icaltimezone *map_zone = NULL; gchar *location; gint i; priv = etd->priv; timezone_combo_get_active_text (GTK_COMBO_BOX (priv->timezone_combo), &new_zone_name); if (!*new_zone_name) priv->zone = NULL; else if (!g_utf8_collate (new_zone_name, _("UTC"))) priv->zone = icaltimezone_get_utc_timezone (); else { priv->zone = NULL; zones = icaltimezone_get_builtin_timezones (); for (i = 0; i < zones->num_elements; i++) { map_zone = icalarray_element_at (zones, i); location = _(icaltimezone_get_location (map_zone)); if (!g_utf8_collate (new_zone_name, location)) { priv->zone = map_zone; break; } } } set_map_timezone (etd, map_zone); } static void timezone_combo_get_active_text (GtkComboBox *combo, const gchar **zone_name) { GtkTreeModel *list_store; GtkTreeIter iter; list_store = gtk_combo_box_get_model (combo); /* Get the active iter in the list */ if (gtk_combo_box_get_active_iter (combo, &iter)) gtk_tree_model_get (list_store, &iter, 0, zone_name, -1); else *zone_name = ""; } static gboolean timezone_combo_set_active_text (GtkComboBox *combo, const gchar *zone_name) { GtkTreeModel *list_store; GHashTable *index; gpointer id = NULL; list_store = gtk_combo_box_get_model (combo); index = (GHashTable *) g_object_get_data (G_OBJECT (list_store), "index"); if (zone_name && *zone_name) id = g_hash_table_lookup (index, zone_name); gtk_combo_box_set_active (combo, GPOINTER_TO_INT (id)); return (id != NULL); } /** * e_timezone_dialog_reparent: * @etd: #ETimezoneDialog. * @new_parent: The new parent widget. * * Takes the internal widgets out of the dialog and put them into @new_parent */ void e_timezone_dialog_reparent (ETimezoneDialog *etd, GtkWidget *new_parent) { ETimezoneDialogPrivate *priv; priv = etd->priv; gtk_widget_reparent (priv->table, new_parent); } static void map_destroy_cb(gpointer data, GObject *where_object_was) { ETimezoneDialogPrivate *priv = data; if (priv->timeout_id) { g_source_remove(priv->timeout_id); priv->timeout_id = 0; } return; } 9c6b008b8a42bcc7ee099d'>Sync to new bsd.autotools.mkade2010-12-043-3/+3 * KDE FreeBSD team presents KDE SC 4.5.4.makc2010-12-035-10/+10 * KDE FreeBSD team is glad to present Qt 4.7.1 in ports.makc2010-12-031-1/+1 * Update to 1.12.1.marcus2010-11-283-5/+37 * Update to 2.22.1.marcus2010-11-272-4/+3 * - Update to 0.90.5swills2010-11-271-1/+1 * Redshift adjusts the color temperature of your screen accordingwxs2010-11-255-0/+120 * Presenting GNOME 2.32.1 for FreeBSD. The offical release notes for thiskwm2010-11-2031-139/+492 * KDE FreeBSD team presents KDE SC 4.5.3.makc2010-11-0410-20/+25 * Deprecate md5 in favour of sha256 checksums. md5 checksums will no longererwin2010-10-292-2/+2 * Improve handing of LD_LIBRARY_PATH when doing non-standard LOCALBASE builds.kmoore2010-10-161-1/+1 * - Update to 0.90.2swills2010-10-121-1/+3 * KDE FreeBSD team presents KDE SC 4.5.2.makc2010-10-067-21/+21 * - Add missing python virtual categoriespgollucci2010-09-141-1/+1 * - Update ruby-gnome ports to 0.19.4swills2010-09-112-0/+2 * KDE FreeBSD team presents KDE SC 4.5.1.makc2010-09-0323-404/+170 * - Chase speech-dispatcher upgrade.avilla2010-08-314-6/+14 * - Upgrade to 0.7.avilla2010-08-3117-283/+128 * Presenting GNOME 2.30.2. for FreeBSD.kwm2010-07-264-12/+10 * Present KDE SC 4.4.5 for FreeBSD.makc2010-06-305-15/+15 * Present KDE SC 4.4.4 for FreeBSD.makc2010-06-025-15/+15 * Bounce PORTREVISION for gettext-related ports. Have fun, ya'll.ade2010-05-3113-5/+13 * - Note kdelibs4-experimental removalfluffy2010-05-111-0/+1 * - The FreeBSD KDE team is pleased to announce KDE SC 4.4.3 for FreeBSDfluffy2010-05-1123-475/+313 * - The FreeBSD KDE team is pleased to announce Qt-4.6.2 for FreeBSDfluffy2010-05-111-1/+0 * Presenting GNOME 2.30.1 for FreeBSD. The offical release notes for thiskwm2010-05-1136-70/+385 * - update to 1.4.1dinoex2010-03-2817-11/+17 * Begin the process of deprecating sysutils/rc_subr bydougb2010-03-271-1/+1 * - Mark BROKEN on HEAD: fails to build with new utmpxmiwi2010-03-201-1/+7 * - Replace long options with short ones: they are documented, but notavilla2010-03-083-4/+5 * - Fix build on 7.X amd64 and 6.X everywhere.avilla2010-02-1910-31/+231 * Presenting KDE 4.3.5 for FreeBSD. The official release notes for thismiwi2010-02-0715-45/+15 * - Mark BROKEN on 6.X everywhere and on 7.X amd64pav2010-02-061-0/+8 * - update to jpeg-8dinoex2010-02-0516-6/+16 * - Update my e-mail address in the ports I maintain.avilla2010-01-271-1/+1 * The FreeBSD KDE team is pleased to announce Qt-4.6.1 for FreeBSD.makc2010-01-223-17/+21 * - speech-dispatcher: try fix building on FreeBSD < 8.0fluffy2010-01-188-1/+301 * - Add speech-dispatcherfluffy2010-01-0816-0/+426 * Update to 2.28.3ahze2010-01-042-4/+4 * Update to 2.28.2.kwm2009-12-193-4/+22 * Update to 2.28.2.marcus2009-12-182-4/+4 * The FreeBSD KDE is please to announce the release of KDE 4.3.4,miwi2009-12-025-15/+15 * Presenting GNOME 2.28.1 for FreeBSD. The official release notes for thismarcus2009-11-2924-129/+245 * The KDE FreeBSD team is proud to announce the release of KDE 4.3.3miwi2009-11-2710-25/+15 * - Update to Qt-4.5miwi2009-11-272-6/+0 * - Mark MAKE_JOBS_UNSAFEpav2009-11-201-0/+1 * The FreeBSD KDE is please to announce the release of KDE 4.3.1,tabthorpe2009-09-025-15/+15 * - Switch SourceForge ports to the new File Release System: categories startin...amdmi32009-08-221-1/+1 * Fix the plist when doxygen is installed.marcus2009-08-161-0/+11 * Mk/bsd.kde4.mk:makc2009-08-105-15/+0 * The KDE FreeBSD team is proud to announce the release of KDE 4.3.0miwi2009-08-0515-30/+35 * - s/MAKE_JOBS_SAVE/MAKE_JOBS_SAFEmiwi2009-08-051-1/+1 * - Update Qt4 to 4.5.2miwi2009-08-052-3/+4 * -Repocopy devel/libtool15 -> libtool22 and libltdl15 -> libltdl22.mezz2009-08-033-3/+3 * Update to 0.15.8.marcus2009-08-022-4/+4 * - bump all port that indirectly depends on libjpeg and have not yet been bump...dinoex2009-07-3115-5/+15 * Update to 0.15.7.marcus2009-07-073-4/+7 * Update to 2.26.3.avl2009-07-032-4/+4 * Update to 2.26.3.avl2009-07-013-4/+7 * Fix build with custom LOCALBASEitetcu2009-06-171-0/+2 * - Assign all unmaintained ruby ports to ruby@,stas2009-06-161-1/+1 * The KDE FreeBSD team is pleased to announce KDE 4.2.4, the last bugfixmiwi2009-06-035-15/+15 * . add linux-f10 ports to the rank of CONFLICTS for linux-fc4 ports;bsam2009-06-031-2/+2 * . add CONFLICTS to linux-f8 infrastructure ports;bsam2009-06-031-0/+3 * Here are new Linux Fedora 10 infrastructure ports.bsam2009-06-024-20/+24 * Update to 2.26.2.marcus2009-05-196-8/+50 * Update KDE ports to 4.2.3makc2009-05-105-15/+15 * Update to 4.10.1.marcus2009-05-103-4/+23 * mark as MAKE_JOBS_UNSAFEmakc2009-04-255-5/+5 * Presenting GNOME 2.26.1 for FreeBSD.kwm2009-04-244-10/+10 * Update to 0.15.6.marcus2009-04-122-4/+4 * Presenting GNOME 2.26 for FreeBSD. Seemarcus2009-04-1023-53/+219 * The KDE FreeBSD team is proud to announce the release of KDE 4.2.2miwi2009-04-0210-20/+20 * Here are new Linux Fedora 8 infrastructure ports.bsam2009-04-017-44/+75 * Finish repocopies of new linux-f8 infrastructure ports:bsam2009-04-011-1/+3 * bump PORTREVISION after cmake updatemakc2009-03-255-0/+5 * Release these ports into wild. I don't have time for these ports anymore. I ammezz2009-03-191-1/+1 * Update to 0.15.5.marcus2009-03-153-4/+7 * Update KDE to 4.2.1.makc2009-03-095-15/+15 * Update to 0.0.9.mva2009-03-082-4/+4 * Update to 0.4.25.marcus2009-02-232-4/+4 * Update to 2.24.4.kwm2009-02-213-7/+7 * Updated my mail address to use @FreeBSD.org now.mva2009-02-202-2/+2 * The KDE FreeBSD team is proud to announce the release of KDE 4.2.0miwi2009-02-0915-690/+1580 * - Update to 0.0.8beech2009-02-082-4/+4 * Update to 0.4.23.marcus2009-02-042-4/+4 * - Use GNOME macro instead of ${MASTER_SITE_GNOME}, removearaujo2009-02-026-12/+6 * Fix build after X.org 7.4 merge.flz2009-01-251-0/+2 * In preparation for adding new linux (Fedora 8) infrastructure ports all linuxbsam2009-01-223-21/+3 * kde@freebsd team is pleased to announce KDE 4.1.4, the last bugfix release in...makc2009-01-1410-20/+20 * kde@freebsd team is pleased to announce the update for Qt4 ports.makc2009-01-141-3/+3 * Update to 2.24.3.marcus2009-01-132-4/+4 * Update to 2.24.3.marcus2009-01-132-4/+4 * Remove these ports as they have been absorbed into other ports in GNOME 2.24.marcus2009-01-107-185/+0 * Presenting GNOME 2.24 for FreeBSD.marcus2009-01-1026-223/+479 * Bump PORTREVISION's after OpenLDAP update.delphij2009-01-061-1/+1 * - Update to 0.0.7miwi2008-12-253-7/+14 * linux_base-(fc6|f7|f8) have glib2 by itself. Don't depend uponume2008-11-293-0/+15 * Update to 0.4.22.mezz2008-11-202-7/+6 * The KDE FreeBSD team is proud to announce the release of KDE 4.1.1miwi2008-09-035-15/+15 * The KDE FreeBSD team is proud to announce the releasemiwi2008-08-291-3/+3 * Update CONFIGURE_ARGS for how we pass CONFIGURE_TARGET to configure script.rafan2008-08-211-1/+0 * The KDE FreeBSD team is proud to announce the releasemiwi2008-08-182-4/+3 * The KDE FreeBSD team is proud to announce the release of KDE 4.1.0miwi2008-08-1021-7190/+2766 * - File was rerolled to add missing example filemiwi2008-08-063-4/+8 * - Update to 0.0.6miwi2008-08-063-15/+20 * - Update to qt 4.4.1miwi2008-08-052-15/+16 * Update to 0.4.21.marcus2008-08-052-4/+4 * - Remove USE_GCC where it can be satisfied with base compiler on followingpav2008-07-251-1/+0 * - Update to 0.16.0.20080706, it's more than 0.17 RC1.mezz2008-07-071-2/+1 * Update to 2.22.3.mezz2008-07-013-5/+6 * Update to 2.22.3.mezz2008-07-013-5/+7 * Update to 1.22.3.marcus2008-07-012-5/+5 * Update to 0.4.20.marcus2008-06-182-5/+4 * Bump portrevision due to upgrade of devel/gettext.edwin2008-06-062-2/+2 * Bump portrevision due to upgrade of devel/gettext.edwin2008-06-0621-7/+21 * Fix typos.olgeni2008-06-051-1/+1 * Update to 2.22.2.mezz2008-05-272-4/+4 * Update to 2.22.2.mezz2008-05-274-14/+14 * -De-bashism and remove bash dependency. [1]mezz2008-05-062-6/+33 * - Remove unneeded dependency from gtk12/gtk20 [1]miwi2008-04-2010-16/+14 * Update to 0.4.19ahze2008-04-182-4/+4 * Update to 4.7.3.marcus2008-04-082-4/+4 * Update to 4.7.2.marcus2008-04-083-4/+8 * Update to 2.22.1ahze2008-04-083-4/+10 * Update to 1.22.1ahze2008-04-075-8/+11 * Update to 2.22.1.marcus2008-04-073-4/+5 * - Remove USE_XLIB/USE_X_PREFIX/USE_XPM in favor of USE_XORGmiwi2008-03-251-1/+0 * The FreeBSD GNOME team is proud to annunce the release of GNOME 2.22.0 formarcus2008-03-2422-51/+314 * - Update to 0.6.9jadawin2008-03-172-6/+9 * Update to Qt 4.3.4lofi2008-03-141-3/+3 * YASR ("Yet Another Screen Reader") is an attempt at a lightweight,alepulver2008-02-175-0/+89 * EFlite is a speech server for Emacspeak and other screen readers that allowsalepulver2008-02-176-0/+90 * Update to 0.4.18.kwm2008-01-152-4/+4 * Update to 2.20.3.mezz2008-01-082-4/+4 * Update to 0.4.17.mezz2007-12-192-4/+4 * Update to 2.20.2.marcus2007-12-122-5/+5 * Update to 1.20.2.marcus2007-12-122-5/+5 * Add a missing dependency, at-spi. Bump the PORTREVISION.mezz2007-10-301-1/+2 * Update to KDE 3.5.8lofi2007-10-306-18/+18 * Update to 2.20.1ahze2007-10-292-4/+4 * Presenting GNOME 2.20.1 and all related works for FreeBSD. The officialmarcus2007-10-2540-1532/+1622 * - Update to 0.0.5lwhsu2007-09-163-12/+18 * Update to Qt 4.3.1.lofi2007-09-023-10/+8 * The tarball has been rerolled, no function change. They only update themezz2007-08-151-3/+3 * - bsd.qt.mk:lofi2007-08-032-9/+4 * Update to 0.4.16.mezz2007-07-302-4/+4 * Update to Qt 4.3.0, introduce bsd.qt.mk.lofi2007-07-162-23/+9 * Update to 0.4.15.mezz2007-07-102-4/+4 * Update to KDE 3.5.7 / KOffice 1.6.3lofi2007-07-0418-24/+318 * Update to 0.4.14.marcus2007-06-192-4/+4 * - Add WWWpav2007-06-071-0/+2 * Update to 0.4.13 and remove X11BASE.mezz2007-06-072-6/+6 * Update to 4.4.2.mezz2007-05-293-5/+23 * Update to 1.2.5.mezz2007-05-293-6/+20 * Update to 0.14.4.mezz2007-05-293-7/+25 * Update to 0.4.12.mezz2007-05-292-4/+4 * - Welcome X.org 7.2 \o/.flz2007-05-2025-290/+17 * Rename all binaries in qt4 which conflict with binaries installed bylofi2007-04-201-2/+2 * Update to 2.18.1ahze2007-04-113-5/+5 * Update to 0.4.11.mezz2007-04-102-5/+4 * - Fix the '==' -> '=' in configure.mezz2007-04-102-1/+20 * Update to 1.18.1ahze2007-04-092-4/+4 * Update to 4.4.1.marcus2007-04-093-4/+5 * Fix packaging.marcus2007-03-262-5/+4 * Fix packaging.marcus2007-03-261-0/+2 * Whoops, too greedy with the cvs add. Remove files that do not belong.marcus2007-03-252-0/+0 * Fix orca so that it actually runs. While here, replace some hardcoded pathsmarcus2007-03-255-0/+43 * Update to 4.2.3lofi2007-03-252-6/+6 * - Update to 0.0.4miwi2007-03-232-4/+4 * Add a missing BUILD_DEPENDS on X_CLIENTS_PORT.marcus2007-03-221-0/+2 * Presenting GNOME 2.18 for FreeBSD. GNOME 2.18 is a departure from recent GNOMEmarcus2007-03-1926-75/+223 * Update to KDE 3.5.6 / KOffice 1.6.2lofi2007-03-146-18/+18 * Update to 1.2.3.mezz2007-03-012-4/+4 * Update to 1.2.2.mezz2007-02-282-4/+5 * Update to 0.4.10ahze2007-02-262-4/+4 * Update to 0.4.9ahze2007-02-122-4/+4 * From the "who gave this guy a commit bit" dept.:lofi2007-02-061-1/+1 * Post-import bugfixorama:lofi2007-02-061-1/+2 * Add qt4, a multiplatform C++ application frameworklofi2007-02-065-0/+92 * Update to 0.13.2.mezz2007-01-303-9/+44 * Update to 1.0.1.mezz2007-01-293-4/+18 * Update to 0.4.8.mezz2007-01-212-4/+4 * Update to 1.2.1.marcus2007-01-203-5/+44