[Xfce4-commits] r26653 - in xfcalendar/trunk: . libical/zoneinfo/America po src

Juha Kautto juha at xfce.org
Sat Mar 1 14:16:37 CET 2008


Author: juha
Date: 2008-03-01 13:16:37 +0000 (Sat, 01 Mar 2008)
New Revision: 26653

Modified:
   xfcalendar/trunk/configure.in.in
   xfcalendar/trunk/libical/zoneinfo/America/Buenos_Aires.ics
   xfcalendar/trunk/libical/zoneinfo/America/Catamarca.ics
   xfcalendar/trunk/libical/zoneinfo/America/Cordoba.ics
   xfcalendar/trunk/libical/zoneinfo/America/Jujuy.ics
   xfcalendar/trunk/libical/zoneinfo/America/Mendoza.ics
   xfcalendar/trunk/po/fi.po
   xfcalendar/trunk/src/appointment.c
   xfcalendar/trunk/src/appointment.h
   xfcalendar/trunk/src/day-view.c
   xfcalendar/trunk/src/event-list.c
   xfcalendar/trunk/src/functions.c
   xfcalendar/trunk/src/functions.h
   xfcalendar/trunk/src/ical-code.c
   xfcalendar/trunk/src/ical-code.h
   xfcalendar/trunk/src/interface.c
   xfcalendar/trunk/src/parameters.c
   xfcalendar/trunk/src/parameters.h
   xfcalendar/trunk/src/reminder.c
Log:
1) Added categories and made it possible to associate a colour to them.
   Event list and Day list views show categories with the colour.

2) timezone fixes

3) combine some code:
    - alarm list handling in libical and reminder
    - data file handling: reminder, interface, parameters and functions

4) fixed small memory leak in event-list



Modified: xfcalendar/trunk/configure.in.in
===================================================================
--- xfcalendar/trunk/configure.in.in	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/configure.in.in	2008-03-01 13:16:37 UTC (rev 26653)
@@ -9,7 +9,7 @@
 dnl
 
 dnl Version information
-m4_define([orage_version], [4.5.12.10-svn])
+m4_define([orage_version], [4.5.13.0-svn])
 
 m4_define([gtk_minimum_version], [2.6.0])
 m4_define([xfce_minimum_version], [4.4.0])

Modified: xfcalendar/trunk/libical/zoneinfo/America/Buenos_Aires.ics
===================================================================
--- xfcalendar/trunk/libical/zoneinfo/America/Buenos_Aires.ics	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/libical/zoneinfo/America/Buenos_Aires.ics	2008-03-01 13:16:37 UTC (rev 26653)
@@ -5,8 +5,8 @@
 TZID:/softwarestudio.org/Olson_20011030_5/America/Buenos_Aires
 X-LIC-LOCATION:America/Buenos_Aires
 BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
 TZNAME:ART
 DTSTART:19700101T000000
 END:STANDARD

Modified: xfcalendar/trunk/libical/zoneinfo/America/Catamarca.ics
===================================================================
--- xfcalendar/trunk/libical/zoneinfo/America/Catamarca.ics	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/libical/zoneinfo/America/Catamarca.ics	2008-03-01 13:16:37 UTC (rev 26653)
@@ -5,8 +5,8 @@
 TZID:/softwarestudio.org/Olson_20011030_5/America/Catamarca
 X-LIC-LOCATION:America/Catamarca
 BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
 TZNAME:ART
 DTSTART:19700101T000000
 END:STANDARD

Modified: xfcalendar/trunk/libical/zoneinfo/America/Cordoba.ics
===================================================================
--- xfcalendar/trunk/libical/zoneinfo/America/Cordoba.ics	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/libical/zoneinfo/America/Cordoba.ics	2008-03-01 13:16:37 UTC (rev 26653)
@@ -5,8 +5,8 @@
 TZID:/softwarestudio.org/Olson_20011030_5/America/Cordoba
 X-LIC-LOCATION:America/Cordoba
 BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
 TZNAME:ART
 DTSTART:19700101T000000
 END:STANDARD

Modified: xfcalendar/trunk/libical/zoneinfo/America/Jujuy.ics
===================================================================
--- xfcalendar/trunk/libical/zoneinfo/America/Jujuy.ics	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/libical/zoneinfo/America/Jujuy.ics	2008-03-01 13:16:37 UTC (rev 26653)
@@ -5,8 +5,8 @@
 TZID:/softwarestudio.org/Olson_20011030_5/America/Jujuy
 X-LIC-LOCATION:America/Jujuy
 BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
 TZNAME:ART
 DTSTART:19700101T000000
 END:STANDARD

Modified: xfcalendar/trunk/libical/zoneinfo/America/Mendoza.ics
===================================================================
--- xfcalendar/trunk/libical/zoneinfo/America/Mendoza.ics	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/libical/zoneinfo/America/Mendoza.ics	2008-03-01 13:16:37 UTC (rev 26653)
@@ -5,8 +5,8 @@
 TZID:/softwarestudio.org/Olson_20011030_5/America/Mendoza
 X-LIC-LOCATION:America/Mendoza
 BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
 TZNAME:ART
 DTSTART:19700101T000000
 END:STANDARD

Modified: xfcalendar/trunk/po/fi.po
===================================================================
--- xfcalendar/trunk/po/fi.po	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/po/fi.po	2008-03-01 13:16:37 UTC (rev 26653)
@@ -1066,7 +1066,8 @@
 "\t\tW=viikoittain, M=kuukausittain, Y=vuosittain\n"
 "\t 3. Tyyppi: f=vapaa, B=varattu\n"
 "\t 4. Tiedostossa: O=Orage\n"
-"\t\t  A=Arkisto F=Vieras\t 5. Tapahtuman tyyppi:\n"
+"\t\t  A=Arkisto F=Vieras\n"
+"\t 5. Tapahtuman tyyppi:\n"
 "\t\tE=Tapahtuma T=Tehtävä J=Muistiinpano"
 
 #: ../src/functions.c:145

Modified: xfcalendar/trunk/src/appointment.c
===================================================================
--- xfcalendar/trunk/src/appointment.c	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/appointment.c	2008-03-01 13:16:37 UTC (rev 26653)
@@ -29,6 +29,7 @@
 
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <fcntl.h>
 #include <unistd.h>
 #include <locale.h>
 #include <time.h>
@@ -41,9 +42,12 @@
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
+#include <glib.h>
 #include <glib/gprintf.h>
+#include <glib/gstdio.h>
 
 #include <libxfcegui4/libxfcegui4.h>
+#include <libxfce4util/libxfce4util.h>
 
 #include "functions.h"
 #include "mainbox.h"
