[Xfce4-commits] r26125 - in xfcalendar/trunk: . src

Juha Kautto juha at xfce.org
Mon Oct 1 23:18:33 CEST 2007


Author: juha
Date: 2007-10-01 21:18:33 +0000 (Mon, 01 Oct 2007)
New Revision: 26125

Added:
   xfcalendar/trunk/src/day-view.c
   xfcalendar/trunk/src/day-view.h
   xfcalendar/trunk/src/orage-i18n.h
Modified:
   xfcalendar/trunk/NEWS
   xfcalendar/trunk/TODO
   xfcalendar/trunk/configure.in.in
   xfcalendar/trunk/src/Makefile.am
   xfcalendar/trunk/src/about-xfcalendar.c
   xfcalendar/trunk/src/appointment.c
   xfcalendar/trunk/src/event-list.c
   xfcalendar/trunk/src/event-list.h
   xfcalendar/trunk/src/functions.c
   xfcalendar/trunk/src/functions.h
   xfcalendar/trunk/src/ical-code.c
   xfcalendar/trunk/src/main.c
   xfcalendar/trunk/src/mainbox.c
   xfcalendar/trunk/src/parameters.c
   xfcalendar/trunk/src/reminder.c
   xfcalendar/trunk/src/tray_icon.c
   xfcalendar/trunk/src/tray_icon.h
Log:
Orage 4.5.9.7
- New day view in addition to the original list view. 
  Makes it possible to see what is happening better than in list view.
- Fix for bug 3582: now it is possible to see 999 days in list view.
- memory leaks with tooltips fixed.


Modified: xfcalendar/trunk/NEWS
===================================================================
--- xfcalendar/trunk/NEWS	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/NEWS	2007-10-01 21:18:33 UTC (rev 26125)
@@ -1,3 +1,8 @@
+20071002:
+---------
+        * Orage version 4.5.9.7 released 
+        * Day view added.
+
 20070519:
 ---------
         * Orage version 4.5.9.5 released 

Modified: xfcalendar/trunk/TODO
===================================================================
--- xfcalendar/trunk/TODO	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/TODO	2007-10-01 21:18:33 UTC (rev 26125)
@@ -40,8 +40,10 @@
 *** DONE 4.5 ***
 
 10) more alarm possibilities (like libnotify BUG 2831 and email)
+*** DONE 4.5 ***
 
 11) Day, Week, Month view
+*** DONE 4.5 for day and week view ***
 
 12) Exclude possiblity in repeating rule
 

Modified: xfcalendar/trunk/configure.in.in
===================================================================
--- xfcalendar/trunk/configure.in.in	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/configure.in.in	2007-10-01 21:18:33 UTC (rev 26125)
@@ -9,7 +9,7 @@
 dnl
 
 dnl Version information
-m4_define([orage_version], [4.5.9.6-svn])
+m4_define([orage_version], [4.5.9.7-svn])
 
 m4_define([gtk_minimum_version], [2.6.0])
 m4_define([xfce_minimum_version], [4.4.0])

Modified: xfcalendar/trunk/src/Makefile.am
===================================================================
--- xfcalendar/trunk/src/Makefile.am	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/Makefile.am	2007-10-01 21:18:33 UTC (rev 26125)
@@ -6,6 +6,8 @@
 	about-xfcalendar.h						\
 	appointment.c							\
 	appointment.h							\
+	day-view.c							\
+	day-view.h							\
 	event-list.c							\
 	event-list.h							\
 	functions.c							\
@@ -17,6 +19,7 @@
 	main.c								\
 	mainbox.c                                                       \
 	mainbox.h                                                       \
+	orage-i18n.h                                                    \
 	parameters.c							\
 	parameters.h							\
 	reminder.c							\

Modified: xfcalendar/trunk/src/about-xfcalendar.c
===================================================================
--- xfcalendar/trunk/src/about-xfcalendar.c	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/about-xfcalendar.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -43,7 +43,7 @@
           , XFCE_COPYRIGHT_TEXT("2003-2007", " Juha Kautto")
           , XFCE_LICENSE_GPL);
   /* orage_logo = xfce_themed_icon_load("xfcalendar", 48); */
-  orage_logo = create_icon(xfcal, 48, 48);
+  orage_logo = orage_create_icon(xfcal, FALSE, 48, 48);
   xfce_about_info_set_homepage(about, "http://www.xfce.org");
 
   /* Credits */

Modified: xfcalendar/trunk/src/appointment.c
===================================================================
--- xfcalendar/trunk/src/appointment.c	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/appointment.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -680,6 +680,16 @@
     mark_appointment_changed((appt_win *)user_data);
 }
 
+static void app_free_memory(appt_win *apptw)
+{
+    gtk_widget_destroy(apptw->Window);
+    gtk_object_destroy(GTK_OBJECT(apptw->Tooltips));
+    g_free(apptw->xf_uid);
+    g_free(apptw->par);
+    xfical_appt_free(apptw->appt);
+    g_free(apptw);
+}
+
 static gboolean appWindow_check_and_close(appt_win *apptw)
 {
     gint result;
@@ -695,15 +705,22 @@
              NULL);
 
         if (result == GTK_RESPONSE_ACCEPT) {
+            app_free_memory(apptw);
+            /*
             gtk_widget_destroy(apptw->Window);
+            gtk_object_destroy(GTK_OBJECT(apptw->Tooltips));
             g_free(apptw);
+            */
         }
     }
     else {
+        app_free_memory(apptw);
+        /*
         gtk_widget_destroy(apptw->Window);
         gtk_object_destroy(GTK_OBJECT(apptw->Tooltips));
         xfical_appt_free(apptw->appt);
         g_free(apptw);
+        */
     }
     return TRUE;
 }
@@ -1063,9 +1080,13 @@
 static void save_xfical_from_appt_win_and_close(appt_win *apptw)
 {
     if (save_xfical_from_appt_win(apptw)) {
+        app_free_memory(apptw);
+        /*
         gtk_widget_destroy(apptw->Window);
+        gtk_object_destroy(GTK_OBJECT(apptw->Tooltips));
         xfical_appt_free(apptw->appt);
         g_free(apptw);
+        */
     }
 }
 
@@ -1109,11 +1130,15 @@
             refresh_el_win((el_win *)apptw->el);
         orage_mark_appointments();
 
+        app_free_memory(apptw);
+        /*
         gtk_widget_destroy(apptw->Window);
+        gtk_object_destroy(GTK_OBJECT(apptw->Tooltips));
         g_free(apptw->xf_uid);
         g_free(apptw->par);
         xfical_appt_free(apptw->appt);
         g_free(apptw);
+        */
     }
 }
 
