[Xfce4-commits] r26494 - xfcalendar/trunk/src
Juha Kautto
juha at xfce.org
Wed Dec 19 00:31:14 CET 2007
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);
More information about the Xfce4-commits
mailing list