@@ -57,6 +61,27 @@
 #define FILETYPE_SIZE 38
 
 
+typedef struct _orage_category_win
+{
+    GtkWidget *window;
+    GtkWidget *vbox;
+
+    GtkWidget *new_frame;
+    GtkWidget *new_entry;
+    GtkWidget *new_color_button;
+    GtkWidget *new_add_button;
+
+    GtkWidget *cur_frame;
+    GtkWidget *cur_frame_vbox;
+
+    GtkTooltips *tooltips;
+    GtkAccelGroup *accelgroup;
+
+    gpointer *apptw;
+} category_win_struct;
+
+static void refresh_categories(category_win_struct *catw);
+
 static void fill_appt_window(appt_win *apptw, char *action, char *par);
 /*  
  *  the previous and the following are the main functions in this file
@@ -750,7 +775,7 @@
     struct tm current_t;
     gchar starttime[6], endtime[6], completedtime[6];
     gint i, j, k;
-    gchar *tmp;
+    gchar *tmp, *tmp2;
 
 /* Next line is fix for bug 2811.
  * We need to make sure spin buttons do not have values which are not
@@ -859,6 +884,21 @@
     appt->availability = gtk_combo_box_get_active(
             GTK_COMBO_BOX(apptw->Availability_cb));
 
+    /* categories */
+    tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(apptw->Categories_entry)));
+    tmp2 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(apptw->Categories_cb));
+    if (!strcmp(tmp2, _("Not set"))) {
+        g_free(tmp2);
+        tmp2 = NULL;
+    }
+    if (tmp) {
+        appt->categories = g_strjoin(",", tmp, tmp2, NULL);
+        g_free(tmp);
+        g_free(tmp2);
+    }
+    else 
+        appt->categories = tmp2;
+
     /* notes */
     gtk_text_buffer_get_bounds(apptw->Note_buffer, &start, &end);
     appt->note = gtk_text_iter_get_text(&start, &end);
@@ -1370,7 +1410,7 @@
 
         /* default alarm type is orage window and sound */
         appt->display_alarm_orage = TRUE;
-        appt->sound_alarm = TRUE;
+        appt->sound_alarm = TRUE; 
         /* default sound file is set in fill_appt_window */
     }
     else if ((strcmp(action, "UPDATE") == 0) || (strcmp(action, "COPY") == 0)) {
@@ -1396,6 +1436,379 @@
     return(appt);
 }
 