@@ -1173,57 +1198,9 @@
         , gpointer *user_data)
 {
     appt_win *apptw = (appt_win *)user_data;
-    GtkWidget *selDate_Window_dialog;
-    GtkWidget *selDate_Calendar_calendar;
-    gint result;
-    char *date_to_display=NULL; 
-    struct tm *t;
-    struct tm cur_t;
 
-    selDate_Window_dialog = gtk_dialog_new_with_buttons(
-            _("Pick the date"), GTK_WINDOW(apptw->Window),
-            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-            _("Today"), 
-            1,
-            GTK_STOCK_OK,
-            GTK_RESPONSE_ACCEPT,
-            NULL);
-
-    selDate_Calendar_calendar = gtk_calendar_new();
-    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(selDate_Window_dialog)->vbox)
-            , selDate_Calendar_calendar);
-
-    cur_t = orage_i18_date_to_tm_date(gtk_button_get_label(
-            GTK_BUTTON(button)));
-    orage_select_date(GTK_CALENDAR(selDate_Calendar_calendar)
-            , cur_t.tm_year+1900, cur_t.tm_mon, cur_t.tm_mday);
-    gtk_widget_show_all(selDate_Window_dialog);
-
-    result = gtk_dialog_run(GTK_DIALOG(selDate_Window_dialog));
-    switch(result){
-        case GTK_RESPONSE_ACCEPT:
-            gtk_calendar_get_date(GTK_CALENDAR(selDate_Calendar_calendar)
-                    , (guint *)&cur_t.tm_year, (guint *)&cur_t.tm_mon
-                    , (guint *)&cur_t.tm_mday);
-            cur_t.tm_year -= 1900;
-            date_to_display = orage_tm_date_to_i18_date(&cur_t);
-            break;
-        case 1:
-            t = orage_localtime();
-            date_to_display = orage_tm_date_to_i18_date(t);
-            break;
-        case GTK_RESPONSE_DELETE_EVENT:
-        default:
-            date_to_display = (gchar *)gtk_button_get_label(
-                    GTK_BUTTON(button));
-            break;
-    }
-    if (g_ascii_strcasecmp((gchar *)date_to_display
-            , (gchar *)gtk_button_get_label(GTK_BUTTON(button))) != 0) {
+    if (orage_date_button_clicked(button, apptw->Window))
         mark_appointment_changed(apptw);
-    }
-    gtk_button_set_label(GTK_BUTTON(button), (const gchar *)date_to_display);
-    gtk_widget_destroy(selDate_Window_dialog);
 }
 
 static void on_appStartTimezone_clicked_cb(GtkButton *button
@@ -1274,7 +1251,7 @@
 
     /* start time */
     if (strlen(appt->starttime) > 6 ) {
-        tm_date = orage_icaltime_to_tm_time(appt->starttime);
+        tm_date = orage_icaltime_to_tm_time(appt->starttime, TRUE);
         startdate_to_display = orage_tm_date_to_i18_date(&tm_date);
         gtk_button_set_label(GTK_BUTTON(apptw->StartDate_button)
                 , (const gchar *)startdate_to_display);
@@ -1295,7 +1272,7 @@
 
     /* end time */
     if (strlen(appt->endtime) > 6 ) {
-        tm_date = orage_icaltime_to_tm_time(appt->endtime);
+        tm_date = orage_icaltime_to_tm_time(appt->endtime, TRUE);
         enddate_to_display = orage_tm_date_to_i18_date(&tm_date);
         gtk_button_set_label(GTK_BUTTON(apptw->EndDate_button)
                 , (const gchar *)enddate_to_display);
@@ -1332,7 +1309,7 @@
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
             apptw->Completed_checkbutton), appt->completed);
     if (strlen(appt->completedtime) > 6 ) {
-        tm_date = orage_icaltime_to_tm_time(appt->completedtime);
+        tm_date = orage_icaltime_to_tm_time(appt->completedtime, TRUE);
         completeddate_to_display = orage_tm_date_to_i18_date(&tm_date);
         gtk_button_set_label(GTK_BUTTON(apptw->CompletedDate_button)
                 , (const gchar *)completeddate_to_display);
@@ -1640,7 +1617,7 @@
                     GTK_TOGGLE_BUTTON(apptw->Recur_until_rb), TRUE);
             gtk_spin_button_set_value(
                     GTK_SPIN_BUTTON(apptw->Recur_count_spin), (gdouble)1);
-            tm_date = orage_icaltime_to_tm_time(appt->recur_until);
+            tm_date = orage_icaltime_to_tm_time(appt->recur_until, TRUE);
             untildate_to_display = orage_tm_date_to_i18_date(&tm_date);
             gtk_button_set_label(GTK_BUTTON(apptw->Recur_until_button)
                     , (const gchar *)untildate_to_display);
@@ -2396,6 +2373,8 @@
     /*  initialisation + main window + base vbox */
     apptw = g_new(appt_win, 1);
     apptw->xf_uid = NULL;
+    apptw->par = NULL;
+    apptw->appt = NULL;
     apptw->el = event_list;    /* Keep track of the parent, if any */
     apptw->appointment_changed = FALSE;
     apptw->Tooltips = gtk_tooltips_new();
@@ -2433,9 +2412,12 @@
         gtk_widget_grab_focus(apptw->Title_entry);
     }
     else { /* failed to get data */
+        app_free_memory(apptw);
+        /*
         gtk_widget_destroy(apptw->Window);
         gtk_object_destroy(GTK_OBJECT(apptw->Tooltips));
         g_free(apptw);
+        */
     }
 
     return apptw;

