Author: juha
Date: 2007-12-18 23:31:14 +0000 (Tue, 18 Dec 2007)
New Revision: 26494

Modified:
   xfcalendar/trunk/src/appointment.h
   xfcalendar/trunk/src/day-view.c
   xfcalendar/trunk/src/day-view.h
   xfcalendar/trunk/src/event-list.c
   xfcalendar/trunk/src/event-list.h
   xfcalendar/trunk/src/functions.c
   xfcalendar/trunk/src/functions.h
Log:
day view improvments: added menus and toolbuttons
and made scrollbar to remember the position when changing day


Modified: xfcalendar/trunk/src/appointment.h
===================================================================
--- xfcalendar/trunk/src/appointment.h  2007-12-18 06:05:15 UTC (rev 26493)
+++ xfcalendar/trunk/src/appointment.h  2007-12-18 23:31:14 UTC (rev 26494)
@@ -29,16 +29,13 @@
 
 typedef struct _appt_win
 {
+    GtkAccelGroup *accel_group;
+    GtkTooltips *Tooltips;
+
     GtkWidget *Window;
     GtkWidget *Vbox;
 
     GtkWidget *Menubar;
-    GtkWidget *Revert;
-    GtkWidget *Delete;
-    GtkWidget *Duplicate;
-    GtkWidget *Save;
-    GtkWidget *SaveClose;
-
     GtkWidget *File_menu;
     GtkWidget *File_menu_save;
     GtkWidget *File_menu_saveclose;
@@ -48,6 +45,11 @@
     GtkWidget *File_menu_close;
 
     GtkWidget *Toolbar;
+    GtkWidget *Revert;
+    GtkWidget *Delete;
+    GtkWidget *Duplicate;
+    GtkWidget *Save;
+    GtkWidget *SaveClose;
 
     GtkWidget *Notebook;
     GtkWidget *General_notebook_page;
@@ -168,9 +170,6 @@
     GtkWidget *Recur_byday_spin_hbox;
     GtkWidget *Recur_byday_spin[7];  /* 0=Mo, 1=Tu ... 6=Su */
 
-    GtkAccelGroup *accel_group;
-    GtkTooltips *Tooltips;
-
     xfical_appt *appt;
     gchar *xf_uid;
     gchar *par;

Modified: xfcalendar/trunk/src/day-view.c
===================================================================
--- xfcalendar/trunk/src/day-view.c     2007-12-18 06:05:15 UTC (rev 26493)
+++ xfcalendar/trunk/src/day-view.c     2007-12-18 23:31:14 UTC (rev 26494)
@@ -28,6 +28,7 @@
 
 #include <glib.h>
 #include <glib/gprintf.h>
+#include <gdk/gdkkeysyms.h>
 #include <gdk/gdk.h>
 #include <gtk/gtk.h>
 
@@ -39,9 +40,37 @@
 #include "event-list.h"
 #include "appointment.h"
 
-void program_log (const char *format, ...);
+
 static void refresh_day_view_table(day_win *dw);
 
+static void set_scroll_position(day_win *dw)
+{
+    GtkAdjustment *v_adj;
+
+    v_adj = gtk_scrolled_window_get_vadjustment(
+            GTK_SCROLLED_WINDOW(dw->scroll_win));
+    if (dw->scroll_pos > 0) /* we have old value */
+        gtk_adjustment_set_value(v_adj, dw->scroll_pos);
+    else if (dw->scroll_pos < 0)
+        /* default: let's try to start roughly from line 8 = 8 o'clock */
+        gtk_adjustment_set_value(v_adj, v_adj->upper/3);
+}
+
+static gboolean scroll_position_timer(gpointer user_data)
+{
+    set_scroll_position((day_win *)user_data);
+    return(FALSE); /* only once */
+}
+
+static void get_scroll_position(day_win *dw)
+{
+    GtkAdjustment *v_adj;
+
+    v_adj = gtk_scrolled_window_get_vadjustment(
+            GTK_SCROLLED_WINDOW(dw->scroll_win));
+    dw->scroll_pos = gtk_adjustment_get_value(v_adj);
+}
+
 static GtkWidget *build_line(day_win *dw, gint left_x, gint top_y
         , gint width, gint height, GtkWidget *hour_line)
 {
@@ -103,36 +132,194 @@
     close_window((day_win *)user_data);
 }
 
+static void on_Close_clicked(GtkButton *b, gpointer user_data)
+{
+    close_window((day_win *)user_data);
+}
+
+static void create_new_appointment(day_win *dw)
+{
+    char *s_date, a_day[10];
+
+    s_date = (char *)gtk_button_get_label(GTK_BUTTON(dw->StartDate_button));
+    strcpy(a_day, orage_i18_date_to_icaltime(s_date));
+
+    create_appt_win("NEW", a_day, NULL);
+}
+
+static void on_File_newApp_activate_cb(GtkMenuItem *mi, gpointer user_data)
+{
+    create_new_appointment((day_win *)user_data);
+}
+
+static void on_Create_toolbutton_clicked_cb(GtkButton *mi, gpointer user_data)
+{
+    create_new_appointment((day_win *)user_data);
+}
+
+static void on_View_refresh_activate_cb(GtkMenuItem *mi, gpointer user_data)
+{
+    refresh_day_view_table((day_win *)user_data);
+}
+
+static void on_Refresh_clicked(GtkButton *b, gpointer user_data)
+{
+    refresh_day_view_table((day_win *)user_data);
+}
+
+static void changeSelectedDate(day_win *dw, gint day)
+{
+    struct tm tm_date;
+
+    tm_date = orage_i18_date_to_tm_date(
+            gtk_button_get_label(GTK_BUTTON(dw->StartDate_button)));
+    orage_move_day(&tm_date, day);
+    gtk_button_set_label(GTK_BUTTON(dw->StartDate_button)
+            , orage_tm_date_to_i18_date(&tm_date));
+    refresh_day_view_table(dw);
+}
+
+static void go_to_today(day_win *dw)
+{
+    gtk_button_set_label(GTK_BUTTON(dw->StartDate_button)
+            , orage_localdate_i18());
+    refresh_day_view_table(dw);
+}
+
+static void on_Today_clicked(GtkButton *b, gpointer user_data)
+{
+    go_to_today((day_win *)user_data);
+}
+
+static void on_Go_today_activate_cb(GtkMenuItem *mi, gpointer user_data)
+{
+    go_to_today((day_win *)user_data);
+}
+
+static void on_Go_previous_activate_cb(GtkMenuItem *mi, gpointer user_data)
+{
+    changeSelectedDate((day_win *)user_data, -1);
+}
+
+static void on_Previous_clicked(GtkButton *b, gpointer user_data)
+{
+    changeSelectedDate((day_win *)user_data, -1);
+}
+
+static void on_Go_next_activate_cb(GtkMenuItem *mi, gpointer user_data)
+{
+    changeSelectedDate((day_win *)user_data, 1);
+}
+
+static void on_Next_clicked(GtkButton *b, gpointer user_data)
+{
+    changeSelectedDate((day_win *)user_data, 1);
+}
+
 static void build_menu(day_win *dw)
 {
+    GtkWidget *menu_separator;
+
     dw->Menubar = gtk_menu_bar_new();
     gtk_box_pack_start(GTK_BOX(dw->Vbox), dw->Menubar, FALSE, FALSE, 0);
 
-    /* File menu */
+    /********** File menu **********/
     dw->File_menu = orage_menu_new(_("_File"), dw->Menubar);
+    dw->File_menu_new = orage_image_menu_item_new_from_stock("gtk-new"
+            , dw->File_menu, dw->accel_group);
+
+    menu_separator = orage_separator_menu_item_new(dw->File_menu);
+
     dw->File_menu_close = orage_image_menu_item_new_from_stock("gtk-close"
         , dw->File_menu, dw->accel_group);
 
+    /********** View menu **********/
+    dw->View_menu = orage_menu_new(_("_View"), dw->Menubar);
+    dw->View_menu_refresh = orage_image_menu_item_new_from_stock ("gtk-refresh"
+            , dw->View_menu, dw->accel_group);
+    gtk_widget_add_accelerator(dw->View_menu_refresh
+            , "activate", dw->accel_group
+            , GDK_r, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+    gtk_widget_add_accelerator(dw->View_menu_refresh
+            , "activate", dw->accel_group
+            , GDK_Return, 0, 0);
+    gtk_widget_add_accelerator(dw->View_menu_refresh
+            , "activate", dw->accel_group
+            , GDK_KP_Enter, 0, 0);
+
+    /********** Go menu   **********/
+    dw->Go_menu = orage_menu_new(_("_Go"), dw->Menubar);
+    dw->Go_menu_today = orage_image_menu_item_new_from_stock("gtk-home"
+            , dw->Go_menu, dw->accel_group);
+    gtk_widget_add_accelerator(dw->Go_menu_today
+            , "activate", dw->accel_group
+            , GDK_Home, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
+    dw->Go_menu_prev = orage_image_menu_item_new_from_stock("gtk-go-back"
+            , dw->Go_menu, dw->accel_group);
+    gtk_widget_add_accelerator(dw->Go_menu_prev
+            , "activate", dw->accel_group
+            , GDK_Left, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
+    dw->Go_menu_next = orage_image_menu_item_new_from_stock("gtk-go-forward"
+            , dw->Go_menu, dw->accel_group);
+    gtk_widget_add_accelerator(dw->Go_menu_next
+            , "activate", dw->accel_group
+            , GDK_Right, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
+
+    g_signal_connect((gpointer)dw->File_menu_new, "activate"
+            , G_CALLBACK(on_File_newApp_activate_cb), dw);
     g_signal_connect((gpointer)dw->File_menu_close, "activate"
-        , G_CALLBACK(on_File_close_activate_cb), dw);
+            , G_CALLBACK(on_File_close_activate_cb), dw);
+    g_signal_connect((gpointer)dw->View_menu_refresh, "activate"
+            , G_CALLBACK(on_View_refresh_activate_cb), dw);
+    g_signal_connect((gpointer)dw->Go_menu_today, "activate"
+            , G_CALLBACK(on_Go_today_activate_cb), dw);
+    g_signal_connect((gpointer)dw->Go_menu_prev, "activate"
+            , G_CALLBACK(on_Go_previous_activate_cb), dw);
+    g_signal_connect((gpointer)dw->Go_menu_next, "activate"
+            , G_CALLBACK(on_Go_next_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)
 {
+    GtkWidget *toolbar_separator;
     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->Create_toolbutton = orage_toolbar_append_button(dw->Toolbar
+            , "gtk-new", dw->Tooltips, _("New"), i++);
+
+    toolbar_separator = orage_toolbar_append_separator(dw->Toolbar, i++);
+
+    dw->Previous_toolbutton = orage_toolbar_append_button(dw->Toolbar
+            , "gtk-go-back", dw->Tooltips, _("Back"), i++);
+    dw->Today_toolbutton = orage_toolbar_append_button(dw->Toolbar
+            , "gtk-home", dw->Tooltips, _("Today"), i++);
+    dw->Next_toolbutton = orage_toolbar_append_button(dw->Toolbar
+            , "gtk-go-forward", dw->Tooltips, _("Forward"), i++);
+
+    toolbar_separator = orage_toolbar_append_separator(dw->Toolbar, i++);
+
+    dw->Refresh_toolbutton = orage_toolbar_append_button(dw->Toolbar
+            , "gtk-refresh", dw->Tooltips, _("Refresh"), i++);
+
+    toolbar_separator = orage_toolbar_append_separator(dw->Toolbar, i++);
+
     dw->Close_toolbutton = orage_toolbar_append_button(dw->Toolbar
-             , "gtk-close", dw->Tooltips, _("Close"), i++);
+            , "gtk-close", dw->Tooltips, _("Close"), i++);
 
+    g_signal_connect((gpointer)dw->Create_toolbutton, "clicked"
+            , G_CALLBACK(on_Create_toolbutton_clicked_cb), dw);
+    g_signal_connect((gpointer)dw->Previous_toolbutton, "clicked"
+            , G_CALLBACK(on_Previous_clicked), dw);
+    g_signal_connect((gpointer)dw->Today_toolbutton, "clicked"
+            , G_CALLBACK(on_Today_clicked), dw);
+    g_signal_connect((gpointer)dw->Next_toolbutton, "clicked"
+            , G_CALLBACK(on_Next_clicked), dw);
+    g_signal_connect((gpointer)dw->Refresh_toolbutton, "clicked"
+            , G_CALLBACK(on_Refresh_clicked), dw);
     g_signal_connect((gpointer)dw->Close_toolbutton, "clicked"
              , G_CALLBACK(on_Close_clicked), dw);
 }
@@ -189,7 +376,6 @@
 {
     gchar *uid;
 
-    g_print("pressed button %d\n", event->button);
     uid = g_object_get_data(G_OBJECT(widget), "UID");
     create_appt_win("UPDATE", uid, NULL);
 }
@@ -202,24 +388,12 @@
     gchar *text, *tip, *start_date, *end_date;
     GtkWidget *ev, *lab, *hb;
     struct tm tm_start, tm_end, tm_first;
-    /*
-    GDate *g_start, *g_end, *g_first;
-    */
 
     /* First clarify timings */
     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 
* /
-    */
     col = orage_days_between(&tm_first, &tm_start)+1;
     if (col < 1) {
         col = 1;
@@ -254,9 +428,6 @@
             hb = gtk_hbox_new(TRUE, 1);
         else
             hb = dw->element[row][col];
-        /*
-        if (g_date_days_between(g_start, g_end) == 0)
-        */
         if (orage_days_between(&tm_start, &tm_end) == 0)
             tip = g_strdup_printf("%s\n%02d:%02d-%02d:%02d\n%s"
                     , appt->title
@@ -301,17 +472,11 @@
         /*
          * same_date = !strncmp(start_ical_time, end_ical_time, 8);
          * */
-        /*
-        start_col = g_date_days_between(g_first, g_start)+1;
-        */
         start_col = orage_days_between(&tm_first, &tm_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;
-        */
         end_col   = orage_days_between(&tm_first, &tm_end)+1;
         if (end_col > days)
             last_col = days;
@@ -340,11 +505,6 @@
             }
         }
     }
-    /*
-    g_date_free(g_start);
-    g_date_free(g_end);
-    g_date_free(g_first);
-    */
 }
 
 static void app_rows(day_win *dw, char *a_day , xfical_type ical_type
@@ -672,26 +832,20 @@
     fill_days(dw, days);
 }
 
-static void set_scroll_position(day_win *dw)
-{
-    GtkAdjustment *v_adj;
-    
-    /* let's try to start roughly 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)
 {
     program_log("***** refresh_day_view_table started");
+    get_scroll_position(dw);
     gtk_widget_destroy(dw->scroll_win_h);
     program_log("***** refresh_day_view_table destroyed");
     build_day_view_table(dw);
     program_log("***** refresh_day_view_table built");
     gtk_widget_show_all(dw->scroll_win_h);
+    gtk_widget_show_now(dw->scroll_win_h);
     program_log("***** refresh_day_view_table showed");
-    set_scroll_position(dw);
+    /* I was not able to get this work without the timer. Ugly yes, but
+     * it works and does not hurt - much */
+    g_timeout_add(100, (GtkFunction)scroll_position_timer, (gpointer)dw);
     program_log("***** refresh_day_view_table done");
 }
 
@@ -702,6 +856,7 @@
     program_log("create_day_win started");
     /* initialisation + main window + base vbox */
     dw = g_new0(day_win, 1);
+    dw->scroll_pos = -1; /* not set */
     dw->Tooltips = gtk_tooltips_new();
     dw->accel_group = gtk_accel_group_new();
 

Modified: xfcalendar/trunk/src/day-view.h
===================================================================
--- xfcalendar/trunk/src/day-view.h     2007-12-18 06:05:15 UTC (rev 26493)
+++ xfcalendar/trunk/src/day-view.h     2007-12-18 23:31:14 UTC (rev 26494)
@@ -34,17 +34,29 @@
     GtkWidget *Window;
     GtkWidget *Vbox;
 
-    GtkWidget *StartDate_button;
-    GtkRequisition StartDate_button_req;
-    GtkWidget *day_spin;
-
     GtkWidget *Menubar;
     GtkWidget *File_menu;
+    GtkWidget *File_menu_new;
     GtkWidget *File_menu_close;
+    GtkWidget *View_menu;
+    GtkWidget *View_menu_refresh;
+    GtkWidget *Go_menu;
+    GtkWidget *Go_menu_today;
+    GtkWidget *Go_menu_prev;
+    GtkWidget *Go_menu_next;
 
     GtkWidget *Toolbar;
+    GtkWidget *Create_toolbutton;
+    GtkWidget *Previous_toolbutton;
+    GtkWidget *Today_toolbutton;
+    GtkWidget *Next_toolbutton;
+    GtkWidget *Refresh_toolbutton;
     GtkWidget *Close_toolbutton;
 
+    GtkWidget *StartDate_button;
+    GtkRequisition StartDate_button_req;
+    GtkWidget *day_spin;
+
     GtkWidget *day_view_vbox;
     GtkWidget *scroll_win_h;
     GtkWidget *dtable_h; /* header of day table */
@@ -57,6 +69,7 @@
     GtkWidget *line[24][MAX_DAYS];
 
     guint upd_timer;
+    gdouble scroll_pos; /* remember the scroll position */
 
     GdkColor bg1, bg2, line_color;
 } day_win;

Modified: xfcalendar/trunk/src/event-list.c
===================================================================
--- xfcalendar/trunk/src/event-list.c   2007-12-18 06:05:15 UTC (rev 26493)
+++ xfcalendar/trunk/src/event-list.c   2007-12-18 23:31:14 UTC (rev 26494)
@@ -64,13 +64,7 @@
 #include "day-view.h"
 
 
-/* Direction for changing day to look at */
 enum {
-    PREVIOUS,
-    NEXT
-};
-
-enum {
     COL_TIME = 0
    ,COL_FLAGS
    ,COL_HEAD
@@ -744,55 +738,26 @@
     refresh_el_win((el_win*)user_data);
 }
 
-static void changeSelectedDate(el_win *el, gint direction)
+static void changeSelectedDate(el_win *el, gint day)
 {
-    int year, month, day;
-    guint monthdays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-    char *title;
     struct tm tm_date;
 
-    title = (char *)gtk_window_get_title(GTK_WINDOW(el->Window));
-    tm_date = orage_i18_date_to_tm_date(title);
-    year = tm_date.tm_year + 1900;
-    month = tm_date.tm_mon; /* gtk calendar starts from 0  month */
-    day = tm_date.tm_mday;
-    if (((year%4) == 0) && (((year%100) != 0) || ((year%400) == 0)))
-        ++monthdays[1];
-
-    switch(direction) {
-        case PREVIOUS:
-            if (--day == 0) {
-                if (--month == -1) {
-                    --year;
-                    month = 11;
-                }
-                day = monthdays[month];
-            }
-        break;
-        case NEXT:
-            if (++day == (monthdays[month]+1)) {
-                if (++month == 12) {
-                    ++year;
-                    month = 0;
-                }
-                day = 1;
-            }
-        break;
-        default:
-        break;
-    }
-    orage_select_date(GTK_CALENDAR(g_par.xfcal->mCalendar), year, month, day);
+    tm_date = orage_i18_date_to_tm_date(
+            gtk_window_get_title(GTK_WINDOW(el->Window)));
+    orage_move_day(&tm_date, day);
+    orage_select_date(GTK_CALENDAR(g_par.xfcal->mCalendar)
+            , tm_date.tm_year + 1900, tm_date.tm_mon, tm_date.tm_mday);
     set_el_data_from_cal(el);
 }
 
 static void on_Previous_clicked(GtkButton *b, gpointer user_data)
 {
-    changeSelectedDate((el_win *)user_data, PREVIOUS);
+    changeSelectedDate((el_win *)user_data, -1);
 }
 
 static void on_Go_previous_activate_cb(GtkMenuItem *mi, gpointer user_data)
 {
-    changeSelectedDate((el_win *)user_data, PREVIOUS);
+    changeSelectedDate((el_win *)user_data, -1);
 }
 
 static void go_to_today(el_win *el)
@@ -813,12 +778,12 @@
 
 static void on_Next_clicked(GtkButton *b, gpointer user_data)
 {
-    changeSelectedDate((el_win *)user_data, NEXT);
+    changeSelectedDate((el_win *)user_data, 1);
 }
 
 static void on_Go_next_activate_cb(GtkMenuItem *mi, gpointer user_data)
 {
-    changeSelectedDate((el_win *)user_data, NEXT);
+    changeSelectedDate((el_win *)user_data, 1);
 }
 
 static void create_new_appointment(el_win *el)
@@ -954,14 +919,13 @@
     el->Menubar = gtk_menu_bar_new();
     gtk_box_pack_start(GTK_BOX(el->Vbox), el->Menubar, FALSE, FALSE, 0);
 
-    /* File menu */
+    /********** File menu **********/
     el->File_menu = orage_menu_new(_("_File"), el->Menubar);
     el->File_menu_new = orage_image_menu_item_new_from_stock("gtk-new"
             , el->File_menu, el->accel_group);
 
     menu_separator = orage_separator_menu_item_new(el->File_menu);
 
-    /* add event copying and day cleaning */
     el->File_menu_duplicate = orage_menu_item_new_with_mnemonic(_("D_uplicate")
             , el->File_menu);
     gtk_widget_add_accelerator(el->File_menu_duplicate
@@ -978,7 +942,7 @@
     el->File_menu_close = orage_image_menu_item_new_from_stock("gtk-close"
             , el->File_menu, el->accel_group);
 
-    /* View menu */
+    /********** View menu **********/
     el->View_menu = orage_menu_new(_("_View"), el->Menubar);
     el->View_menu_refresh = orage_image_menu_item_new_from_stock ("gtk-refresh"
             , el->View_menu, el->accel_group);
@@ -997,7 +961,7 @@
     el->View_menu_search = orage_image_menu_item_new_from_stock("gtk-find"
             , el->View_menu, el->accel_group);
 
-    /* Go menu   */
+    /********** Go menu   **********/
     el->Go_menu = orage_menu_new(_("_Go"), el->Menubar);
     el->Go_menu_today = orage_image_menu_item_new_from_stock("gtk-home"
             , el->Go_menu, el->accel_group);
@@ -1008,12 +972,12 @@
             , el->Go_menu, el->accel_group);
     gtk_widget_add_accelerator(el->Go_menu_prev
             , "activate", el->accel_group
-            , GDK_b, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+            , GDK_Left, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
     el->Go_menu_next = orage_image_menu_item_new_from_stock("gtk-go-forward"
             , el->Go_menu, el->accel_group);
     gtk_widget_add_accelerator(el->Go_menu_next
             , "activate", el->accel_group
-            , GDK_f, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+            , GDK_Right, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
 
     g_signal_connect((gpointer)el->File_menu_new, "activate"
             , G_CALLBACK(on_File_newApp_activate_cb), el);
@@ -1021,8 +985,6 @@
             , G_CALLBACK(on_File_duplicate_activate_cb), el);
     g_signal_connect((gpointer)el->File_menu_delete, "activate"
             , G_CALLBACK(on_File_delete_activate_cb), el);
-    g_signal_connect((gpointer)el->File_menu_close, "activate"
-            , G_CALLBACK(on_File_close_activate_cb), el);
     g_signal_connect((gpointer)el->View_menu_refresh, "activate"
             , G_CALLBACK(on_View_refresh_activate_cb), el);
     g_signal_connect((gpointer)el->View_menu_search, "activate"
@@ -1033,6 +995,8 @@
             , G_CALLBACK(on_Go_previous_activate_cb), el);
     g_signal_connect((gpointer)el->Go_menu_next, "activate"
             , G_CALLBACK(on_Go_next_activate_cb), el);
+    g_signal_connect((gpointer)el->File_menu_close, "activate"
+            , G_CALLBACK(on_File_close_activate_cb), el);
 }
 
 static void build_toolbar(el_win *el)

Modified: xfcalendar/trunk/src/event-list.h
===================================================================
--- xfcalendar/trunk/src/event-list.h   2007-12-18 06:05:15 UTC (rev 26493)
+++ xfcalendar/trunk/src/event-list.h   2007-12-18 23:31:14 UTC (rev 26494)
@@ -37,6 +37,7 @@
 {
     GtkAccelGroup *accel_group;
     GtkTooltips   *Tooltips;
+
     GtkWidget *Window;
     GtkWidget *Vbox;
 

Modified: xfcalendar/trunk/src/functions.c
===================================================================
--- xfcalendar/trunk/src/functions.c    2007-12-18 06:05:15 UTC (rev 26493)
+++ xfcalendar/trunk/src/functions.c    2007-12-18 23:31:14 UTC (rev 26494)
@@ -409,6 +409,34 @@
     return(orage_tm_date_to_i18_date(t));
 }
 
+/* move one day forward or backward */
+void orage_move_day(struct tm *t, int day)
+{
+    guint monthdays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+
+    t->tm_year += 1900;
+    if (((t->tm_year%4) == 0) 
+    && (((t->tm_year%100) != 0) || ((t->tm_year%400) == 0)))
+        ++monthdays[1]; /* leap year, february has 29 days */
+
+    t->tm_mday += day; /* may be negative */
+    if (t->tm_mday == 0) { /*  we went to previous month */
+        if (--t->tm_mon == -1) { /* previous year */
+            --t->tm_year;
+            t->tm_mon = 11;
+        }
+        t->tm_mday = monthdays[t->tm_mon];
+    }
+    else if (t->tm_mday > (monthdays[t->tm_mon])) { /* next month */
+        if (++t->tm_mon == 12) {
+            ++t->tm_year;
+            t->tm_mon = 0;
+        }
+        t->tm_mday = 1;
+    }
+    t->tm_year -= 1900;
+}
+
 gint orage_days_between(struct tm *t1, struct tm *t2)
 {
     GDate *g_t1, *g_t2;

Modified: xfcalendar/trunk/src/functions.h
===================================================================
--- xfcalendar/trunk/src/functions.h    2007-12-18 06:05:15 UTC (rev 26493)
+++ xfcalendar/trunk/src/functions.h    2007-12-18 23:31:14 UTC (rev 26494)
@@ -66,6 +66,7 @@
 char *orage_i18_date_to_icaltime(const char *i18_date);
 char *orage_cal_to_i18_date(GtkCalendar *cal);
 char *orage_localdate_i18();
+void orage_move_day(struct tm *t, int day);
 gint orage_days_between(struct tm *t1, struct tm *t2);
 
 void orage_select_date(GtkCalendar *cal, guint year, guint month, guint day);

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to