+/************************************************************/
+/* categories start. this will go to functions.c when ready */
+/************************************************************/
+
+#define ORAGE_CATEGORIES "orage_categories.txt"
+#define ORAGE_COLOR_FORMAT "%uR %uG %uB"
+
+XfceRc *orage_category_file_open(gboolean read_only)
+{
+    gchar *fpath;
+    XfceRc *rc;
+
+    fpath = orage_data_file_location(ORAGE_CATEGORIES);
+    if (!fpath) {
+        g_warning("orage_category_file_open: category filename build failed (%s)\n", fpath);
+        return(NULL);
+    }
+    if ((rc = xfce_rc_simple_open(fpath, read_only)) == NULL) {
+        g_warning("Unable to open RC file.");
+        /* let's try to build it if we opened in read mode */
+        if (read_only && (rc = xfce_rc_simple_open(fpath, FALSE)) == NULL) {
+            /* still failed, can't do more */
+            g_warning("Unable to open (write) RC file.");
+            return(NULL);
+        }
+    }
+
+    g_free(fpath);
+    return(rc);
+}
+
+void orage_category_file_close(XfceRc *rc)
+{
+    xfce_rc_close(rc);
+}
+
+typedef struct _orage_category
+{
+    gchar *category;
+    GdkColor color;
+} orage_category_struct;
+
+
+GList *orage_category_list = NULL;
+
+GdkColor *orage_category_list_contains(char *categories)
+{
+    GList *cat_l;
+    orage_category_struct *cat;
+    
+    if (categories == NULL)
+        return(NULL);
+    cat_l = orage_category_list;
+    for (cat_l = g_list_first(cat_l);
+         cat_l != NULL;
+         cat_l = g_list_next(cat_l)) {
+        cat = (orage_category_struct *)cat_l->data;
+        if (g_str_has_suffix(categories, cat->category)) {
+            return(&cat->color);
+        }
+    }
+    /* not found */
+    return(NULL);
+}
+
+void orage_category_free(gpointer gcat, gpointer dummy)
+{
+    orage_category_struct *cat = (orage_category_struct *)gcat;
+
+    g_free(cat->category);
+    g_free(cat);
+}
+
+void orage_category_free_list()
+{
+    g_list_foreach(orage_category_list, orage_category_free, NULL);
+    g_list_free(orage_category_list);
+    orage_category_list = NULL;
+}
+
+void orage_category_get_list()
+{
+    XfceRc *rc;
+    gchar **cat_groups, *color;
+    gint i;
+    orage_category_struct *cat;
+    GdkColormap *pic1_cmap;
+
+    if (orage_category_list != NULL)
+        orage_category_free_list();
+    pic1_cmap = gdk_colormap_get_system();
+    rc = orage_category_file_open(TRUE);
+    cat_groups = xfce_rc_get_groups(rc);
+    for (i=1; cat_groups[i] != NULL; i++) {
+        xfce_rc_set_group(rc, cat_groups[i]);
+        color = (char *)xfce_rc_read_entry(rc, "Color", NULL);
+        if (color) {
+            cat= g_new(orage_category_struct, 1);
+            cat->category = g_strdup(cat_groups[i]);
+            sscanf(color, ORAGE_COLOR_FORMAT, &(cat->color.red)
+                    , &(cat->color.green), &(cat->color.blue));
+            gdk_colormap_alloc_color(pic1_cmap, &cat->color, FALSE, TRUE);
+            orage_category_list = g_list_prepend(orage_category_list, cat);
+        }
+    }
+    g_strfreev(cat_groups);
+    orage_category_file_close(rc);
+}
+
+gboolean category_fill_cb(GtkComboBox *cb, char *select)
+{
+    XfceRc *rc;
+    gchar **cat_gourps;
+    gint i;
+    gboolean found=FALSE;
+
+    rc = orage_category_file_open(TRUE);
+    cat_gourps = xfce_rc_get_groups(rc);
+    /* cat_gourps[0] is special [NULL] entry always */
+    gtk_combo_box_append_text(cb, _("Not set"));
+    gtk_combo_box_set_active(cb, 0);
+    for (i=1; cat_gourps[i] != NULL; i++) {
+        gtk_combo_box_append_text(cb, (const gchar *)cat_gourps[i]);
+        if (!found && select && !strcmp(select, cat_gourps[i])) {
+            gtk_combo_box_set_active(cb, i);
+            found = TRUE;
+        }
+    }
+    g_strfreev(cat_gourps);
+    orage_category_file_close(rc);
+    return(found);
+}
+
+void orage_category_refill_cb(appt_win *apptw)
+{
+    gchar *tmp;
+
+    /* first remember the currently selected value */
+    tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(apptw->Categories_cb));
+
+    /* then clear the values by removing the widget and putting it back */
+    gtk_widget_destroy(apptw->Categories_cb);
+    apptw->Categories_cb = gtk_combo_box_new_text();
+    gtk_container_add(GTK_CONTAINER(apptw->Categories_cb_event)
+            , apptw->Categories_cb);
+
+    /* and finally fill it with new values */
+    category_fill_cb(GTK_COMBO_BOX(apptw->Categories_cb), tmp);
+
+    g_free(tmp);
+    gtk_widget_show(apptw->Categories_cb);
+}
+
+void fill_category_data(appt_win *apptw, xfical_appt *appt)
+{
+    gchar *tmp = NULL;
+
+    /* first search the last entry. which is the special color value */
+    if (appt->categories) {
+        tmp = g_strrstr(appt->categories, ",");
+        if (!tmp) /* , not found, let's take the whole string */
+            tmp = appt->categories;
+        while (*(tmp) == ' ' || *(tmp) == ',') /* skip blanks and , */
+            tmp++; 
+    }
+    if (category_fill_cb(GTK_COMBO_BOX(apptw->Categories_cb), tmp)) {
+        /* we found match. Let's try to hide that from the entry text */
+        while (tmp != appt->categories 
+                && (*(tmp-1) == ' ' || *(tmp-1) == ','))
+            tmp--;
+        *tmp = '\0'; /* note that this goes to appt->categories */
+    }
+    gtk_entry_set_text(GTK_ENTRY(apptw->Categories_entry)
+            , (appt->categories ? appt->categories : ""));
+}
+
+void orage_category_write_entry(gchar *category, GdkColor *color)
+{
+    XfceRc *rc;
+    char *color_str;
+
+    if (!ORAGE_STR_EXISTS(category)) {
+        orage_message(50, "orage_category_write_entry: empty category. Not written");
+        return;
+    }
+    color_str = g_strdup_printf(ORAGE_COLOR_FORMAT
+            , color->red, color->green, color->blue);
+    rc = orage_category_file_open(FALSE);
+    xfce_rc_set_group(rc, category);
+    xfce_rc_write_entry(rc, "Color", color_str);
+    g_free(color_str);
+    orage_category_file_close(rc);
+}
+
+static void orage_category_remove_entry(gchar *category)
+{
+    XfceRc *rc;
+
+    if (!ORAGE_STR_EXISTS(category)) {
+        orage_message(50, "orage_category_write_entry: empty category. Not removed");
+        return;
+    }
+    rc = orage_category_file_open(FALSE);
+    xfce_rc_delete_group(rc, category, FALSE);
+    orage_category_file_close(rc);
+}
+
+static void close_cat_window(gpointer user_data)
+{
+    category_win_struct *catw = (category_win_struct *)user_data;
+
+    orage_category_refill_cb((appt_win *)catw->apptw);
+    gtk_widget_destroy(catw->window);
+    gtk_object_destroy(GTK_OBJECT(catw->tooltips));
+    g_free(catw);
+}
+
+static gboolean on_cat_window_delete_event(GtkWidget *w, GdkEvent *e
+        , gpointer user_data)
+{
+    close_cat_window(user_data);
+    return(FALSE);
+}
+
+static void cat_add_button_clicked(GtkButton *button, gpointer user_data)
+{
+    category_win_struct *catw = (category_win_struct *)user_data;
+    gchar *entry_category;
+    GdkColor color;
+
+    entry_category = g_strdup(gtk_entry_get_text((GtkEntry *)catw->new_entry));
+    g_strstrip(entry_category);
+    gtk_color_button_get_color((GtkColorButton *)catw->new_color_button
+            , &color);
+    orage_category_write_entry(entry_category, &color);
+    g_free(entry_category);
+    refresh_categories(catw);
+}
+
+static void cat_color_button_changed(GtkColorButton *color_button
+        , gpointer user_data)
+{
+    category_win_struct *catw = (category_win_struct *)user_data;
+    gchar *category;
+    GdkColor color;
+
+    category = g_object_get_data(G_OBJECT(color_button), "CATEGORY");
+    gtk_color_button_get_color(color_button, &color);
+    orage_category_write_entry(category, &color);
+}
+
+static void cat_del_button_clicked(GtkButton *button, gpointer user_data)
+{
+    category_win_struct *catw = (category_win_struct *)user_data;
+    gchar *category;
+
+    category = g_object_get_data(G_OBJECT(button), "CATEGORY");
+    orage_category_remove_entry(category);
+    refresh_categories(catw);
+}
+
+static void show_category(gpointer elem, gpointer user_data)
+{
+    orage_category_struct *cat = (orage_category_struct *)elem;
+    category_win_struct *catw = (category_win_struct *)user_data;
+    GtkWidget *label, *hbox, *button, *color_button;
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    label = gtk_label_new(cat->category);
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 5);
+
+    color_button = gtk_color_button_new_with_color(&cat->color);
+    gtk_box_pack_start(GTK_BOX(hbox), color_button, FALSE, FALSE, 5);
+    g_object_set_data_full(G_OBJECT(color_button), "CATEGORY"
+            , g_strdup(cat->category), g_free);
+    g_signal_connect((gpointer)color_button, "color-set"
+            , G_CALLBACK(cat_color_button_changed), catw);
+
+    button = gtk_button_new_from_stock("gtk-remove");
+    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
+    g_object_set_data_full(G_OBJECT(button), "CATEGORY"
+            , g_strdup(cat->category), g_free);
+    g_signal_connect((gpointer)button, "clicked"
+            , G_CALLBACK(cat_del_button_clicked), catw);
+
+    gtk_box_pack_start(GTK_BOX(catw->cur_frame_vbox), hbox, FALSE, FALSE, 5);
+}
+
+static void refresh_categories(category_win_struct *catw)
+{
+    GtkWidget *swin;
+
+    gtk_widget_destroy(catw->cur_frame);
+
+    catw->cur_frame_vbox = gtk_vbox_new(FALSE, 0);
+    swin = gtk_scrolled_window_new(NULL, NULL);
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin)
+            , GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin)
+            , catw->cur_frame_vbox);
+    catw->cur_frame = xfce_create_framebox_with_content(
+            _("Current categories"), swin);
+    gtk_box_pack_start(GTK_BOX(catw->vbox), catw->cur_frame, TRUE, TRUE, 5);
+
+    orage_category_get_list();
+    g_list_foreach(orage_category_list, show_category, catw);
+    gtk_widget_show_all(catw->cur_frame);
+}
+
+static void create_cat_win(category_win_struct *catw)
+{
+    GtkWidget *label, *hbox, *vbox;
+
+    /***** New category *****/
+    vbox = gtk_vbox_new(FALSE, 0);
+    catw->new_frame = xfce_create_framebox_with_content(
+            _("Add new category with color"), vbox);
+    gtk_box_pack_start(GTK_BOX(catw->vbox), catw->new_frame, FALSE, FALSE, 5);
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    label = gtk_label_new(_("Category:"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+    catw->new_entry = gtk_entry_new();
+    gtk_box_pack_start(GTK_BOX(hbox), catw->new_entry, TRUE, TRUE, 0);
+    catw->new_color_button = gtk_color_button_new();
+    gtk_box_pack_start(GTK_BOX(hbox), catw->new_color_button, FALSE, FALSE, 5);
+    catw->new_add_button = gtk_button_new_from_stock("gtk-add");
+    gtk_box_pack_start(GTK_BOX(hbox), catw->new_add_button, FALSE, FALSE, 5);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
+    g_signal_connect((gpointer)catw->new_add_button, "clicked"
+            , G_CALLBACK(cat_add_button_clicked), catw);
+
+    /***** Current categories *****/
+    /* refresh_categories always destroys frame first, so let's create
+     * a dummy for it for the first time */
+    vbox = gtk_vbox_new(FALSE, 0);
+    catw->cur_frame = xfce_create_framebox_with_content(("dummy"), vbox);
+    refresh_categories(catw);
+}
+
+static void on_categories_button_clicked_cb(GtkWidget *button
+        , gpointer *user_data)
+{
+    appt_win *apptw = (appt_win *)user_data;
+    category_win_struct *catw;
+
+    catw = g_new(category_win_struct, 1);
+    catw->apptw = (gpointer)apptw; /* remember the caller */
+    catw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_modal(GTK_WINDOW(catw->window), TRUE);
+    gtk_window_set_title(GTK_WINDOW(catw->window)
+            , _("Colors of categories - Orage"));
+    gtk_window_set_default_size(GTK_WINDOW(catw->window), 390, 360);
+
+    catw->tooltips = gtk_tooltips_new();
+    catw->accelgroup = gtk_accel_group_new();
+    gtk_window_add_accel_group(GTK_WINDOW(catw->window), catw->accelgroup);
+
+    catw->vbox = gtk_vbox_new(FALSE, 0);
+    gtk_container_add(GTK_CONTAINER(catw->window), catw->vbox);
+
+    create_cat_win(catw);
+
+    g_signal_connect((gpointer)catw->window, "delete_event",
+        G_CALLBACK(on_cat_window_delete_event), catw);
+    gtk_widget_show_all(catw->window);
+}
+
+/**********************************************************/
+/* categories end.                                        */
+/**********************************************************/
+
 /* Fill appointment window with data */
 static void fill_appt_window(appt_win *apptw, char *action, char *par)
 {
@@ -1404,6 +1817,7 @@
     struct tm *t, tm_date;
     char *untildate_to_display, *tmp;
     int i;
+    GdkColor color;
 
     orage_message(30, "%s appointment: %s", action, par);
     if ((appt = fill_appt_window_get_appt(apptw, action, par)) == NULL) {
@@ -1470,10 +1884,10 @@
             , (appt->title ? appt->title : ""));
 
     if (strcmp(action, "COPY") == 0) {
-            gtk_editable_set_position(GTK_EDITABLE(apptw->Title_entry), -1);
-            i = gtk_editable_get_position(GTK_EDITABLE(apptw->Title_entry));
-            gtk_editable_insert_text(GTK_EDITABLE(apptw->Title_entry)
-                    , _(" *** COPY ***"), strlen(_(" *** COPY ***")), &i);
+        gtk_editable_set_position(GTK_EDITABLE(apptw->Title_entry), -1);
+        i = gtk_editable_get_position(GTK_EDITABLE(apptw->Title_entry));
+        gtk_editable_insert_text(GTK_EDITABLE(apptw->Title_entry)
+                , _(" *** COPY ***"), strlen(_(" *** COPY ***")), &i);
     }
 
     /* location */
@@ -1489,6 +1903,9 @@
                    , appt->availability);
     }
 
+    /* categories */
+    fill_category_data(apptw, appt);
+
     /* note */
     gtk_text_buffer_set_text(apptw->Note_buffer
             , (appt->note ? (const gchar *) appt->note : ""), -1);
@@ -1754,7 +2171,7 @@
     GtkWidget *label, *event, *hbox;
     char *availability_array[2] = {_("Free"), _("Busy")};
 
-    apptw->TableGeneral = orage_table_new(10, BORDER_SIZE);
+    apptw->TableGeneral = orage_table_new(11, BORDER_SIZE);
     apptw->General_notebook_page = apptw->TableGeneral;
     apptw->General_tab_label = gtk_label_new(_("General"));
 
@@ -1891,6 +2308,29 @@
             , apptw->Completed_label, apptw->Completed_hbox
             , ++row, (GTK_FILL), (GTK_FILL));
 