Added: xfcalendar/trunk/src/day-view.c
===================================================================
--- xfcalendar/trunk/src/day-view.c	                        (rev 0)
+++ xfcalendar/trunk/src/day-view.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -0,0 +1,635 @@
+/*      Orage - Calendar and alarm handler
+ *
+ * Copyright (c) 2007      Juha Kautto  (juha at xfce.org)
+ *
+ * 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, 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
+       51 Franklin Street, 5th Floor
+       Boston, MA 02110-1301 USA
+
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+#include <string.h>
+#include <time.h>
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+
+#include "orage-i18n.h"
+#include "functions.h"
+#include "day-view.h"
+#include "ical-code.h"
+#include "parameters.h"
+
+static void refresh_day_view_table(day_win *dw);
+
+static GtkWidget *build_line(gint left_x, gint top_y, gint width, gint height
+        , GtkWidget *hour_line)
+{
+    GdkPixmap *pic1;
+    GdkGC *pic1_gc1, *pic1_gc2;
+    GdkColormap *pic1_cmap;
+    GdkColor color;
+    GdkVisual *pic1_vis;
+    GtkWidget *new_hour_line;
+    gint depth = 16;
+    gint red = 239, green = 235, blue = 230;
+    gboolean first = FALSE;
+
+    /*
+     * GdkPixbuf *scaled;
+    scaled = gdk_pixbuf_scale_simple (pix, w, h, GDK_INTERP_BILINEAR);
+    */
+     
+    pic1_cmap = gdk_colormap_get_system();
+    pic1_vis = gdk_colormap_get_visual(pic1_cmap);
+    depth = pic1_vis->depth;
+    if (hour_line == NULL) {
+        pic1 = gdk_pixmap_new(NULL, width, height, depth);
+        gdk_drawable_set_colormap(pic1, pic1_cmap);
+        first = TRUE;
+    }
+    else
+        gtk_image_get_pixmap(GTK_IMAGE(hour_line), &pic1, NULL);
+    pic1_gc1 = gdk_gc_new(pic1);
+    pic1_gc2 = gdk_gc_new(pic1);
+    color.red = red * (65535/255);
+    color.green = green * (65535/255);
+    color.blue = blue * (65535/255);
+    color.pixel = (gulong)(red*65536 + green*256 + blue);
+    gdk_colormap_alloc_color(pic1_cmap, &color, FALSE, TRUE);
+    gdk_gc_set_foreground(pic1_gc1, &color);
+    /* gdk_draw_rectangle(, , , left_x, top_y, width, height); */
+    if (first)
+        gdk_draw_rectangle(pic1, pic1_gc1, TRUE, left_x, top_y, width, height);
+    else
+        gdk_draw_rectangle(pic1, pic1_gc2, TRUE, left_x, top_y, width, height);
+    
+    new_hour_line = gtk_image_new_from_pixmap(pic1, NULL);
+    g_object_unref(pic1_gc1);
+    g_object_unref(pic1_gc2);
+    g_object_unref(pic1);
+    return(new_hour_line);
+}
+
+static void close_window(day_win *dw)
+{
+    gtk_widget_destroy(dw->Window);
+    gtk_object_destroy(GTK_OBJECT(dw->Tooltips));
+    g_free(dw);
+    dw = NULL;
+}
+
+static gboolean on_Window_delete_event(GtkWidget *w, GdkEvent *e
+        , gpointer user_data)
+{
+    close_window((day_win *)user_data);
+    return(FALSE);
+}
+
+static void on_File_close_activate_cb(GtkMenuItem *mi, gpointer user_data)
+{
+    close_window((day_win *)user_data);
+}
+
+static void build_menu(day_win *dw)
+{
+    dw->Menubar = gtk_menu_bar_new();
+    gtk_box_pack_start(GTK_BOX(dw->Vbox), dw->Menubar, FALSE, FALSE, 0);
+
+    /* File menu */
+    dw->File_menu = orage_menu_new(_("_File"), dw->Menubar);
+    dw->File_menu_close = orage_image_menu_item_new_from_stock("gtk-close"
+        , dw->File_menu, dw->accel_group);
+
+    g_signal_connect((gpointer)dw->File_menu_close, "activate"
+        , G_CALLBACK(on_File_close_activate_cb), dw);
+}
+
+static void on_Close_clicked(GtkButton *b, gpointer user_data)
+{
+    close_window((day_win *)user_data);
+}
+
+static void build_toolbar(day_win *dw)
+{
+    int i = 0;
+
+    dw->Toolbar = gtk_toolbar_new();
+    gtk_box_pack_start(GTK_BOX(dw->Vbox), dw->Toolbar, FALSE, FALSE, 0);
+    gtk_toolbar_set_tooltips(GTK_TOOLBAR(dw->Toolbar), TRUE);
+
+    dw->Close_toolbutton = orage_toolbar_append_button(dw->Toolbar
+             , "gtk-close", dw->Tooltips, _("Close"), i++);
+
+    g_signal_connect((gpointer)dw->Close_toolbutton, "clicked"
+             , G_CALLBACK(on_Close_clicked), dw);
+}
+
+static gboolean upd_day_view(day_win *dw)
+{
+    static guint day_cnt=-1;
+    guint day_cnt_n;
+
+    /* we only need to do this if it is really a new day count. We may get
+     * many of these while spin button is changing day count and it is enough
+     * to show only the last one, which is visible */
+    day_cnt_n = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dw->day_spin));
+    if (day_cnt != day_cnt_n) { /* need really do it */
+        refresh_day_view_table(dw);
+        day_cnt = day_cnt_n;
+    }
+    return(FALSE); /* we do this only once */
+}
+
+static void on_spin_changed(GtkSpinButton *b, gpointer *user_data)
+{
+    day_win *dw = (day_win *)user_data;
+
+    /* refresh_day_view_table is rather heavy (=slow), so doing it here 
+     * is not a good idea. We can't keep up with repeated quick presses 
+     * if we do the whole thing here. So let's throw it to background 
+     * and do it later. */
+    g_timeout_add(500, (GtkFunction)upd_day_view, dw);
+}
+
+static void on_Date_button_clicked_cb(GtkWidget *button, gpointer *user_data)
+{
+    day_win *dw = (day_win *)user_data;
+
+    if (orage_date_button_clicked(button, dw->Window)) {
+        refresh_day_view_table(dw);
+    }
+}
+
+static void header_button_clicked_cb(GtkWidget *button, gpointer *user_data)
+{
+    day_win *dw = (day_win *)user_data;
+    gchar *start_date;
+
+    start_date = (char *)gtk_button_get_label(GTK_BUTTON(button));
+    create_el_win(start_date);
+}
+
+static void event_button_clicked_cb(GtkWidget *button, gpointer *user_data)
+{
+    day_win *dw = (day_win *)user_data;
+    gchar *uid;
+
+    uid = g_object_get_data(G_OBJECT(button), "UID");
+    create_appt_win("UPDATE", uid, NULL);
+}
+
+static void add_row(day_win *dw, xfical_appt *appt, char *a_day
+        , GtkWidget *element[24][40], GtkWidget *line[24][40], GdkColor *bg
+        , gint days)
+{
+    gint row, start_row, end_row, length;
+    gint col, len, start_col, end_col, first_col, last_col;
+    gint height, start_height, end_height;
+    gchar *text, *tip, *uid, *start_date, *end_date;
+    GtkWidget *ev, *lab, *name, *hb;
+    struct tm tm_start, tm_end, tm_first;
+    GDate *g_start, *g_end, *g_first;
+
+    tm_start = orage_icaltime_to_tm_time(appt->starttimecur, FALSE);
+    tm_end   = orage_icaltime_to_tm_time(appt->endtimecur, FALSE);
+    tm_first = orage_icaltime_to_tm_time(a_day, FALSE);
+
+    g_start = g_date_new_dmy(tm_start.tm_mday, tm_start.tm_mon
+            , tm_start.tm_year);
+    g_end   = g_date_new_dmy(tm_end.tm_mday, tm_end.tm_mon
+            , tm_end.tm_year);
+    g_first = g_date_new_dmy(tm_first.tm_mday, tm_first.tm_mon
+            , tm_first.tm_year);
+    col = g_date_days_between(g_first, g_start)+1;  /* col 0 == hour headers */
+    if (col < 1) {
+        col = 1;
+        row = 0;
+    }
+    else 
+        row = tm_start.tm_hour;
+
+    len = strlen(gtk_button_get_label(GTK_BUTTON(dw->StartDate_button)));
+    text = g_strndup(appt->title ? appt->title : _("Unknown"), len);
+    if (element[row][col] == NULL) {
+        hb = gtk_hbox_new(FALSE, 0);
+    }
+    else {
+        hb = element[row][col];
+    }
+    ev = gtk_event_box_new();
+    lab = gtk_label_new(text);
+    gtk_container_add(GTK_CONTAINER(ev), lab);
+    name = gtk_button_new();
+    gtk_button_set_relief(GTK_BUTTON(name), GTK_RELIEF_NONE);
+    if ((row % 2) == 1)
+        gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, bg);
+    length = g_date_days_between(g_start, g_end);
+    if (length == 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);
+    else {
+        /* we took the date in unnormalized format, so we need to do that now */
+        tm_start.tm_year -= 1900;
+        tm_start.tm_mon -= 1;
+        tm_end.tm_year -= 1900;
+        tm_end.tm_mon -= 1;
+        start_date = g_strdup(orage_tm_date_to_i18_date(&tm_start));
+        end_date = g_strdup(orage_tm_date_to_i18_date(&tm_end));
+        tip = g_strdup_printf("%s\n%s %02d:%02d - %s %02d:%02d\n%s"
+                , appt->title
+                , start_date, tm_start.tm_hour, tm_start.tm_min
+                , end_date, tm_end.tm_hour, tm_end.tm_min
+                , appt->note);
+        g_free(start_date);
+        g_free(end_date);
+    }
+    gtk_tooltips_set_tip(dw->Tooltips, name, tip, NULL);
+    gtk_container_add(GTK_CONTAINER(name), ev);
+    /*
+    gtk_widget_set_size_request(name, dw->StartDate_button_req.width, -1);
+    */
+    gtk_box_pack_start(GTK_BOX(hb), name, TRUE, TRUE, 0);
+    g_object_set_data_full(G_OBJECT(name), "UID", g_strdup(appt->uid), g_free);
+    g_signal_connect((gpointer)name, "clicked"
+            , G_CALLBACK(event_button_clicked_cb), dw);
+    element[row][col] = hb;
+    g_free(tip);
+    g_free(text);
+    height = dw->StartDate_button_req.height;
+    start_col = g_date_days_between(g_first, g_start)+1;
+    if (start_col < 1)
+        first_col = 1;
+    else
+        first_col = start_col;
+    end_col   = g_date_days_between(g_first, g_end)+1;
+    if (end_col > days)
+        last_col = days;
+    else
+        last_col = end_col;
+    g_date_free(g_start);
+    g_date_free(g_end);
+    g_date_free(g_first);
+    for (col = first_col; col <= last_col; col++) {
+        if (col == start_col)
+            start_row = tm_start.tm_hour;
+        else
+            start_row = 0;
+        if (col == end_col)
+            end_row   = tm_end.tm_hour;
+        else
+            end_row   = 23;
+        for (row = start_row; row <= end_row; row++) {
+            if (row == tm_start.tm_hour && col == start_col)
+                start_height = tm_start.tm_min*height/60;
+            else
+                start_height = 0;
+            if (row == tm_end.tm_hour && col == end_col)
+                end_height = tm_end.tm_min*height/60;
+            else
+                end_height = height;
+            line[row][col] = build_line(1, start_height
+                    , 2, end_height-start_height, line[row][col]);
+        }
+    }
+}
+
+static void app_rows(day_win *dw, char *a_day, GtkWidget *element[24][40]
+        , GtkWidget *line[24][40], xfical_type ical_type, gchar *file_type
+        , GdkColor *bg)
+{
+    xfical_appt *appt;
+    int days = 1;
+
+    program_log("\tapp_rows start");
+    days = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dw->day_spin)) - 1;
+    for (appt = xfical_appt_get_next_on_day(a_day, TRUE, days
+                , ical_type , file_type);
+         appt;
+         appt = xfical_appt_get_next_on_day(a_day, FALSE, days
+                , ical_type , file_type)) {
+        add_row(dw, appt, a_day, element, line, bg, days);
+        xfical_appt_free(appt);
+    }
+    program_log("\tapp_rows end");
+}
+
+static void app_data(day_win *dw, GtkWidget *element[24][40]
+        , GtkWidget *line[24][40], GdkColor *bg)
+{
+    xfical_type ical_type;
+    gchar file_type[8];
+    gint i;
+    gchar a_day[9]; /* yyyymmdd */
+
+    ical_type = XFICAL_TYPE_EVENT;
+    strcpy(a_day, orage_i18_date_to_icaltime(gtk_button_get_label(
+            GTK_BUTTON(dw->StartDate_button))));
+
+    /* first search base orage file */
+    program_log("\tapp_data before open");
+    if (!xfical_file_open(TRUE))
+        return;
+    program_log("\tapp_data after open");
+    strcpy(file_type, "O00.");
+    app_rows(dw, a_day, element, line, ical_type, file_type, bg);
+    /* then process all foreign files */
+    for (i = 0; i < g_par.foreign_count; i++) {
+        app_rows(dw, a_day, element, line, ical_type, file_type, bg);
+    }
+    xfical_file_close(TRUE);
+}
+
+
+static void fill_days(day_win *dw, gint days)
+{
+    gint i, j, height, width;
+    GtkWidget *name, *ev, *hb;
+    GdkColor bg;
+    GtkStyle *def_style;
+    GtkWidget *element[24][40];
+    GtkWidget *line[24][40];
+
+    program_log("fill_days started");
+    def_style = gtk_widget_get_default_style();
+    bg = def_style->bg[GTK_STATE_NORMAL];
+    bg.red +=  (bg.red < 64000 ? 1000 : -1000);
+    bg.green += (bg.green < 64000 ? 1000 : -1000);
+    bg.blue += (bg.blue < 64000 ? 1000 : -1000);
+    height = dw->StartDate_button_req.height;
+    width = dw->StartDate_button_req.width;
+
+    for (i = 0; i < 24; i++)
+    {
+        for (j = 1; j <  days+1; j++) {
+            element[i][j] = NULL;
+    /* gdk_draw_rectangle(, , , left_x, top_y, width, height); */
+            line[i][j] = build_line(0, 0, 3, height, NULL);
+        }
+    }
+    program_log("fill_days init done");
+    /* FIXME: the next line is heavy. it takes almost 100 % of time */
+    app_data(dw, element, line, &bg);
+    program_log("fill_days data done");
+    for (i = 0; i < 24; i++)
+    {
+        for (j = 1; j <  days+1; j++) {
+            hb = gtk_hbox_new(FALSE, 0);
+            if (i == 0) {
+                gtk_widget_set_size_request(hb, width, -1);
+            }
+            if (element[i][j]) {
+                gtk_box_pack_start(GTK_BOX(hb), line[i][j], FALSE, FALSE, 0);
+                gtk_box_pack_start(GTK_BOX(hb), element[i][j], TRUE, TRUE, 0);
+                gtk_widget_set_size_request(hb, width, -1);
+            }
+            else {
+                ev = gtk_event_box_new();
+                name = gtk_label_new(" ");
+                gtk_container_add(GTK_CONTAINER(ev), name);
+                if ((i % 2) == 1) {
+                    gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, &bg);
+                }
+                gtk_box_pack_start(GTK_BOX(hb), line[i][j], FALSE, FALSE, 0);
+                gtk_box_pack_start(GTK_BOX(hb), ev, TRUE, TRUE, 0);
+            }
+            gtk_table_attach(GTK_TABLE(dw->dtable), hb, j, j+1, i, i+1
+                     , (GTK_FILL), (0), 0, 0);
+        }
+    }
+    program_log("fill_days done");
+}
+
+static void build_day_view_header(day_win *dw, char *start_date)
+{
+    GtkWidget *hbox, *label, *space_label;
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(dw->Vbox), hbox, FALSE, FALSE, 10);
+
+    label = gtk_label_new(_("Start"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 10);
+
+    /* start date button */
+    dw->StartDate_button = gtk_button_new();
+    gtk_box_pack_start(GTK_BOX(hbox), dw->StartDate_button, FALSE, FALSE, 0);
+
+    space_label = gtk_label_new("  ");
+    gtk_box_pack_start(GTK_BOX(hbox), space_label, FALSE, FALSE, 0);
+
+    space_label = gtk_label_new("     ");
+    gtk_box_pack_start(GTK_BOX(hbox), space_label, FALSE, FALSE, 0);
+
+    label = gtk_label_new(_("Show"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 10);
+
+    /* show days spin = how many days to show */
+    dw->day_spin = gtk_spin_button_new_with_range(1, 40, 1);
+    gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(dw->day_spin), TRUE);
+    gtk_widget_set_size_request(dw->day_spin, 40, -1);
+    gtk_box_pack_start(GTK_BOX(hbox), dw->day_spin, FALSE, FALSE, 0);
+    label = gtk_label_new(_("days"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+
+    space_label = gtk_label_new("   ");
+    gtk_box_pack_start(GTK_BOX(hbox), space_label, FALSE, FALSE, 0);
+
+    /* initial values */
+    gtk_button_set_label(GTK_BUTTON(dw->StartDate_button)
+            , (const gchar *)start_date);
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(dw->day_spin), 7);
+
+    /* sizes */
+    gtk_widget_size_request(dw->StartDate_button, &dw->StartDate_button_req);
+    dw->StartDate_button_req.width += dw->StartDate_button_req.width/10;
+    label = gtk_label_new("00");
+    gtk_widget_size_request(label, &dw->hour_req);
+
+    g_signal_connect((gpointer)dw->day_spin, "value-changed"
+            , G_CALLBACK(on_spin_changed), dw);
+    g_signal_connect((gpointer)dw->StartDate_button, "clicked"
+            , G_CALLBACK(on_Date_button_clicked_cb), dw);
+}
+
+static void build_day_view_table(day_win *dw)
+{
+    gint days;   /* number of days to show */
+    int year, month, day;
+    gint i, j, sunday;
+    GtkWidget *name, *label;
+    char text[5+1], *date;
+    struct tm tm_date;
+    guint monthdays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+    GtkWidget *vp;
+    GdkColor fg;
+    GdkColormap *pic1_cmap;
+
+    pic1_cmap = gdk_colormap_get_system();
+    fg.red = 255 * (65535/255);
+    fg.green = 10 * (65535/255);
+    fg.blue = 10 * (65535/255);
+    fg.pixel = (gulong)(fg.red*65536 + fg.green*256 +fg.blue);
+    gdk_colormap_alloc_color(pic1_cmap, &fg, FALSE, TRUE);
+
+    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)));
+    sunday = tm_date.tm_wday; /* 0 = Sunday */
+    if (sunday)
+        sunday = 7-sunday;
+    
+    /* header of day table = days columns */
+    dw->scroll_win_h = gtk_scrolled_window_new(NULL, NULL);
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(dw->scroll_win_h)
+            , GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
+    gtk_box_pack_start(GTK_BOX(dw->Vbox), dw->scroll_win_h
+            , TRUE, TRUE, 0);
+    dw->day_view_vbox = gtk_vbox_new(FALSE, 0);
+    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(dw->scroll_win_h)
+            , dw->day_view_vbox);
+    /*
+    gtk_container_add(GTK_CONTAINER(dw->scroll_win_h), dw->day_view_vbox);
+    */
+    dw->dtable_h = gtk_table_new(1, days+2, FALSE);
+    gtk_box_pack_start(GTK_BOX(dw->day_view_vbox), dw->dtable_h
+            , FALSE, FALSE, 0);
+    year = tm_date.tm_year + 1900;
+    month = tm_date.tm_mon;
+    day = tm_date.tm_mday;
+    if (((tm_date.tm_year%4) == 0) && (((tm_date.tm_year%100) != 0) 
+            || ((tm_date.tm_year%400) == 0)))
+        ++monthdays[1];
+    name = gtk_label_new(" ");
+    gtk_widget_set_size_request(name, dw->hour_req.width, -1);
+    gtk_table_attach(GTK_TABLE(dw->dtable_h), name, 0, 1, 0, 1
+             , (GTK_FILL), (0), 0, 0);
+    for (i = 1; i <  days+1; i++) {
+        date = orage_tm_date_to_i18_date(&tm_date);
+        name = gtk_button_new();
+        gtk_button_set_label(GTK_BUTTON(name), date);
+        if ((i-1)%7 == sunday) {
+            label = gtk_bin_get_child(GTK_BIN(name));
+            gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &fg);
+        }
+        gtk_widget_set_size_request(name, dw->StartDate_button_req.width, -1);
+        g_signal_connect((gpointer)name, "clicked"
+                , G_CALLBACK(header_button_clicked_cb), dw);
+        gtk_table_attach(GTK_TABLE(dw->dtable_h), name, i, i+1, 0, 1
+                , (GTK_FILL), (0), 0, 0);
+
+        if (++tm_date.tm_mday == (monthdays[tm_date.tm_mon]+1)) {
+            if (++tm_date.tm_mon == 12) {
+                ++tm_date.tm_year;
+                tm_date.tm_mon = 0;
+            }
+            tm_date.tm_mday = 1;
+        }
+    }
+    name = gtk_label_new(" ");
+    gtk_widget_set_size_request(name, dw->hour_req.width, -1);
+    gtk_table_attach(GTK_TABLE(dw->dtable_h), name, days+1, days+2, 0, 1
+             , (GTK_FILL), (0), 0, 0);
+
+    /* body of day table */
+    dw->scroll_win = gtk_scrolled_window_new(NULL, NULL);
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(dw->scroll_win)
+            , GTK_SHADOW_NONE);
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(dw->scroll_win)
+            , GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+    gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(dw->scroll_win)
+            , GTK_CORNER_TOP_LEFT);
+    gtk_box_pack_start(GTK_BOX(dw->day_view_vbox), dw->scroll_win
+            , TRUE, TRUE, 0);
+    vp = gtk_viewport_new(NULL, NULL);
+    gtk_viewport_set_shadow_type(GTK_VIEWPORT(vp), GTK_SHADOW_NONE);
+    gtk_container_add(GTK_CONTAINER(dw->scroll_win), vp);
+    dw->dtable = gtk_table_new(24, days+2, FALSE);
+    gtk_container_add(GTK_CONTAINER(vp), dw->dtable);
+
+    /* hours column = hour rows */
+    for (i = 0; i < 24; i++) {
+        g_sprintf(text, "%02d", i);
+        name = gtk_label_new(text);
+        gtk_widget_set_size_request(name, dw->hour_req.width
+                , dw->StartDate_button_req.height);
+        gtk_table_attach(GTK_TABLE(dw->dtable), name, 0, 1, i, i+1
+             , (GTK_FILL), (0), 0, 0);
+        name = gtk_label_new(text);
+        gtk_widget_set_size_request(name, dw->hour_req.width, -1);
+        gtk_table_attach(GTK_TABLE(dw->dtable), name, days+1, days+2, i, i+1
+             , (GTK_FILL), (0), 0, 0);
+    }
+    fill_days(dw, days);
+}
+
+static void set_scroll_position(day_win *dw)
+{
+    GtkAdjustment *v_adj;
+    
+    /* let's try to start rougly from line 8 = 8 o'clock */
+    v_adj = gtk_scrolled_window_get_vadjustment(
+            GTK_SCROLLED_WINDOW(dw->scroll_win));
+    gtk_adjustment_set_value(v_adj, v_adj->upper/3);
+}
+
+static void refresh_day_view_table(day_win *dw)
+{
+    gtk_widget_destroy(dw->scroll_win_h);
+    build_day_view_table(dw);
+    gtk_widget_show_all(dw->scroll_win_h);
+    set_scroll_position(dw);
+}
+
+day_win *create_day_win(char *start_date)
+{
+    day_win *dw;
+
+    program_log("create_day_win started");
+    /* initialisation + main window + base vbox */
+    dw = g_new(day_win, 1);
+    dw->Tooltips = gtk_tooltips_new();
+    dw->accel_group = gtk_accel_group_new();
+
+    dw->Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_default_size(GTK_WINDOW(dw->Window), 690, 390);
+    gtk_window_set_title(GTK_WINDOW(dw->Window), _("Orage - day view"));
+
+    gtk_window_add_accel_group(GTK_WINDOW(dw->Window), dw->accel_group);
+
+    dw->Vbox = gtk_vbox_new(FALSE, 0);
+    gtk_container_add(GTK_CONTAINER(dw->Window), dw->Vbox);
+    g_signal_connect((gpointer)dw->Window, "delete_event"
+            , G_CALLBACK(on_Window_delete_event), dw);
+
+    build_menu(dw);
+    build_toolbar(dw);
+    program_log("create_day_win toolbar done");
+    build_day_view_header(dw, start_date);
+    program_log("create_day_win header done");
+    build_day_view_table(dw);
+    program_log("create_day_win table done");
+    gtk_widget_show_all(dw->Window);
+    set_scroll_position(dw);
+    program_log("create_day_win done");
+
+    return(dw);
+}