+    /* categories */
+    apptw->Categories_label = gtk_label_new(_("Categories"));
+    apptw->Categories_hbox = gtk_hbox_new(FALSE, 0);
+    apptw->Categories_entry = gtk_entry_new();
+    gtk_box_pack_start(GTK_BOX(apptw->Categories_hbox), apptw->Categories_entry
+            , TRUE, TRUE, 0);
+    apptw->Categories_cb = gtk_combo_box_new_text();
+    apptw->Categories_cb_event =  gtk_event_box_new(); /* needed for tooltips */
+    gtk_container_add(GTK_CONTAINER(apptw->Categories_cb_event)
+            , apptw->Categories_cb);
+    gtk_box_pack_start(GTK_BOX(apptw->Categories_hbox)
+            , apptw->Categories_cb_event, FALSE, FALSE, 4);
+    gtk_tooltips_set_tip(apptw->Tooltips, apptw->Categories_cb_event
+            , _("This is special category, which can be used to color this appointment in list views."), NULL);
+    apptw->Categories_button =gtk_button_new_from_stock(GTK_STOCK_SELECT_COLOR);
+    gtk_box_pack_start(GTK_BOX(apptw->Categories_hbox), apptw->Categories_button
+            , FALSE, FALSE, 0);
+    gtk_tooltips_set_tip(apptw->Tooltips, apptw->Categories_button
+            , _("update colors for categories."), NULL);
+    orage_table_add_row(apptw->TableGeneral
+            , apptw->Categories_label, apptw->Categories_hbox
+            , ++row, (GTK_EXPAND | GTK_FILL), (0));
+
     /* note */
     apptw->Note = gtk_label_new(_("Note"));
     apptw->Note_Scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
@@ -1955,14 +2395,17 @@
             , G_CALLBACK(on_app_spin_button_changed_cb), apptw);
     g_signal_connect((gpointer)apptw->CompletedTimezone_button, "clicked"
             , G_CALLBACK(on_appCompletedTimezone_clicked_cb), apptw);
-    /* Take care of the title entry to build the appointment window title 
-     * Beware: we are not using apptw->Title_entry as a GtkEntry here 
-     * but as an interface GtkEditable instead.
-     */
+    /* Take care of the title entry to build the appointment window title */
     g_signal_connect((gpointer)apptw->Title_entry, "changed"
             , G_CALLBACK(on_appTitle_entry_changed_cb), apptw);
     g_signal_connect((gpointer)apptw->Location_entry, "changed"
             , G_CALLBACK(on_app_entry_changed_cb), apptw);
+    g_signal_connect((gpointer)apptw->Categories_entry, "changed"
+            , G_CALLBACK(on_app_entry_changed_cb), apptw);
+    g_signal_connect((gpointer)apptw->Categories_cb, "changed"
+            , G_CALLBACK(on_app_combobox_changed_cb), apptw);
+    g_signal_connect((gpointer)apptw->Categories_button, "clicked"
+            , G_CALLBACK(on_categories_button_clicked_cb), apptw);
     g_signal_connect((gpointer)apptw->Availability_cb, "changed"
             , G_CALLBACK(on_app_combobox_changed_cb), apptw);
     g_signal_connect((gpointer)apptw->Note_buffer, "changed"

Modified: xfcalendar/trunk/src/appointment.h
===================================================================
--- xfcalendar/trunk/src/appointment.h	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/appointment.h	2008-03-01 13:16:37 UTC (rev 26653)
@@ -94,6 +94,12 @@
     GtkWidget *CompletedTimezone_button;
     GtkWidget *Availability_label;
     GtkWidget *Availability_cb;
+    GtkWidget *Categories_label;
+    GtkWidget *Categories_hbox;
+    GtkWidget *Categories_entry;
+    GtkWidget *Categories_cb;
+    GtkWidget *Categories_cb_event;
+    GtkWidget *Categories_button;
     GtkWidget *Note;
     GtkWidget *Note_Scrolledwindow;
     GtkWidget *Note_textview;
@@ -183,4 +189,7 @@
 
 appt_win *create_appt_win(char *action, char *par);
 
+GdkColor *orage_category_list_contains(char *categories);
+void orage_category_get_list();
+
 #endif /* !__APPOINTMENT_H__ */

Modified: xfcalendar/trunk/src/day-view.c
===================================================================
--- xfcalendar/trunk/src/day-view.c	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/day-view.c	2008-03-01 13:16:37 UTC (rev 26653)
@@ -418,6 +418,7 @@
     gchar *text, *tip, *start_date, *end_date;
     GtkWidget *ev, *lab, *hb;
     struct tm tm_start, tm_end, tm_first;
+    GdkColor *color;
 
     /* First clarify timings */
     tm_start = orage_icaltime_to_tm_time(appt->starttimecur, FALSE);
@@ -443,30 +444,39 @@
 
     if (appt->starttimecur[8] != 'T') { /* whole day event */
         gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, &dw->bg2);
-        if (dw->header[col] == NULL)
-            hb = gtk_hbox_new(TRUE, 1);
-        else
+        if (dw->header[col] == NULL) { /* first data */
+            hb = gtk_hbox_new(TRUE, 3);
+            dw->header[col] = hb;
+        }
+        else {
             hb = dw->header[col];
+            /* FIXME: set some real bar here to make it visible that we
+             * have more than 1 appointment here
+             */
+        }
         tip = g_strdup_printf("%s\n%s - %s\n%s"
-                , appt->title
-                , appt->starttimecur
-                , appt->endtimecur
+                , appt->title, appt->starttimecur, appt->endtimecur
                 , appt->note);
-        dw->header[col] = hb;
     }
     else {
-        if ((row % 2) == 1)
+        if ((color = orage_category_list_contains(appt->categories)) != NULL)
+            gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, color);
+        else if ((row % 2) == 1)
             gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, &dw->bg1);
-        if (dw->element[row][col] == NULL)
-            hb = gtk_hbox_new(TRUE, 1);
-        else
+        if (dw->element[row][col] == NULL) {
+            hb = gtk_hbox_new(TRUE, 3);
+            dw->element[row][col] = hb;
+        }
+        else {
             hb = dw->element[row][col];
+            /* FIXME: set some real bar here to make it visible that we
+             * have more than 1 appointment here
+             */
+        }
         if (orage_days_between(&tm_start, &tm_end) == 0)
             tip = g_strdup_printf("%s\n%02d:%02d-%02d:%02d\n%s"
-                    , appt->title
-                    , tm_start.tm_hour, tm_start.tm_min
-                    , tm_end.tm_hour, tm_end.tm_min
-                    , appt->note);
+                    , appt->title, tm_start.tm_hour, tm_start.tm_min
+                    , tm_end.tm_hour, tm_end.tm_min, appt->note);
         else {
     /* we took the date in unnormalized format, so we need to do that now */
             tm_start.tm_year -= 1900;
@@ -483,7 +493,6 @@
             g_free(start_date);
             g_free(end_date);
         }