Added: xfcalendar/trunk/src/day-view.h
===================================================================
--- xfcalendar/trunk/src/day-view.h	                        (rev 0)
+++ xfcalendar/trunk/src/day-view.h	2007-10-01 21:18:33 UTC (rev 26125)
@@ -0,0 +1,56 @@
+/*      Orage - Calendar and alarm handler
+ *
+ * Copyright (c) 2005-2007 Juha Kautto  (juha at xfce.org)
+ * Copyright (c) 2004-2006 Mickael Graf (korbinus at xfce.org)
+ *
+ * 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, 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
+       51 Franklin Street, 5th Floor
+       Boston, MA 02110-1301 USA
+
+ */
+
+#ifndef __DAY_VIEW_H__
+#define __DAY_VIEW_H__
+
+typedef struct _day_win
+{
+    GtkAccelGroup *accel_group;
+    GtkTooltips   *Tooltips;
+
+    GtkWidget *Window;
+    GtkWidget *Vbox;
+
+    GtkWidget *StartDate_button;
+    GtkRequisition StartDate_button_req;
+    GtkWidget *day_spin;
+
+    GtkWidget *Menubar;
+    GtkWidget *File_menu;
+    GtkWidget *File_menu_close;
+
+    GtkWidget *Toolbar;
+    GtkWidget *Close_toolbutton;
+
+    GtkWidget *day_view_vbox;
+    GtkWidget *scroll_win_h;
+    GtkWidget *dtable_h; /* header of day table */
+    GtkWidget *scroll_win;
+    GtkWidget *dtable;   /* day table */
+    GtkRequisition hour_req;
+} day_win;
+
+day_win *create_day_win(char *start_date);
+
+#endif /* !__DAY_VIEW_H__ */