-        dw->element[row][col] = hb;
     }
     gtk_tooltips_set_tip(dw->Tooltips, ev, tip, NULL);
     /*
@@ -774,6 +783,7 @@
     guint monthdays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
     GtkWidget *vp;
     
+    orage_category_get_list();
     days = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dw->day_spin));
     tm_date = orage_i18_date_to_tm_date(
             gtk_button_get_label(GTK_BUTTON(dw->StartDate_button)));

Modified: xfcalendar/trunk/src/event-list.c
===================================================================
--- xfcalendar/trunk/src/event-list.c	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/event-list.c	2008-03-01 13:16:37 UTC (rev 26653)
@@ -63,6 +63,7 @@
 #include "tray_icon.h"
 #include "day-view.h"
 
+#define BORDER_SIZE 10
 
 enum {
     COL_TIME = 0
@@ -70,6 +71,7 @@
    ,COL_HEAD
    ,COL_UID
    ,COL_SORT
+   ,CAL_CATEGORIES
    ,NUM_COLS
 };
 
@@ -215,6 +217,24 @@
     return(result);
 }
 
+static void flags_data_func(GtkTreeViewColumn *col, GtkCellRenderer *rend
+        , GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+{
+    gchar *categories;
+    GdkColor *color;
+
+    gtk_tree_model_get(model, iter, CAL_CATEGORIES, &categories, -1);
+    if ((color = orage_category_list_contains(categories)) == NULL)
+        g_object_set(rend
+                 , "background-set",    FALSE
+                 , NULL);
+    else
+        g_object_set(rend
+                 , "background-gdk",    color
+                 , "background-set",    TRUE
+                 , NULL);
+}
+
 static void start_time_data_func(GtkTreeViewColumn *col, GtkCellRenderer *rend
         , GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
@@ -272,6 +292,7 @@
                      , "weight-set",        TRUE
                      , NULL);
         }
+        g_free(stime);
     }
     else if (el->page == TODO_PAGE) {
         gtk_tree_model_get(model, iter, COL_SORT, &stime, -1);
@@ -310,6 +331,7 @@
                      , "weight-set",        TRUE
                      , NULL);
         }
+        g_free(stime);
     }
     else {
         g_object_set(rend
@@ -393,6 +415,7 @@
             , COL_HEAD,  title
             , COL_UID,   appt->uid
             , COL_SORT,  s_sort1
+            , CAL_CATEGORIES,   appt->categories
             , -1);
     g_free(title);
     g_free(s_sort1);
@@ -577,6 +600,7 @@
 
 void refresh_el_win(el_win *el)
 {
+    orage_category_get_list();
     if (el->Window && el->ListStore && el->TreeView) {
         gtk_list_store_clear(el->ListStore);
         el->page = gtk_notebook_get_current_page(GTK_NOTEBOOK(el->Notebook));
@@ -1096,7 +1120,8 @@
     GtkWidget *label, *hbox;
 
     el->event_tab_label = gtk_label_new(_("Event"));
-    el->event_notebook_page = orage_table_new(2, 10);
+    /* FIXME: remove these tables, which are not needed anymore */
+    el->event_notebook_page = orage_table_new(1, BORDER_SIZE);
 
     label = gtk_label_new(_("Extra days to show "));
     hbox =  gtk_hbox_new(FALSE, 0);
@@ -1116,7 +1141,8 @@
 static void build_todo_tab(el_win *el)
 {
     el->todo_tab_label = gtk_label_new(_("Todo"));
-    el->todo_notebook_page = orage_table_new(2, 10);
+    /* FIXME: remove these tables, which are not needed anymore */
+    el->todo_notebook_page = orage_table_new(1, BORDER_SIZE);
 
     gtk_notebook_append_page(GTK_NOTEBOOK(el->Notebook)
             , el->todo_notebook_page, el->todo_tab_label);
@@ -1130,7 +1156,8 @@
     gchar *sdate;
 
     el->journal_tab_label = gtk_label_new(_("Journal"));
-    el->journal_notebook_page = orage_table_new(2, 10);
+    /* FIXME: remove these tables, which are not needed anymore */
+    el->journal_notebook_page = orage_table_new(1, BORDER_SIZE);
 
     label = gtk_label_new(_("Journal entries starting from:"));
     hbox =  gtk_hbox_new(FALSE, 0);
@@ -1158,7 +1185,8 @@
     GtkWidget *label;
 
     el->search_tab_label = gtk_label_new(_("Search"));
-    el->search_notebook_page = orage_table_new(1, 10);
+    /* FIXME: remove these tables, which are not needed anymore */
+    el->search_notebook_page = orage_table_new(1, BORDER_SIZE);
 
     label = gtk_label_new(_("Search text "));
     el->search_entry = gtk_entry_new();
@@ -1199,7 +1227,7 @@
     /* Tree view */
     el->ListStore = gtk_list_store_new(NUM_COLS
             , G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING
-            , G_TYPE_STRING);
+            , G_TYPE_STRING, G_TYPE_STRING);
     el->TreeView = gtk_tree_view_new();
     gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(el->TreeView), TRUE);
 
@@ -1229,6 +1257,8 @@
     col = gtk_tree_view_column_new_with_attributes( _("Flags"), rend
                 , "text", COL_FLAGS
                 , NULL);
+    gtk_tree_view_column_set_cell_data_func(col, rend, flags_data_func
+                , el, NULL);
     gtk_tree_view_append_column(GTK_TREE_VIEW(el->TreeView), col);
 
     rend = gtk_cell_renderer_text_new();
@@ -1251,6 +1281,13 @@
     gtk_tree_view_append_column(GTK_TREE_VIEW(el->TreeView), col);
     gtk_tree_view_column_set_visible(col, FALSE);
 
+    rend = gtk_cell_renderer_text_new();
+    col = gtk_tree_view_column_new_with_attributes("cat", rend
+                , "text", CAL_CATEGORIES
+                , NULL);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(el->TreeView), col);
+    gtk_tree_view_column_set_visible(col, FALSE);
+
     gtk_tooltips_set_tip(el->Tooltips, el->TreeView, _("Double click line to edit it.\n\nFlags in order:\n\t 1. Alarm: n=no alarm\n\t\t A=visual Alarm S=also Sound alarm\n\t 2. Recurrence: n=no recurrence\n\t\t D=Daily W=Weekly M=Monthly Y=Yearly\n\t 3. Type: f=free B=Busy\n\t 4. Located in file:\n\t\tO=Orage A=Archive F=Foreign\n\t 5. Appointment type:\n\t\tE=Event T=Todo J=Journal"), NULL);
 
     g_signal_connect(el->TreeView, "row-activated",

Modified: xfcalendar/trunk/src/functions.c
===================================================================
--- xfcalendar/trunk/src/functions.c	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/functions.c	2008-03-01 13:16:37 UTC (rev 26653)
@@ -36,9 +36,7 @@
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
 
-/*
 #include <libxfce4util/libxfce4util.h>
-*/
 
 #include "orage-i18n.h"
 #include "functions.h"
@@ -106,21 +104,6 @@
     g_free(formatted);
 }
 
-/*
-void orage_message(const char *format, ...)
-{
-    va_list args;
-    char *formatted, *str;
-
-    va_start(args, format);
-    formatted = g_strdup_vprintf(format, args);
-    va_end(args);
-
-    g_message("Orage **: %s", formatted);
-    g_free(formatted);
-}
-*/
-
 GtkWidget *orage_create_combo_box_with_content(char *text[], int size)
 {
     register int i;
@@ -504,3 +487,13 @@
     t = orage_localtime();
     orage_select_date(cal, t->tm_year+1900, t->tm_mon, t->tm_mday);
 }
+
+gchar *orage_data_file_location(char *name)
+{
+    char *file_name, *dir_name;
+
+    dir_name = g_strconcat(ORAGE_DIR, name, NULL);
+    file_name = xfce_resource_save_location(XFCE_RESOURCE_DATA, dir_name, TRUE);
+    g_free(dir_name);
+    return(file_name);
+}

Modified: xfcalendar/trunk/src/functions.h
===================================================================
--- xfcalendar/trunk/src/functions.h	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/functions.h	2008-03-01 13:16:37 UTC (rev 26653)
@@ -29,6 +29,11 @@
 #define XFICAL_APPT_DATE_FORMAT "%04d%02d%02d"
 #define XFICAL_APPT_DATE_FORMAT_LEN 9
 
+#define ORAGE_DIR "orage" G_DIR_SEPARATOR_S
+#define ORAGE_PARFILE  "oragerc"
+#define ORAGE_APPFILE  "orage.ics"
+#define ORAGE_ARCFILE  "orage_archive.ics"
+
 #define ORAGE_STR_EXISTS(str) ((str != NULL) && (str[0] != 0))
 
 void orage_message(gint level, const char *format, ...);
@@ -72,4 +77,6 @@
 void orage_select_date(GtkCalendar *cal, guint year, guint month, guint day);
 void orage_select_today(GtkCalendar *cal);
 
+gchar *orage_data_file_location(char *name);
+
 #endif /* !__ORAGE_FUNCTIONS_H__ */