Modified: xfcalendar/trunk/src/event-list.c
===================================================================
--- xfcalendar/trunk/src/event-list.c	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/event-list.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -61,6 +61,7 @@
 #include "event-list.h"
 #include "appointment.h"
 #include "parameters.h"
+#include "day-view.h"
 
 
 void refresh_el_win(el_win *el);
@@ -89,19 +90,6 @@
     { "STRING", 0, DRAG_TARGET_STRING }
 };
 
-/*
-static void title_to_ical(char *title, char *ical)
-{ / * yyyy-mm-dd\0 -> yyyymmdd\0 * /
-    gint i, j;
-
-    for (i = 0, j = 0; i <= 8; i++) {
-        if (i == 4 || i == 6)
-            j++;
-        ical[i] = title[j++];
-    }
-}
-*/
-
 static void editEvent(GtkTreeView *view, GtkTreePath *path
         , GtkTreeViewColumn *col, gpointer user_data)
 {
@@ -188,7 +176,7 @@
         }
     }
     else { /* normally show date and time */
-        t = orage_icaltime_to_tm_time(appt->starttimecur);
+        t = orage_icaltime_to_tm_time(appt->starttimecur, TRUE);
         tmp = orage_tm_date_to_i18_date(&t);
         i = g_strlcpy(result, tmp, 50);
         if (start_ical_time[8] == 'T') { /* time part available */
@@ -196,7 +184,7 @@
             i += append_time(result, start_ical_time, i);
             i = g_strlcat(result, "- ", 50);
             if (!same_date) {
-                t = orage_icaltime_to_tm_time(appt->endtimecur);
+                t = orage_icaltime_to_tm_time(appt->endtimecur, TRUE);
                 tmp = orage_tm_date_to_i18_date(&t);
                 i = g_strlcat(result, tmp, 50);
                 result[i++] = ' ';
@@ -205,7 +193,7 @@
         }
         else {/* date only */
             i = g_strlcat(result, " - ", 50);
-            t = orage_icaltime_to_tm_time(appt->endtimecur);
+            t = orage_icaltime_to_tm_time(appt->endtimecur, TRUE);
             tmp = orage_tm_date_to_i18_date(&t);
             i = g_strlcat(result, tmp, 50);
         }
@@ -514,8 +502,8 @@
 {
     guint year, month, day;
     char      *title;  /* in %x strftime format */
-    char      *s_time; /* in icaltime format */
-    char      a_day[9];  /* yyyymmdd */
+    char      *s_time;  /* in icaltime format */
+    char      a_day[9]; /* yyyymmdd */
     struct tm *t, t_title;
 
     if (el->days == 0)
@@ -556,16 +544,20 @@
 
 void journal_data(el_win *el)
 {
-    char      *s_time;
+    /* char      *s_time; */
     char      a_day[9];  /* yyyymmdd */
-    struct tm t;
+    /* struct tm t; */
 
     el->days = 10*365; /* long enough time to get everything from future */
+    /*
     t = orage_i18_date_to_tm_date(gtk_button_get_label(
             GTK_BUTTON(el->journal_start_button)));
     s_time = orage_tm_time_to_icaltime(&t);
     strncpy(a_day, s_time, 8);
     a_day[8] = '\0';
+    */
+    strcpy(a_day, orage_i18_date_to_icaltime(gtk_button_get_label(
+            GTK_BUTTON(el->journal_start_button))));
 
     app_data(el, a_day, NULL);
 }
@@ -641,6 +633,13 @@
     refresh_el_win((el_win *)user_data);
 }
 
+static void set_el_data(el_win *el, char *title)
+{
+    gtk_window_set_title(GTK_WINDOW(el->Window), (const gchar*)title);
+    gtk_notebook_set_current_page(GTK_NOTEBOOK(el->Notebook), EVENT_PAGE);
+    refresh_el_win(el);
+}
+
 static void set_el_data_from_cal(el_win *el)
 {
     char *title;
@@ -652,9 +651,7 @@
             , (unsigned int *)&tm_date.tm_mday);
     tm_date.tm_year -= 1900;
     title = orage_tm_date_to_i18_date(&tm_date);
-    gtk_window_set_title(GTK_WINDOW(el->Window), (const gchar*)title);
-    gtk_notebook_set_current_page(GTK_NOTEBOOK(el->Notebook), EVENT_PAGE);
-    refresh_el_win(el);
+    set_el_data(el, title);
 }
 
 static void duplicate_appointment(el_win *el)
@@ -711,6 +708,7 @@
     write_parameters();
 
     gtk_widget_destroy(el->Window); /* destroy the eventlist window */
+    gtk_object_destroy(GTK_OBJECT(el->Tooltips));
     g_free(el);
     el = NULL;
 }
@@ -720,6 +718,16 @@
     close_window((el_win *)user_data);
 }
 
+static void on_Dayview_clicked(GtkButton *b, gpointer user_data)
+{
+    el_win *el = (el_win *)user_data;
+    char *title;
+
+    title = (char *)gtk_window_get_title(GTK_WINDOW(el->Window));
+    create_day_win(title);
+}
+
+
 static void on_File_close_activate_cb(GtkMenuItem *mi, gpointer user_data)
 {
     close_window((el_win *)user_data);
@@ -826,10 +834,13 @@
     struct tm tm_date = {0,0,0,0,0,0,0,0,0};
 
     title = (char *)gtk_window_get_title(GTK_WINDOW(el->Window));
+    /*
     tm_date = orage_i18_date_to_tm_date(title);
     s_title = orage_tm_time_to_icaltime(&tm_date);
     strncpy(a_day, s_title, 8);
     a_day[8] = '\0';
+    */
+    strcpy(a_day, orage_i18_date_to_icaltime(title));
 
     apptw = create_appt_win("NEW", a_day, el);
     /* gtk_widget_show(apptw->Window); */
@@ -1120,6 +1131,8 @@
 
     el->Close_toolbutton = orage_toolbar_append_button(el->Toolbar
             , "gtk-close", el->Tooltips, _("Close"), i++);
+    el->Dayview_toolbutton = orage_toolbar_append_button(el->Toolbar
+            , "gtk-zoom-in", el->Tooltips, _("Days"), i++);
 
     g_signal_connect((gpointer)el->Create_toolbutton, "clicked"
             , G_CALLBACK(on_Create_toolbutton_clicked_cb), el);
@@ -1139,6 +1152,8 @@
             , G_CALLBACK(on_Search_clicked), el);
     g_signal_connect((gpointer)el->Close_toolbutton, "clicked"
             , G_CALLBACK(on_Close_clicked), el);
+    g_signal_connect((gpointer)el->Dayview_toolbutton, "clicked"
+            , G_CALLBACK(on_Dayview_clicked), el);
 }
 
 static void build_event_tab(el_win *el)
@@ -1151,7 +1166,7 @@
 
     label = gtk_label_new(_("Extra days to show "));
     hbox =  gtk_hbox_new(FALSE, 0);
-    el->event_spin = gtk_spin_button_new_with_range(0, 31, 1);
+    el->event_spin = gtk_spin_button_new_with_range(0, 999, 1);
     gtk_box_pack_start(GTK_BOX(hbox), el->event_spin, FALSE, FALSE, 15);
     orage_table_add_row(el->event_notebook_page
             , label, hbox
@@ -1308,7 +1323,7 @@
             G_CALLBACK(editEvent), el);
 }
 
-el_win *create_el_win()
+el_win *create_el_win(char *start_date)
 {
     GdkPixbuf *pixbuf;
     el_win *el;
@@ -1338,7 +1353,10 @@
             , G_CALLBACK(on_Window_delete_event), el);
 
     gtk_widget_show_all(el->Window);
-    set_el_data_from_cal(el);
+    if (start_date == NULL)
+        set_el_data_from_cal(el);
+    else
+        set_el_data(el, start_date);
 
     gtk_drag_source_set(el->TreeView, GDK_BUTTON1_MASK
             , drag_targets, DRAG_TARGET_COUNT, GDK_ACTION_COPY);

Modified: xfcalendar/trunk/src/event-list.h
===================================================================
--- xfcalendar/trunk/src/event-list.h	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/event-list.h	2007-10-01 21:18:33 UTC (rev 26125)
@@ -33,7 +33,7 @@
 } el_page;
 
 
-typedef struct
+typedef struct _el_win
 {
     GtkAccelGroup *accel_group;
     GtkTooltips   *Tooltips;
@@ -64,6 +64,7 @@
     GtkWidget *Refresh_toolbutton;
     GtkWidget *Search_toolbutton;
     GtkWidget *Close_toolbutton;
+    GtkWidget *Dayview_toolbutton;
 
     GtkWidget *Notebook;
     GtkWidget *event_tab_label;
@@ -92,7 +93,7 @@
     char     date_now[XFICAL_APPT_TIME_FORMAT_LEN]; /* yyyymmddThhmmss */
 } el_win; /* event list window */
 
-el_win* create_el_win(void);
+el_win* create_el_win(char *start_date);
 void refresh_el_win(el_win *el);
 
 #endif /* !__EVENT_LIST_H__ */

Modified: xfcalendar/trunk/src/functions.c
===================================================================
--- xfcalendar/trunk/src/functions.c	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/functions.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -26,19 +26,124 @@
 #define _XOPEN_SOURCE /* glibc2 needs this */
 #include <time.h>
 #include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
 
 #include <glib.h>
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
 
+/*
 #include <libxfce4util/libxfce4util.h>
+*/
 
+#include "orage-i18n.h"
 #include "functions.h"
 
 /**************************************
  *  General purpose helper functions  *
  **************************************/
 
+
+gboolean orage_date_button_clicked(GtkWidget *button, GtkWidget *win)
+{
+    GtkWidget *selDate_Window_dialog;
+    GtkWidget *selDate_Calendar_calendar;
+    gint result;
+    char *date_to_display=NULL;
+    struct tm *t;
+    struct tm cur_t;
+    gboolean changed;
+
+    selDate_Window_dialog = gtk_dialog_new_with_buttons(
+            _("Pick the date"), GTK_WINDOW(win),
+            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+            _("Today"),
+            1,
+            GTK_STOCK_OK,
+            GTK_RESPONSE_ACCEPT,
+            NULL);
+
+    selDate_Calendar_calendar = gtk_calendar_new();
+    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(selDate_Window_dialog)->vbox)
+            , selDate_Calendar_calendar);
+
+    cur_t = orage_i18_date_to_tm_date(gtk_button_get_label(
+            GTK_BUTTON(button)));
+    orage_select_date(GTK_CALENDAR(selDate_Calendar_calendar)
+            , cur_t.tm_year+1900, cur_t.tm_mon, cur_t.tm_mday);
+    gtk_widget_show_all(selDate_Window_dialog);
+
+    result = gtk_dialog_run(GTK_DIALOG(selDate_Window_dialog));
+    switch(result){
+        case GTK_RESPONSE_ACCEPT:
+            gtk_calendar_get_date(GTK_CALENDAR(selDate_Calendar_calendar)
+                    , (guint *)&cur_t.tm_year, (guint *)&cur_t.tm_mon
+                    , (guint *)&cur_t.tm_mday);
+            cur_t.tm_year -= 1900;
+            date_to_display = orage_tm_date_to_i18_date(&cur_t);
+            break;
+        case 1:
+            t = orage_localtime();
+            date_to_display = orage_tm_date_to_i18_date(t);
+            break;
+        case GTK_RESPONSE_DELETE_EVENT:
+        default:
+            date_to_display = (gchar *)gtk_button_get_label(
+                    GTK_BUTTON(button));
+            break;
+    }
+    if (g_ascii_strcasecmp((gchar *)date_to_display
+            , (gchar *)gtk_button_get_label(GTK_BUTTON(button))) != 0)
+        changed = TRUE;
+    else
+        changed = FALSE;
+    gtk_button_set_label(GTK_BUTTON(button), (const gchar *)date_to_display);
+    gtk_widget_destroy(selDate_Window_dialog);
+    return(changed);
+}
+
+static void child_setup_async(gpointer user_data)
+{
+#if defined(HAVE_SETSID) && !defined(G_OS_WIN32)
+    setsid();
+#endif
+}
+
+static void child_watch_cb(GPid pid, gint status, gpointer data)
+{
+    gboolean *cmd_active = (gboolean *)data;
+
+    waitpid(pid, NULL, 0);
+    g_spawn_close_pid(pid);
+    *cmd_active = FALSE;
+}
+
+gboolean orage_exec(const char *cmd, gboolean *cmd_active, GError **error)
+{
+    char **argv;
+    gboolean success;
+    int spawn_flags = G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD;
+    GPid pid;
+
+    if (!g_shell_parse_argv(cmd, NULL, &argv, error))
+        return FALSE;
+
+    if (!argv || !argv[0])
+        return FALSE;
+
+    success = g_spawn_async(NULL, argv, NULL, spawn_flags
+            , child_setup_async, NULL, &pid, error);
+    if (cmd_active) {
+        if (success)
+            *cmd_active = TRUE;
+        g_child_watch_add(pid, child_watch_cb, cmd_active);
+    }
+    g_strfreev(argv);
+
+    return(success);
+}
+
 struct tm orage_i18_date_to_tm_date(const char *i18_date)
 {
     char *ret;
@@ -62,7 +167,7 @@
     return(i18_date);
 }
 
-struct tm orage_icaltime_to_tm_time(const char *icaltime)
+struct tm orage_icaltime_to_tm_time(const char *icaltime, gboolean real_tm)
 {
     int i;
     struct tm t = {0,0,0,0,0,0,0,0,0};
@@ -82,9 +187,10 @@
             g_error("orage: orage_icaltime_to_tm_time error %s %d", icaltime, i);
             break;
     }
-    /* normalise to standard tm format */
-    t.tm_year -= 1900;
-    t.tm_mon -= 1;
+    if (real_tm) { /* normalise to standard tm format */
+        t.tm_year -= 1900;
+        t.tm_mon -= 1;
+    }
     return(t);
 }
 
@@ -99,6 +205,17 @@
     return(icaltime);
 }
 