Modified: xfcalendar/trunk/src/ical-code.c
===================================================================
--- xfcalendar/trunk/src/ical-code.c	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/ical-code.c	2008-03-01 13:16:37 UTC (rev 26653)
@@ -909,9 +909,24 @@
 #endif
     itime_tz = icalproperty_get_first_parameter(p, ICAL_TZID_PARAMETER);
     if (itime_tz) {
-         tz_loc = (char *) icalparameter_get_tzid(itime_tz);
-         l_icaltimezone = icaltimezone_get_builtin_timezone(tz_loc);
-         if (!l_icaltimezone) {
+        tz_loc = (char *)icalparameter_get_tzid(itime_tz);
+        if (tz_loc[0] == '/') {
+             /* FIXME: this should be in import and in get data
+              * This probably is evolution format, 
+              * which has /xxx/xxx/timezone and we should remove the 
+              * extra /xxx/xxx/ from it */
+            char **new_str;
+
+            orage_message(-20, P_N "evolution timezone fix %s", tz_loc);
+            new_str = g_strsplit(tz_loc, "/", 4);
+            if (new_str[0] != NULL && new_str[1] != NULL && new_str[2] != NULL
+            &&  new_str[3] != NULL)
+                l_icaltimezone = icaltimezone_get_builtin_timezone(new_str[3]);
+            g_strfreev(new_str);
+        }
+        else
+            l_icaltimezone = icaltimezone_get_builtin_timezone(tz_loc);
+        if (!l_icaltimezone) {
             orage_message(250, P_N "builtin timezone %s not found, conversion failed.", tz_loc);
         }
         tz = icaltime_convert_to_zone(t, l_icaltimezone);
@@ -919,7 +934,7 @@
     else
         tz = t;
 
-    return (tz);
+    return(tz);
 }
 
 static struct icaltimetype convert_to_local_timezone(struct icaltimetype t
@@ -1597,6 +1612,7 @@
     struct icaltimetype dtstamp, create_time, wtime;
     gboolean end_time_done;
     gchar *int_uid, *ext_uid;
+    gchar **tmp_cat;
     struct icaldurationtype duration;
     int i;
     icalcomponent_kind ikind = ICAL_VEVENT_COMPONENT;
@@ -1632,7 +1648,7 @@
 
     icmp = icalcomponent_vanew(ikind
            , icalproperty_new_uid(int_uid)
-           , icalproperty_new_categories("ORAGENOTE")
+           /* , icalproperty_new_categories("ORAGENOTE") */
            , icalproperty_new_class(ICAL_CLASS_PUBLIC)
            , icalproperty_new_dtstamp(dtstamp)
            , icalproperty_new_created(create_time)
@@ -1651,6 +1667,14 @@
             icalcomponent_add_property(icmp
                     , icalproperty_new_location(appt->location));
     }
+    if (appt->categories) { /* need to split it if more than one */
+        tmp_cat = g_strsplit(appt->categories, ",", 0);
+        for (i=0; tmp_cat[i] != NULL; i++) {
+            icalcomponent_add_property(icmp
+                   , icalproperty_new_categories(tmp_cat[i]));
+        }
+        g_strfreev(tmp_cat);
+    }
     if (appt->allDay) { /* cut the string after Date: yyyymmdd */
         appt->starttime[8] = '\0';
         appt->endtime[8] = '\0';
@@ -2255,6 +2279,7 @@
             appt.completed_tz_loc = NULL;
             appt.availability = -1;
             appt.priority = 0;
+            appt.categories = NULL;
             appt.note = NULL;
             appt.alarmtime = 0;
             appt.alarm_before = TRUE;
@@ -2358,6 +2383,16 @@
                         appt.priority = icalproperty_get_priority(p);
                         break;
                     case ICAL_CATEGORIES_PROPERTY:
+                        if (appt.categories == NULL)
+                            appt.categories = g_strdup(icalproperty_get_categories(p));
+                        else {
+                            text = appt.categories;
+                            appt.categories = g_strjoin(","
+                                    , appt.categories
+                                    , icalproperty_get_categories(p), NULL);
+                            g_free((char *)text);
+                        }
+                        break;
                     case ICAL_CLASS_PROPERTY:
                     case ICAL_DTSTAMP_PROPERTY:
                     case ICAL_CREATED_PROPERTY:

Modified: xfcalendar/trunk/src/ical-code.h
===================================================================
--- xfcalendar/trunk/src/ical-code.h	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/ical-code.h	2008-03-01 13:16:37 UTC (rev 26653)
@@ -48,9 +48,10 @@
     /* note that version 4.5.9 changed uid format.
      * new format starts with 3 char source id (plus separator '.'), 
      * which tells the file where the id is found:
-     * "O01." = Orage file (normal file)
-     * "A01." = Archive file
+     * "O00." = Orage file (normal file)
+     * "A00." = Archive file
      * "F10." = Foreign file number 10
+     * "H08." = Holiday file number 08
      */
     gchar *uid; 
     gchar *title;
@@ -75,6 +76,7 @@
 
     gint availability;
     gint priority;
+    gchar *categories;
     gchar *note;
 
         /* alarm */

Modified: xfcalendar/trunk/src/interface.c
===================================================================
--- xfcalendar/trunk/src/interface.c	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/interface.c	2008-03-01 13:16:37 UTC (rev 26653)
@@ -321,9 +321,9 @@
     gchar *rcfile;
     gchar *s;
 
-    rcfile = orage_resource_file_location(ORAGE_DIR);
+    rcfile = orage_data_file_location(NULL);
     f_chooser = orage_file_chooser(intf_w->main_window, TRUE
-            , g_par.orage_file, rcfile, APPFILE);
+            , g_par.orage_file, rcfile, ORAGE_APPFILE);
     g_free(rcfile);
 
     if (gtk_dialog_run(GTK_DIALOG(f_chooser)) == GTK_RESPONSE_ACCEPT) {
@@ -348,9 +348,9 @@
     gchar *rcfile;
     gchar *s;
 
-    rcfile = orage_resource_file_location(ORAGE_DIR);
+    rcfile = orage_data_file_location(NULL);
     f_chooser = orage_file_chooser(intf_w->main_window, TRUE
-            , g_par.archive_file, rcfile, ARCFILE);
+            , g_par.archive_file, rcfile, ORAGE_ARCFILE);
     g_free(rcfile);
 
     if (gtk_dialog_run(GTK_DIALOG(f_chooser)) == GTK_RESPONSE_ACCEPT) {
@@ -1319,8 +1319,8 @@
     create_orage_file_tab(intf_w);
     create_foreign_file_tab(intf_w);
 
-     g_signal_connect((gpointer)intf_w->main_window, "delete_event",
-             G_CALLBACK(on_Window_delete_event), intf_w);
+    g_signal_connect((gpointer)intf_w->main_window, "delete_event",
+            G_CALLBACK(on_Window_delete_event), intf_w);
 
     gtk_widget_show_all(intf_w->main_window);
     drag_and_drop_init(intf_w);

Modified: xfcalendar/trunk/src/parameters.c
===================================================================
--- xfcalendar/trunk/src/parameters.c	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/parameters.c	2008-03-01 13:16:37 UTC (rev 26653)
@@ -115,15 +115,6 @@
 } Itf;
 
 
-gchar *orage_resource_file_location(char *name)
-{
-    char *file_name;
-
-    file_name = xfce_resource_save_location(XFCE_RESOURCE_DATA
-            , name, TRUE);
-    return(file_name);
-}
-
 static void dialog_response(GtkWidget *dialog, gint response_id
         , gpointer user_data)
 {
@@ -792,7 +783,7 @@
     gchar f_par[50];
 
     fpath = xfce_resource_save_location(XFCE_RESOURCE_CONFIG
-            , ORAGE_DIR PARFILE, TRUE);
+            , ORAGE_DIR ORAGE_PARFILE, TRUE);
     if ((rc = xfce_rc_simple_open(fpath, FALSE)) == NULL) {
         g_warning("Unable to open RC file.");
         return;
@@ -855,7 +846,7 @@
     gchar f_par[100];
 
     fpath = xfce_resource_save_location(XFCE_RESOURCE_CONFIG
-            , ORAGE_DIR PARFILE, TRUE);
+            , ORAGE_DIR ORAGE_PARFILE, TRUE);
 
     if ((rc = xfce_rc_simple_open(fpath, TRUE)) == NULL) {
         g_warning("Unable to open (read) RC file.");
@@ -870,12 +861,12 @@
             g_strdup(xfce_rc_read_entry(rc, "Timezone", "floating"));
 #ifdef HAVE_ARCHIVE
     g_par.archive_limit = xfce_rc_read_int_entry(rc, "Archive limit", 0);
-    fpath2 = orage_resource_file_location(ORAGE_DIR ARCFILE);
+    fpath2 = orage_data_file_location(ORAGE_ARCFILE);
     g_par.archive_file = 
             g_strdup(xfce_rc_read_entry(rc, "Archive file", fpath2));
     g_free(fpath2);
 #endif
-    fpath2 = orage_resource_file_location(ORAGE_DIR APPFILE);
+    fpath2 = orage_data_file_location(ORAGE_APPFILE);
     g_par.orage_file = g_strdup(xfce_rc_read_entry(rc, "Orage file", fpath2));
     g_free(fpath2);
     g_par.sound_application = 

Modified: xfcalendar/trunk/src/parameters.h
===================================================================
--- xfcalendar/trunk/src/parameters.h	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/parameters.h	2008-03-01 13:16:37 UTC (rev 26653)
@@ -26,11 +26,6 @@
 #include "xfce_trayicon.h"
 #include "mainbox.h"
 
-#define ORAGE_DIR "orage" G_DIR_SEPARATOR_S
-#define PARFILE  "oragerc"
-#define APPFILE  "orage.ics"
-#define ARCFILE  "orage_archive.ics"
-
 #define BORDER 5
 typedef struct _foreign_file
 {
@@ -104,7 +99,6 @@
 extern global_parameters g_par; /* refer to existing global parameters */
 #endif
 
-gchar *orage_resource_file_location(char *name);
 void show_parameters(void);
 void write_parameters(void);
 void read_parameters(void);

Modified: xfcalendar/trunk/src/reminder.c
===================================================================
--- xfcalendar/trunk/src/reminder.c	2008-02-28 13:37:25 UTC (rev 26652)
+++ xfcalendar/trunk/src/reminder.c	2008-03-01 13:16:37 UTC (rev 26653)
@@ -63,8 +63,6 @@
 static void create_reminders(alarm_struct *alarm);
 static void reset_orage_alarm_clock();
 
-/* this is almost the same than in ical-code.c.
- * Perhaps these can be combined */
 static void alarm_free(gpointer galarm, gpointer dummy)
 {
 #undef P_N
@@ -113,7 +111,7 @@
     int p_file;
     char *file_name;
 
-    file_name = orage_resource_file_location(ORAGE_DIR ORAGE_PERSISTENT_ALARMS);
+    file_name = orage_data_file_location(ORAGE_PERSISTENT_ALARMS);
     if (!file_name) {
         g_warning("orage_persistent_file_open: Persistent alarms filename build failed, alarms not saved (%s)\n", file_name);
         return(-1);



More information about the Xfce4-commits mailing list