+char *orage_i18_date_to_icaltime(const char *i18_date)
+{
+    struct tm t;
+    char      *ct;
+
+    t = orage_i18_date_to_tm_date(i18_date);
+    ct = orage_tm_time_to_icaltime(&t);
+    ct[8] = '\0'; /* we know it is date */
+    return(ct);
+}
+
 void orage_message(const char *format, ...)
 {
     va_list args;

Modified: xfcalendar/trunk/src/functions.h
===================================================================
--- xfcalendar/trunk/src/functions.h	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/functions.h	2007-10-01 21:18:33 UTC (rev 26125)
@@ -33,6 +33,10 @@
 
 void orage_message(const char *format, ...);
 
+gboolean orage_date_button_clicked(GtkWidget *button, GtkWidget *win);
+
+gboolean orage_exec(const char *cmd, gboolean *cmd_active, GError **error);
+
 GtkWidget *orage_toolbar_append_button(GtkWidget *toolbar
         , const gchar *stock_id, GtkTooltips *tooltips
         , const char *tooltip_text, gint pos);
@@ -66,8 +70,10 @@
 
 char *orage_tm_date_to_i18_date(struct tm *tm_date);
 
-struct tm orage_icaltime_to_tm_time(const char *i18_date);
+struct tm orage_icaltime_to_tm_time(const char *i18_date, gboolean real_tm);
 
 char *orage_tm_time_to_icaltime(struct tm *t);
 
+char *orage_i18_date_to_icaltime(const char *i18_date);
+
 #endif /* !__ORAGE_FUNCTIONS_H__ */

Modified: xfcalendar/trunk/src/ical-code.c
===================================================================
--- xfcalendar/trunk/src/ical-code.c	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/ical-code.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -47,8 +47,6 @@
 #include <time.h>
 #include <math.h>
 
-#include <libxfce4util/libxfce4util.h>
-#include <libxfcegui4/libxfcegui4.h>
 #include <gdk/gdk.h>
 #include <gtk/gtk.h>
 #include <glib/gprintf.h>
@@ -56,6 +54,7 @@
 #include <ical.h>
 #include <icalss.h>
 
+#include "orage-i18n.h"
 #include "functions.h"
 #include "mainbox.h"
 #include "reminder.h"

Modified: xfcalendar/trunk/src/main.c
===================================================================
--- xfcalendar/trunk/src/main.c	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/main.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -63,7 +63,7 @@
 /* session client handler */
 static SessionClient	*session_client = NULL;
 static GdkAtom atom_alive;
-/*
+
 void program_log (const char *format, ...)
 {
         va_list args;
@@ -79,8 +79,8 @@
         access (str, F_OK);
         g_free (str);
 } 
-*/
 
+
 static void send_event(char *event)
 {
     GdkEventClient gev;
@@ -119,10 +119,12 @@
 
 static void raise_window()
 {
-    GdkScreen *screen;
+    GdkScreen *screen = NULL;
     GdkWindow *window;
 
+    /*
     screen = xfce_gdk_display_locate_monitor_with_pointer(NULL, NULL);
+    */
     gtk_window_set_screen(GTK_WINDOW(g_par.xfcal->mWindow)
             , screen ? screen : gdk_screen_get_default());
     if (g_par.pos_x || g_par.pos_y)
@@ -198,62 +200,6 @@
     gtk_main_quit();
 }
 
-static void ensure_basedir_spec(void)
-{
-    char *newdir, *olddir;
-    GError *error = NULL;
-    GDir *gdir;
-
-    newdir = xfce_resource_save_location(XFCE_RESOURCE_CONFIG, ORAGE_DIR, FALSE);
-
-  /* if new directory exist, assume old config has been copied */
-    if (g_file_test(newdir, G_FILE_TEST_IS_DIR)) {
-        g_free(newdir);
-        return;
-    }
-
-    if (!xfce_mkdirhier(newdir, 0700, &error)) {
-        g_critical("Cannot create directory %s: %s", newdir, error->message);
-        g_error_free(error);
-        g_free(newdir);
-        exit(EXIT_FAILURE);
-    }
-
-    olddir = xfce_get_userfile("xfcalendar", NULL);
-
-    if ((gdir = g_dir_open(olddir, 0, NULL)) != NULL) {
-        const char *name;
-
-        while ((name = g_dir_read_name(gdir)) != NULL) {
-            FILE *r, *w;
-            char *path;
-
-            path = g_build_filename(olddir, name, NULL);
-            r = fopen(path, "r");
-            g_free(path);
-
-            path = g_build_filename(newdir, name, NULL);
-            w = fopen(path, "w");
-            g_free(path);
-
-            if (r && w) {
-                char c;
-
-                while ((c = getc(r)) != EOF)
-                    putc (c, w);
-            }
-
-            if (r)
-                fclose(r);
-            if (w)
-                fclose(w);
-        }
-    }
-
-    g_free(newdir);
-    g_free(olddir);
-}
-
 static void print_version(void)
 {
     g_print(_("\tThis is %s version %s for Xfce %s\n\n")
@@ -473,7 +419,16 @@
 {
     gboolean running, initialized = FALSE;
 
+    /*
     xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+    */
+    /* init i18n = nls to use gettext */
+    bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
+#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
+    bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
+#endif
+    textdomain(GETTEXT_PACKAGE);
+
     gtk_init(&argc, &argv);
 
     atom_alive = gdk_atom_intern("_XFCE_CALENDAR_RUNNING", FALSE);
@@ -502,7 +457,6 @@
     * Now it's serious, the application is running, so we create the RC
     * directory and check for config files in old location.
     */
-    ensure_basedir_spec();
 #ifdef HAVE_DBUS
     orage_dbus_start();
 #endif

Modified: xfcalendar/trunk/src/mainbox.c
===================================================================
--- xfcalendar/trunk/src/mainbox.c	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/mainbox.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -36,9 +36,8 @@
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
-#include <libxfce4util/libxfce4util.h>
-#include <libxfcegui4/libxfcegui4.h>
 
+#include "orage-i18n.h"
 #include "functions.h"
 #include "mainbox.h"
 #include "about-xfcalendar.h"
@@ -47,6 +46,7 @@
 #include "appointment.h"
 #include "interface.h"
 #include "parameters.h"
+#include "tray_icon.h"
 
 
 gboolean
@@ -105,22 +105,13 @@
     show_parameters();
 }
 
-static void 
-mEdit_search_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
-{
-    CalWin *cal = (CalWin *) user_data;
-    el_win *el;
-
-    el = create_el_win();
-}
-
 static void
 mView_ViewSelectedDate_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 {
     CalWin *cal = (CalWin *) user_data;
     el_win *el;
 
-    el = create_el_win();
+    el = create_el_win(NULL);
 }
 
 static void
@@ -141,8 +132,9 @@
            , G_DIR_SEPARATOR_S, "doc"
            , G_DIR_SEPARATOR_S, "C"
            , G_DIR_SEPARATOR_S, "orage.html", NULL);
-    xfce_exec(helpdoc, FALSE, FALSE, NULL);
+    orage_exec(helpdoc, NULL, NULL);
     /*
+    xfce_exec(helpdoc, FALSE, FALSE, NULL);
     xfce_exec("xfhelp4 xfce4-user-guide.html", FALSE, FALSE, NULL);
     */
 }
@@ -184,7 +176,7 @@
 {
     el_win *el;
 
-    el = create_el_win();
+    el = create_el_win(NULL);
 }
 
 static gboolean
@@ -300,7 +292,8 @@
     /* using static icon here since this dynamic icon is not updated
      * when date changes. Could be added, but not worth it.
      * Dynamic icon is used in systray and about windows */
-    orage_logo = xfce_themed_icon_load("xfcalendar", 48); 
+    orage_logo = orage_create_icon(cal, TRUE, 48, 48); 
+    /* orage_logo = xfce_themed_icon_load("xfcalendar", 48); */
     /* orage_logo = create_icon(cal, 48, 48); */
     cal->mAccel_group = gtk_accel_group_new();
 

Added: xfcalendar/trunk/src/orage-i18n.h
===================================================================
--- xfcalendar/trunk/src/orage-i18n.h	                        (rev 0)
+++ xfcalendar/trunk/src/orage-i18n.h	2007-10-01 21:18:33 UTC (rev 26125)
@@ -0,0 +1,65 @@
+/*      Orage - Calendar and alarm handler
+ *
+ * Copyright (c) 2007      Juha Kautto  (juha at xfce.org)
+ *
+ * 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, 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
+       51 Franklin Street, 5th Floor
+       Boston, MA 02110-1301 USA
+
+ */
+
+
+#ifndef __ORAGE_I18N_H__
+#define __ORAGE_I18N_H__
+
+#include <glib.h>
+
+#if defined(GETTEXT_PACKAGE)
+#include <glib/gi18n-lib.h>
+#else
+#include <glib/gi18n.h>
+#endif
+
+#if !defined(GETTEXT_PACKAGE)
+
+#ifdef gettext
+#undef gettext
+#endif
+#ifdef dgettext
+#undef dgettext
+#endif
+#ifdef dcgettext
+#undef dcgettext
+#endif
+#ifdef ngettext
+#undef ngettext
+#endif
+#ifdef dngettext
+#undef dngettext
+#endif
+#ifdef dcngettext
+#undef dcngettext
+#endif
+
+#define gettext(s)                                            (s)
+#define dgettext(domain,s)                                    (s)
+#define dcgettext(domain,s,type)                              (s)
+#define ngettext(msgid, msgid_plural, n)                      (((n) > 0) ? (msgid) : (msgid_plural))
+#define dngettext(domainname, msgid, msgid_plural, n)         (((n) > 0) ? (msgid) : (msgid_plural))
+#define dcngettext(domainname, msgid, msgid_plural, n, type)  (((n) > 0) ? (msgid) : (msgid_plural))
+
+#endif /* !defined(GETTEXT_PACKAGE) */
+
+#endif  /* !__ORAGE_I18N_H__ */

Modified: xfcalendar/trunk/src/parameters.c
===================================================================
--- xfcalendar/trunk/src/parameters.c	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/parameters.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -688,8 +688,6 @@
     g_signal_connect(G_OBJECT (dialog->orage_dialog), "response"
             , G_CALLBACK(dialog_response), NULL);
 
-    xfce_gtk_window_center_on_monitor_with_pointer(
-            GTK_WINDOW(dialog->orage_dialog));
     gdk_x11_window_set_user_time(GTK_WIDGET(dialog->orage_dialog)->window, 
             gdk_x11_get_server_time(GTK_WIDGET(dialog->orage_dialog)->window));
     gtk_widget_show_all(dialog->orage_dialog);

Modified: xfcalendar/trunk/src/reminder.c
===================================================================
--- xfcalendar/trunk/src/reminder.c	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/reminder.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -39,13 +39,11 @@
 #include <glib/gprintf.h>
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
-#include <libxfce4util/libxfce4util.h>
-#include <libxfcegui4/libxfcegui4.h>
-#include <libxfcegui4/dialogs.h>
 #ifdef HAVE_NOTIFY
 #include <libnotify/notify.h>
 #endif
 
+#include "orage-i18n.h"
 #include "functions.h"
 #include "mainbox.h"
 #include "ical-code.h"
@@ -58,45 +56,7 @@
 
 void create_notify_reminder(alarm_struct *alarm);
 
-static void child_setup_async(gpointer user_data)
-{
-#if defined(HAVE_SETSID) && !defined(G_OS_WIN32)
-    setsid();
-#endif
-}
 
-static void child_watch_cb(GPid pid, gint status, gpointer data)
-{
-    gboolean *sound_active = (gboolean *)data;
-
-    waitpid(pid, NULL, 0);
-    g_spawn_close_pid(pid);
-    *sound_active = FALSE;
-}
-
-gboolean orage_exec(const char *cmd, gboolean *sound_active, GError **error)
-{
-    char **argv;
-    gboolean success;
-    int spawn_flags = G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD;
-    GPid pid;
-
-    if (!g_shell_parse_argv(cmd, NULL, &argv, error)) 
-        return FALSE;
-
-    if (!argv || !argv[0])
-        return FALSE;
-
-    success = g_spawn_async(NULL, argv, NULL, spawn_flags
-            , child_setup_async, NULL, &pid, error);
-    if (success)
-        *sound_active = TRUE;
-    g_child_watch_add(pid, child_watch_cb, sound_active);
-    g_strfreev(argv);
-
-    return success;
-}
-
 static void alarm_free_memory(alarm_struct *alarm)
 {
     if (!alarm->display_orage && !alarm->display_notify)
@@ -288,13 +248,10 @@
     GtkWidget *btOkReminder;
     GtkWidget *swReminder;
     GtkWidget *hdReminder;
-    char heading[250];
-    gchar *head2;
 
     wReminder = gtk_dialog_new();
     gtk_widget_set_size_request(wReminder, 300, 250);
-    strncpy(heading,  _("Reminder "), 199);
-    gtk_window_set_title(GTK_WINDOW(wReminder),  heading);
+    gtk_window_set_title(GTK_WINDOW(wReminder),  _("Reminder - Orage"));
     gtk_window_set_position(GTK_WINDOW(wReminder), GTK_WIN_POS_CENTER);
     gtk_window_set_modal(GTK_WINDOW(wReminder), FALSE);
     gtk_window_set_resizable(GTK_WINDOW(wReminder), TRUE);
@@ -302,10 +259,7 @@
 
     vbReminder = GTK_DIALOG(wReminder)->vbox;
 
-    strncat(heading, alarm->title->str, 50);
-    head2 = g_markup_escape_text(heading, -1);
-    hdReminder = xfce_create_header(NULL, head2);
-    g_free(head2);
+    hdReminder = gtk_label_new(alarm->title->str);
     gtk_box_pack_start(GTK_BOX(vbReminder), hdReminder, FALSE, TRUE, 0);
 
     swReminder = gtk_scrolled_window_new(NULL, NULL);

Modified: xfcalendar/trunk/src/tray_icon.c
===================================================================
--- xfcalendar/trunk/src/tray_icon.c	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/tray_icon.c	2007-10-01 21:18:33 UTC (rev 26125)
@@ -59,7 +59,7 @@
     t = orage_localtime();
     orage_select_date(GTK_CALENDAR(xfcal->mCalendar), t->tm_year+1900
             , t->tm_mon, t->tm_mday);
-    el = create_el_win();
+    el = create_el_win(NULL);
 }
 
 void 
@@ -95,8 +95,10 @@
   orage_toggle_visible ();
 }
 
-GdkPixbuf *create_icon(CalWin *xfcal, gint x, gint y)
+GdkPixbuf *orage_create_icon(CalWin *xfcal, gboolean static_icon
+        , gint x, gint y)
 {
+  GtkIconTheme *icon_theme = NULL;
   GdkPixbuf *pixbuf;
   GdkPixmap *pic1;
   GdkGC *pic1_gc1, *pic1_gc2;
@@ -118,15 +120,31 @@
   gchar *day_sizes[] = {"xx-large", "x-large", "large", "medium"
                       , "small", "x-small", "xx-small", "END"};
 
+  if (static_icon) {
+      icon_theme = gtk_icon_theme_get_default();
+      pixbuf = gtk_icon_theme_load_icon(icon_theme, "xfcalendar", x
+              , GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+      return(pixbuf);
+  }
   if (x <= 12 || y <= 12) {
       orage_message("Too small icon size, using static icon\n");
+      icon_theme = gtk_icon_theme_get_default();
+      pixbuf = gtk_icon_theme_load_icon(icon_theme, "xfcalendar", 16
+              , GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+      /*
       pixbuf = xfce_themed_icon_load("xfcalendar", 16);
+      */
       return(pixbuf);
   }
   if (g_par.icon_size_x == 0 
   ||  g_par.icon_size_y == 0) { /* signal to use static icon */
       orage_message("Icon size set to zero, using static icon\n");
+      icon_theme = gtk_icon_theme_get_default();
+      pixbuf = gtk_icon_theme_load_icon(icon_theme, "xfcalendar", x
+              , GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+      /*
       pixbuf = xfce_themed_icon_load("xfcalendar", x);
+      */
       return(pixbuf);
   }
 
@@ -145,7 +163,10 @@
   color.green = green * (65535/255);
   color.blue = blue * (65535/255);
   color.pixel = (gulong)(red*65536 + green*256 + blue);
+  /*
   gdk_color_alloc(pic1_cmap, &color);
+  */
+  gdk_colormap_alloc_color(pic1_cmap, &color, FALSE, TRUE);
   gdk_gc_set_foreground(pic1_gc1, &color);
   gdk_draw_rectangle(pic1, pic1_gc1, TRUE, 0, 0, width, height);
   gdk_draw_rectangle(pic1, pic1_gc2, FALSE, 0, 0, width-1, height-1);
@@ -181,9 +202,9 @@
 
   /* month */
   if (strftime(month, 19, "%^b", t) == 0) {
-      g_warning("create_icon: strftime %^b failed");
+      g_warning("orage_create_icon: strftime %^b failed");
       if (strftime(month, 19, "%b", t) == 0) {
-          g_warning("create_icon: strftime %b failed");
+          g_warning("orage_create_icon: strftime %b failed");
           g_sprintf(month, "orage");
       }
   }
@@ -264,7 +285,7 @@
       pixbuf = xfce_themed_icon_load("xfcalendar", 16);
 
   if (pixbuf == NULL)
-      g_warning("create_icon: load failed\n");
+      g_warning("orage_create_icon: load failed\n");
 
   g_object_unref(pic1_gc1);
   g_object_unref(pic1_gc2);
@@ -354,7 +375,8 @@
    */
 
   /* pixbuf = xfce_themed_icon_load ("xfcalendar", 16); */
-  pixbuf = create_icon(xfcal, g_par.icon_size_x, g_par.icon_size_y);
+  pixbuf = orage_create_icon(xfcal, FALSE
+          , g_par.icon_size_x, g_par.icon_size_y);
   trayIcon = xfce_tray_icon_new_with_menu_from_pixbuf(trayMenu, pixbuf);
   g_object_ref(trayIcon);
   gtk_object_sink(GTK_OBJECT(trayIcon));

Modified: xfcalendar/trunk/src/tray_icon.h
===================================================================
--- xfcalendar/trunk/src/tray_icon.h	2007-10-01 19:21:50 UTC (rev 26124)
+++ xfcalendar/trunk/src/tray_icon.h	2007-10-01 21:18:33 UTC (rev 26125)
@@ -27,7 +27,8 @@
 #include "xfce_trayicon.h"
 #include "mainbox.h"
 
-GdkPixbuf *create_icon(CalWin *xfcal, gint x, gint y);
+GdkPixbuf *orage_create_icon(CalWin *xfcal, gboolean static_icon
+        , gint x, gint y);
 
 XfceTrayIcon *create_TrayIcon(CalWin *xfcal);
 



More information about the Xfce4-commits mailing list