diff options
-rw-r--r-- | calendar/ChangeLog | 20 | ||||
-rw-r--r-- | calendar/Makefile.am | 16 | ||||
-rw-r--r-- | calendar/calendar-conduit-control-applet.c | 215 | ||||
-rw-r--r-- | calendar/calendar-conduit-control-applet.desktop | 1 | ||||
-rw-r--r-- | calendar/calendar-conduit.c | 44 | ||||
-rw-r--r-- | calendar/calendar-conduit.h | 1 | ||||
-rw-r--r-- | calendar/calendar-pilot-sync.c | 11 | ||||
-rw-r--r-- | calendar/conduits/calendar/calendar-conduit-control-applet.c | 215 | ||||
-rw-r--r-- | calendar/conduits/calendar/calendar-conduit-control-applet.desktop | 1 | ||||
-rw-r--r-- | calendar/conduits/calendar/calendar-conduit.c | 44 | ||||
-rw-r--r-- | calendar/conduits/calendar/calendar-conduit.h | 1 | ||||
-rw-r--r-- | calendar/gnome-calendar-conduit.png | bin | 0 -> 3000 bytes | |||
-rw-r--r-- | calendar/gui/Makefile.am | 16 | ||||
-rw-r--r-- | calendar/gui/calendar-conduit-control-applet.c | 215 | ||||
-rw-r--r-- | calendar/gui/calendar-conduit-control-applet.desktop | 1 | ||||
-rw-r--r-- | calendar/gui/calendar-conduit.c | 44 | ||||
-rw-r--r-- | calendar/gui/calendar-conduit.h | 1 | ||||
-rw-r--r-- | calendar/gui/calendar-pilot-sync.c | 11 | ||||
-rw-r--r-- | calendar/gui/gnome-calendar-conduit.png | bin | 0 -> 3000 bytes |
19 files changed, 606 insertions, 251 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index c8d5d86c0e..efe9b8d37a 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,23 @@ +1999-11-04 Eskil Olsen <deity@eskil.dk> + + * Makefile.am: Uses the PISOCK_LIBDIR, for people with odd install + dirs for their pilot-link. Also install a pretty icon for the + calendar-conduit. + + * calendar-conduit-control-applet.c: Modfied the + try/revert/ok/cancel scheme to be more intuitive, also uses a + GtkOptionMenu for the possible sync methods. + + * calendar-conduit-control-applet.desktop: use the nice icon... + + * calendar-conduit.c: Ack, had to define debug_alarms and + alarm_default, otherwise they are undefined. Is gncal code messy + or is this considered a way of configuring the cal engine ? + Implemented delete_all syncabs methods. + + * calendar-pilot-sync.c: also had to declare debug_alarms and + alarm_defaults, just as ugly. + 1999-11-02 Russell Steinthal <rms39@columbia.edu> * prop.c: Add new alarm page to properties box diff --git a/calendar/Makefile.am b/calendar/Makefile.am index 4042368bff..f08b4df06a 100644 --- a/calendar/Makefile.am +++ b/calendar/Makefile.am @@ -114,7 +114,7 @@ LINK_FLAGS = \ ../libversit/libversit.la calendar_pilot_sync_LDADD = \ - $(PISOCK_LIBS) \ + $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ $(LINK_FLAGS) if HAVE_GNOME_PILOT @@ -139,7 +139,7 @@ libcalendar_conduit_la_LDFLAGS = \ libcalendar_conduit_la_LIBADD = \ ../libversit/libversit.la \ - $(PISOCK_LIBS) \ + $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ $(GNOME_LIBDIR) \ $(GNOME_LIBS) @@ -150,9 +150,8 @@ calendar_conduit_control_applet_LDADD = \ $(CAPPLET_LIBS) \ $(GNOME_LIBDIR) \ $(GNOME_CAPPLET_LIBS) \ - $(PISOCK_LIBS) \ + $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ $(GNOMEUI_LIBS) \ - $(PISOCK_LIBS) \ $(GNOME_PILOT_LIBS) \ $(INTLLIBS) @@ -180,9 +179,8 @@ calendar_conduit_control_applet_LDADD = \ # $(CAPPLET_LIBS) \ # $(GNOME_LIBDIR) \ # $(GNOME_CAPPLET_LIBS) \ -# $(PISOCK_LIBS) \ +# $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ # $(GNOMEUI_LIBS) \ -# $(PISOCK_LIBS) \ # $(GNOME_PILOT_LIBS) \ # $(INTLLIBS) endif @@ -205,7 +203,11 @@ EXTRA_DIST = \ bell.xpm \ recur.xpm \ $(idl_DATA) \ - $(gnorba_DATA) + $(gnorba_DATA) \ + gnome-calendar-conduit.png + +appicondir = $(datadir)/pixmaps +appicon_DATA = gnome-calendar-conduit.png Productivitydir = $(datadir)/gnome/apps/Applications diff --git a/calendar/calendar-conduit-control-applet.c b/calendar/calendar-conduit-control-applet.c index 57f4a07cc8..fb1aeeadd9 100644 --- a/calendar/calendar-conduit-control-applet.c +++ b/calendar/calendar-conduit-control-applet.c @@ -32,42 +32,68 @@ GtkWidget *dialogWindow=NULL; gboolean activated,org_activation_state; GnomePilotConduitMgmt *conduit; -static void doTrySettings(GtkWidget *widget, GCalConduitCfg *conduitCfg); -static void doRevertSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg); -static void doSaveSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg); - -static void readStateCfg(GtkWidget *w); -static void setStateCfg(GtkWidget *w); +static void doTrySettings(GtkWidget *widget, gpointer); +static void doRevertSettings(GtkWidget *widget, gpointer); +static void doSaveSettings(GtkWidget *widget, gpointer); +static void readStateCfg(GtkWidget *w,GCalConduitCfg *cfg); +static void setStateCfg(GtkWidget *w,GCalConduitCfg *cfg); +void about_cb (GtkWidget *, gpointer); GCalConduitCfg *origState = NULL; GCalConduitCfg *curState = NULL; gint pilotId; CORBA_Environment ev; +/* This array must be in the same order as enumerations + in GnomePilotConduitSyncType as they are used as index. + Custom type implies Disabled state. +*/ +static gchar* sync_options[] ={ N_("Disabled"), + N_("Synchronize"), + N_("Copy From Pilot"), + N_("Copy To Pilot"), + N_("Merge From Pilot"), + N_("Merge To Pilot")}; +#define SYNC_OPTIONS_COUNT 6 + +static void +setSettings(GCalConduitCfg* conduitCfg) +{ + if(conduitCfg->sync_type!=GnomePilotConduitSyncTypeCustom) + gpilotd_conduit_mgmt_enable(conduit,pilotId,conduitCfg->sync_type); + else + gpilotd_conduit_mgmt_disable(conduit,pilotId); + + gcalconduit_save_configuration(conduitCfg); +} + static void -doTrySettings(GtkWidget *widget, GCalConduitCfg *conduitCfg) +doTrySettings(GtkWidget *widget, gpointer whatever) { - readStateCfg(cfgStateWindow); - if(activated) - gpilotd_conduit_mgmt_enable(conduit,pilotId,GnomePilotConduitSyncTypeSynchronize); - else - gpilotd_conduit_mgmt_disable(conduit,pilotId); + readStateCfg(cfgStateWindow,curState); + setSettings(curState); } static void -doSaveSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg) +doSaveSettings(GtkWidget *widget, gpointer whatever) { - doTrySettings(widget, conduitCfg); - gcalconduit_save_configuration(conduitCfg); + doTrySettings(widget,whatever); } +static void +doCancelSettings(GtkWidget *widget, gpointer whatever) +{ + setSettings(origState); +} static void -doRevertSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg) +doRevertSettings(GtkWidget *widget, gpointer whatever) { - activated = org_activation_state; - setStateCfg(cfgStateWindow); + gcalconduit_destroy_configuration(curState); + curState = gcalconduit_dupe_configuration(origState); + setStateCfg(cfgStateWindow,curState); + setSettings(curState); } static void @@ -113,11 +139,11 @@ void about_cb (GtkWidget *widget, gpointer data) { GtkWidget *about; const gchar *authors[] = {_("Eskil Heyn Olsen <deity@eskil.dk>"),NULL}; - about = gnome_about_new(_("Gpilotd calendar conduit"), VERSION, - _("(C) 1998 the Free Software Foundation"), + about = gnome_about_new(_("GnomeCalendar Conduit"), VERSION, + _("(C) 1998"), authors, _("Configuration utility for the calendar conduit.\n"), - _("gnome-unknown.xpm")); + _("gnome-calendar-conduit.png")); gtk_widget_show (about); return; @@ -128,40 +154,73 @@ static void toggled_cb(GtkWidget *widget, gpointer data) { capplet_widget_state_changed(CAPPLET_WIDGET(capplet), TRUE); } -static GtkWidget -*createStateCfgWindow(void) +/* called by the sync_type GtkOptionMenu */ +static void +sync_action_selection(GtkMenuShell *widget, gpointer unused) { - GtkWidget *vbox, *table; - GtkWidget *entry, *label; - GtkWidget *button; - - vbox = gtk_vbox_new(FALSE, GNOME_PAD); - - table = gtk_table_new(2, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(table), 4); - gtk_table_set_col_spacings(GTK_TABLE(table), 10); - gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, GNOME_PAD); + if (!ignore_changes) { + capplet_widget_state_changed(CAPPLET_WIDGET (capplet), TRUE); + } +} - label = gtk_label_new(_("Enabled")); - gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1,2); +/* called by the sync_type GtkOptionMenu */ +static void +activate_sync_type(GtkMenuItem *widget, gpointer data) +{ + curState->sync_type = GPOINTER_TO_INT(data); + gtk_widget_set_sensitive(cfgOptionsWindow,curState->sync_type!=GnomePilotConduitSyncTypeCustom); + if(!ignore_changes) + capplet_widget_state_changed(CAPPLET_WIDGET(capplet), TRUE); +} - button = gtk_check_button_new(); - gtk_object_set_data(GTK_OBJECT(vbox), "conduit_on_off", button); - gtk_signal_connect(GTK_OBJECT(button), "toggled", - GTK_SIGNAL_FUNC(toggled_cb), - NULL); - gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 2, 1,2); +static GtkWidget +*createStateCfgWindow(void) +{ + GtkWidget *vbox, *table; + GtkWidget *label, *button; + GtkWidget *optionMenu,*menuItem; + GtkMenu *menu; + gint i; + + vbox = gtk_vbox_new(FALSE, GNOME_PAD); + + table = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, GNOME_PAD); + + label = gtk_label_new(_("Synchronize Action")); + gtk_box_pack_start(GTK_BOX(table), label, FALSE, FALSE, GNOME_PAD); + + optionMenu=gtk_option_menu_new(); + gtk_object_set_data(GTK_OBJECT(vbox), "conduit_state", optionMenu); + menu = GTK_MENU(gtk_menu_new()); + + for (i=0; i<SYNC_OPTIONS_COUNT;i++) { + sync_options[i]=_(sync_options[i]); + menuItem = gtk_menu_item_new_with_label(sync_options[i]); + gtk_widget_show(menuItem); + gtk_signal_connect(GTK_OBJECT(menuItem),"activate", + GTK_SIGNAL_FUNC(activate_sync_type), + GINT_TO_POINTER(i)); + gtk_menu_append(menu,menuItem); + } - return vbox; + gtk_option_menu_set_menu(GTK_OPTION_MENU(optionMenu),GTK_WIDGET(menu)); + gtk_signal_connect(GTK_OBJECT(menu), "selection-done", + GTK_SIGNAL_FUNC(sync_action_selection), + NULL); + + gtk_box_pack_start(GTK_BOX(table), optionMenu, FALSE, FALSE, 0); + + return vbox; } static void -setStateCfg(GtkWidget *cfg) +setStateCfg(GtkWidget *w,GCalConduitCfg *cfg) { GtkWidget *button; gchar num[40]; - - button = gtk_object_get_data(GTK_OBJECT(cfg), "conduit_on_off"); +/* + button = gtk_object_get_data(GTK_OBJECT(w), "conduit_on_off"); g_assert(button!=NULL); @@ -169,15 +228,16 @@ setStateCfg(GtkWidget *cfg) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),activated); gtk_widget_set_sensitive(cfgOptionsWindow,GTK_TOGGLE_BUTTON(button)->active); ignore_changes = FALSE; +*/ } static void -readStateCfg(GtkWidget *cfg) +readStateCfg(GtkWidget *w,GCalConduitCfg *cfg) { GtkWidget *button; - button = gtk_object_get_data(GTK_OBJECT(cfg), "conduit_on_off"); + button = gtk_object_get_data(GTK_OBJECT(w), "conduit_on_off"); g_assert(button!=NULL); @@ -187,44 +247,47 @@ readStateCfg(GtkWidget *cfg) static void pilot_capplet_setup(void) { - GtkWidget *frame, *table; + GtkWidget *frame, *table; - capplet = capplet_widget_new(); + capplet = capplet_widget_new(); - table = gtk_table_new(1, 2, FALSE); - gtk_container_border_width(GTK_CONTAINER(table), GNOME_PAD); - gtk_container_add(GTK_CONTAINER(capplet), table); + table = gtk_table_new(1, 2, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), GNOME_PAD); + gtk_container_add(GTK_CONTAINER(capplet), table); - frame = gtk_frame_new(_("Conduit state")); - gtk_container_border_width(GTK_CONTAINER(frame), GNOME_PAD_SMALL); - gtk_table_attach_defaults(GTK_TABLE(table), frame, 0, 1, 0, 1); - cfgStateWindow = createStateCfgWindow(); - gtk_container_add(GTK_CONTAINER(frame), cfgStateWindow); + frame = gtk_frame_new(_("Conduit state")); + gtk_container_border_width(GTK_CONTAINER(frame), GNOME_PAD_SMALL); + gtk_table_attach_defaults(GTK_TABLE(table), frame, 0, 1, 0, 1); + cfgStateWindow = createStateCfgWindow(); + gtk_container_add(GTK_CONTAINER(frame), cfgStateWindow); - gtk_signal_connect(GTK_OBJECT(capplet), "try", - GTK_SIGNAL_FUNC(doTrySettings), NULL); - gtk_signal_connect(GTK_OBJECT(capplet), "revert", - GTK_SIGNAL_FUNC(doRevertSettings), NULL); - gtk_signal_connect(GTK_OBJECT(capplet), "ok", - GTK_SIGNAL_FUNC(doSaveSettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "help", - GTK_SIGNAL_FUNC(about_cb), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "try", + GTK_SIGNAL_FUNC(doTrySettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "revert", + GTK_SIGNAL_FUNC(doRevertSettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "ok", + GTK_SIGNAL_FUNC(doSaveSettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "cancel", + GTK_SIGNAL_FUNC(doCancelSettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "help", + GTK_SIGNAL_FUNC(about_cb), NULL); - setStateCfg(cfgStateWindow); + setStateCfg(cfgStateWindow,curState); - gtk_widget_show_all(capplet); + gtk_widget_show_all(capplet); } -void run_error_dialog(gchar *mesg,...) { - char tmp[80]; - va_list ap; - - va_start(ap,mesg); - vsnprintf(tmp,79,mesg,ap); - dialogWindow = gnome_message_box_new(mesg,GNOME_MESSAGE_BOX_ERROR,GNOME_STOCK_BUTTON_OK,NULL); - gnome_dialog_run_and_close(GNOME_DIALOG(dialogWindow)); - va_end(ap); +static void +run_error_dialog(gchar *mesg,...) { + char tmp[80]; + va_list ap; + + va_start(ap,mesg); + vsnprintf(tmp,79,mesg,ap); + dialogWindow = gnome_message_box_new(mesg,GNOME_MESSAGE_BOX_ERROR,GNOME_STOCK_BUTTON_OK,NULL); + gnome_dialog_run_and_close(GNOME_DIALOG(dialogWindow)); + va_end(ap); } gint get_pilot_id_from_gpilotd() { diff --git a/calendar/calendar-conduit-control-applet.desktop b/calendar/calendar-conduit-control-applet.desktop index aaaa7bd2c8..43c429ef97 100644 --- a/calendar/calendar-conduit-control-applet.desktop +++ b/calendar/calendar-conduit-control-applet.desktop @@ -4,3 +4,4 @@ Comment=Configure the GnomeCal conduit Exec=calendar-conduit-control-applet --cap-id=1 Terminal=0 Type=Application +Icon=gnome-calendar-conduit.png diff --git a/calendar/calendar-conduit.c b/calendar/calendar-conduit.c index 400824186a..cd2c061023 100644 --- a/calendar/calendar-conduit.c +++ b/calendar/calendar-conduit.c @@ -30,6 +30,15 @@ #include "calendar-conduit.h" +int debug_alarms = 0; /* needed to satisfy some other part of gncal */ +/* Default values for alarms */ /* needed to satisfy some other part of gncal */ +CalendarAlarm alarm_defaults[4] = { + { ALARM_MAIL, 0, 15, ALARM_MINUTES }, + { ALARM_PROGRAM, 0, 15, ALARM_MINUTES }, + { ALARM_DISPLAY, 0, 15, ALARM_MINUTES }, + { ALARM_AUDIO, 0, 15, ALARM_MINUTES } +}; + GnomePilotConduit * conduit_get_gpilot_conduit (guint32); void conduit_destroy_gpilot_conduit (GnomePilotConduit*); void local_record_from_icalobject(GCalLocalRecord *local,iCalObject *obj); @@ -81,6 +90,7 @@ calendar_notify (time_t time, CalendarAlarm *which, void *data) static GList * get_calendar_objects(GnomePilotConduitStandardAbs *conduit, + gboolean *status, GCalConduitContext *ctxt) { GList *result; @@ -96,21 +106,25 @@ get_calendar_objects(GnomePilotConduitStandardAbs *conduit, INFO ("Object did not exist"); show_exception(&(ctxt->ev)); CORBA_exception_free(&(ctxt->ev)); + if(status!=NULL) (*status) = FALSE; return NULL; } else if(ctxt->ev._major != CORBA_NO_EXCEPTION) { WARN (_("Error while communicating with calendar server")); show_exception(&(ctxt->ev)); CORBA_exception_free(&(ctxt->ev)); + if(status!=NULL) (*status) = FALSE; return NULL; } + if(status!=NULL) (*status) = TRUE; if(uids->_length>0) { int i; for(i=0;i<uids->_length;i++) { result = g_list_prepend(result,g_strdup(uids->_buffer[i])); } - } else + } else { INFO ("No entries found"); + } CORBA_free(uids); @@ -705,7 +719,7 @@ iterate (GnomePilotConduitStandardAbs *conduit, if(*local==NULL) { LOG ("beginning iteration"); - events = get_calendar_objects(conduit,ctxt); + events = get_calendar_objects(conduit,NULL,ctxt); hest = 0; if(events!=NULL) { @@ -938,8 +952,32 @@ static gint delete_all (GnomePilotConduitStandardAbs *conduit, GCalConduitContext *ctxt) { - LOG ("entering delete_all"); + GList *events,*it; + gboolean error; + events = get_calendar_objects(conduit,&error,ctxt); + + if (error == FALSE) return -1; + for (it=events;it;it = g_slist_next(it)) { + GNOME_Calendar_Repository_delete_object(ctxt->calendar, + it->data, + &(ctxt->ev)); + if (ctxt->ev._major == CORBA_USER_EXCEPTION){ + INFO ("Object did not exist"); + show_exception(&(ctxt->ev)); + CORBA_exception_free(&(ctxt->ev)); + } else if(ctxt->ev._major != CORBA_NO_EXCEPTION) { + WARN (_("Error while communicating with calendar server")); + show_exception(&(ctxt->ev)); + CORBA_exception_free(&(ctxt->ev)); + /* destroy loop, free data */ + for (it=events;it;it = g_slist_next(it)) g_free(it->data); + g_slist_free(events); + return -1; + } + g_free(it->data); + } + g_slist_free(events); return -1; } diff --git a/calendar/calendar-conduit.h b/calendar/calendar-conduit.h index cee7d3386e..2ebf453e7e 100644 --- a/calendar/calendar-conduit.h +++ b/calendar/calendar-conduit.h @@ -37,6 +37,7 @@ typedef struct _GCalConduitCfg GCalConduitCfg; struct _GCalConduitCfg { gboolean open_secret; guint32 pilotId; + GnomePilotConduitSyncType sync_type; /* only used by capplet */ }; #define GET_GCALCONFIG(c) ((GCalConduitCfg*)gtk_object_get_data(GTK_OBJECT(c),"gcalconduit_cfg")) diff --git a/calendar/calendar-pilot-sync.c b/calendar/calendar-pilot-sync.c index f4bc821500..a98ff9b49b 100644 --- a/calendar/calendar-pilot-sync.c +++ b/calendar/calendar-pilot-sync.c @@ -37,9 +37,20 @@ struct pi_sockaddr addr; /* The Pilot DB identifier for DateBook */ int db; +/* If true, enable debug output for alarms */ +int debug_alarms = 0; + /* True if you want to dump the flags bits from the records */ int debug_attrs = 0; +/* Default values for alarms */ +CalendarAlarm alarm_defaults[4] = { + { ALARM_MAIL, 0, 15, ALARM_MINUTES }, + { ALARM_PROGRAM, 0, 15, ALARM_MINUTES }, + { ALARM_DISPLAY, 0, 15, ALARM_MINUTES }, + { ALARM_AUDIO, 0, 15, ALARM_MINUTES } +}; + int only_desktop_to_pilot = 0; int only_pilot_to_desktop = 0; diff --git a/calendar/conduits/calendar/calendar-conduit-control-applet.c b/calendar/conduits/calendar/calendar-conduit-control-applet.c index 57f4a07cc8..fb1aeeadd9 100644 --- a/calendar/conduits/calendar/calendar-conduit-control-applet.c +++ b/calendar/conduits/calendar/calendar-conduit-control-applet.c @@ -32,42 +32,68 @@ GtkWidget *dialogWindow=NULL; gboolean activated,org_activation_state; GnomePilotConduitMgmt *conduit; -static void doTrySettings(GtkWidget *widget, GCalConduitCfg *conduitCfg); -static void doRevertSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg); -static void doSaveSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg); - -static void readStateCfg(GtkWidget *w); -static void setStateCfg(GtkWidget *w); +static void doTrySettings(GtkWidget *widget, gpointer); +static void doRevertSettings(GtkWidget *widget, gpointer); +static void doSaveSettings(GtkWidget *widget, gpointer); +static void readStateCfg(GtkWidget *w,GCalConduitCfg *cfg); +static void setStateCfg(GtkWidget *w,GCalConduitCfg *cfg); +void about_cb (GtkWidget *, gpointer); GCalConduitCfg *origState = NULL; GCalConduitCfg *curState = NULL; gint pilotId; CORBA_Environment ev; +/* This array must be in the same order as enumerations + in GnomePilotConduitSyncType as they are used as index. + Custom type implies Disabled state. +*/ +static gchar* sync_options[] ={ N_("Disabled"), + N_("Synchronize"), + N_("Copy From Pilot"), + N_("Copy To Pilot"), + N_("Merge From Pilot"), + N_("Merge To Pilot")}; +#define SYNC_OPTIONS_COUNT 6 + +static void +setSettings(GCalConduitCfg* conduitCfg) +{ + if(conduitCfg->sync_type!=GnomePilotConduitSyncTypeCustom) + gpilotd_conduit_mgmt_enable(conduit,pilotId,conduitCfg->sync_type); + else + gpilotd_conduit_mgmt_disable(conduit,pilotId); + + gcalconduit_save_configuration(conduitCfg); +} + static void -doTrySettings(GtkWidget *widget, GCalConduitCfg *conduitCfg) +doTrySettings(GtkWidget *widget, gpointer whatever) { - readStateCfg(cfgStateWindow); - if(activated) - gpilotd_conduit_mgmt_enable(conduit,pilotId,GnomePilotConduitSyncTypeSynchronize); - else - gpilotd_conduit_mgmt_disable(conduit,pilotId); + readStateCfg(cfgStateWindow,curState); + setSettings(curState); } static void -doSaveSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg) +doSaveSettings(GtkWidget *widget, gpointer whatever) { - doTrySettings(widget, conduitCfg); - gcalconduit_save_configuration(conduitCfg); + doTrySettings(widget,whatever); } +static void +doCancelSettings(GtkWidget *widget, gpointer whatever) +{ + setSettings(origState); +} static void -doRevertSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg) +doRevertSettings(GtkWidget *widget, gpointer whatever) { - activated = org_activation_state; - setStateCfg(cfgStateWindow); + gcalconduit_destroy_configuration(curState); + curState = gcalconduit_dupe_configuration(origState); + setStateCfg(cfgStateWindow,curState); + setSettings(curState); } static void @@ -113,11 +139,11 @@ void about_cb (GtkWidget *widget, gpointer data) { GtkWidget *about; const gchar *authors[] = {_("Eskil Heyn Olsen <deity@eskil.dk>"),NULL}; - about = gnome_about_new(_("Gpilotd calendar conduit"), VERSION, - _("(C) 1998 the Free Software Foundation"), + about = gnome_about_new(_("GnomeCalendar Conduit"), VERSION, + _("(C) 1998"), authors, _("Configuration utility for the calendar conduit.\n"), - _("gnome-unknown.xpm")); + _("gnome-calendar-conduit.png")); gtk_widget_show (about); return; @@ -128,40 +154,73 @@ static void toggled_cb(GtkWidget *widget, gpointer data) { capplet_widget_state_changed(CAPPLET_WIDGET(capplet), TRUE); } -static GtkWidget -*createStateCfgWindow(void) +/* called by the sync_type GtkOptionMenu */ +static void +sync_action_selection(GtkMenuShell *widget, gpointer unused) { - GtkWidget *vbox, *table; - GtkWidget *entry, *label; - GtkWidget *button; - - vbox = gtk_vbox_new(FALSE, GNOME_PAD); - - table = gtk_table_new(2, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(table), 4); - gtk_table_set_col_spacings(GTK_TABLE(table), 10); - gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, GNOME_PAD); + if (!ignore_changes) { + capplet_widget_state_changed(CAPPLET_WIDGET (capplet), TRUE); + } +} - label = gtk_label_new(_("Enabled")); - gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1,2); +/* called by the sync_type GtkOptionMenu */ +static void +activate_sync_type(GtkMenuItem *widget, gpointer data) +{ + curState->sync_type = GPOINTER_TO_INT(data); + gtk_widget_set_sensitive(cfgOptionsWindow,curState->sync_type!=GnomePilotConduitSyncTypeCustom); + if(!ignore_changes) + capplet_widget_state_changed(CAPPLET_WIDGET(capplet), TRUE); +} - button = gtk_check_button_new(); - gtk_object_set_data(GTK_OBJECT(vbox), "conduit_on_off", button); - gtk_signal_connect(GTK_OBJECT(button), "toggled", - GTK_SIGNAL_FUNC(toggled_cb), - NULL); - gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 2, 1,2); +static GtkWidget +*createStateCfgWindow(void) +{ + GtkWidget *vbox, *table; + GtkWidget *label, *button; + GtkWidget *optionMenu,*menuItem; + GtkMenu *menu; + gint i; + + vbox = gtk_vbox_new(FALSE, GNOME_PAD); + + table = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, GNOME_PAD); + + label = gtk_label_new(_("Synchronize Action")); + gtk_box_pack_start(GTK_BOX(table), label, FALSE, FALSE, GNOME_PAD); + + optionMenu=gtk_option_menu_new(); + gtk_object_set_data(GTK_OBJECT(vbox), "conduit_state", optionMenu); + menu = GTK_MENU(gtk_menu_new()); + + for (i=0; i<SYNC_OPTIONS_COUNT;i++) { + sync_options[i]=_(sync_options[i]); + menuItem = gtk_menu_item_new_with_label(sync_options[i]); + gtk_widget_show(menuItem); + gtk_signal_connect(GTK_OBJECT(menuItem),"activate", + GTK_SIGNAL_FUNC(activate_sync_type), + GINT_TO_POINTER(i)); + gtk_menu_append(menu,menuItem); + } - return vbox; + gtk_option_menu_set_menu(GTK_OPTION_MENU(optionMenu),GTK_WIDGET(menu)); + gtk_signal_connect(GTK_OBJECT(menu), "selection-done", + GTK_SIGNAL_FUNC(sync_action_selection), + NULL); + + gtk_box_pack_start(GTK_BOX(table), optionMenu, FALSE, FALSE, 0); + + return vbox; } static void -setStateCfg(GtkWidget *cfg) +setStateCfg(GtkWidget *w,GCalConduitCfg *cfg) { GtkWidget *button; gchar num[40]; - - button = gtk_object_get_data(GTK_OBJECT(cfg), "conduit_on_off"); +/* + button = gtk_object_get_data(GTK_OBJECT(w), "conduit_on_off"); g_assert(button!=NULL); @@ -169,15 +228,16 @@ setStateCfg(GtkWidget *cfg) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),activated); gtk_widget_set_sensitive(cfgOptionsWindow,GTK_TOGGLE_BUTTON(button)->active); ignore_changes = FALSE; +*/ } static void -readStateCfg(GtkWidget *cfg) +readStateCfg(GtkWidget *w,GCalConduitCfg *cfg) { GtkWidget *button; - button = gtk_object_get_data(GTK_OBJECT(cfg), "conduit_on_off"); + button = gtk_object_get_data(GTK_OBJECT(w), "conduit_on_off"); g_assert(button!=NULL); @@ -187,44 +247,47 @@ readStateCfg(GtkWidget *cfg) static void pilot_capplet_setup(void) { - GtkWidget *frame, *table; + GtkWidget *frame, *table; - capplet = capplet_widget_new(); + capplet = capplet_widget_new(); - table = gtk_table_new(1, 2, FALSE); - gtk_container_border_width(GTK_CONTAINER(table), GNOME_PAD); - gtk_container_add(GTK_CONTAINER(capplet), table); + table = gtk_table_new(1, 2, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), GNOME_PAD); + gtk_container_add(GTK_CONTAINER(capplet), table); - frame = gtk_frame_new(_("Conduit state")); - gtk_container_border_width(GTK_CONTAINER(frame), GNOME_PAD_SMALL); - gtk_table_attach_defaults(GTK_TABLE(table), frame, 0, 1, 0, 1); - cfgStateWindow = createStateCfgWindow(); - gtk_container_add(GTK_CONTAINER(frame), cfgStateWindow); + frame = gtk_frame_new(_("Conduit state")); + gtk_container_border_width(GTK_CONTAINER(frame), GNOME_PAD_SMALL); + gtk_table_attach_defaults(GTK_TABLE(table), frame, 0, 1, 0, 1); + cfgStateWindow = createStateCfgWindow(); + gtk_container_add(GTK_CONTAINER(frame), cfgStateWindow); - gtk_signal_connect(GTK_OBJECT(capplet), "try", - GTK_SIGNAL_FUNC(doTrySettings), NULL); - gtk_signal_connect(GTK_OBJECT(capplet), "revert", - GTK_SIGNAL_FUNC(doRevertSettings), NULL); - gtk_signal_connect(GTK_OBJECT(capplet), "ok", - GTK_SIGNAL_FUNC(doSaveSettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "help", - GTK_SIGNAL_FUNC(about_cb), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "try", + GTK_SIGNAL_FUNC(doTrySettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "revert", + GTK_SIGNAL_FUNC(doRevertSettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "ok", + GTK_SIGNAL_FUNC(doSaveSettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "cancel", + GTK_SIGNAL_FUNC(doCancelSettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "help", + GTK_SIGNAL_FUNC(about_cb), NULL); - setStateCfg(cfgStateWindow); + setStateCfg(cfgStateWindow,curState); - gtk_widget_show_all(capplet); + gtk_widget_show_all(capplet); } -void run_error_dialog(gchar *mesg,...) { - char tmp[80]; - va_list ap; - - va_start(ap,mesg); - vsnprintf(tmp,79,mesg,ap); - dialogWindow = gnome_message_box_new(mesg,GNOME_MESSAGE_BOX_ERROR,GNOME_STOCK_BUTTON_OK,NULL); - gnome_dialog_run_and_close(GNOME_DIALOG(dialogWindow)); - va_end(ap); +static void +run_error_dialog(gchar *mesg,...) { + char tmp[80]; + va_list ap; + + va_start(ap,mesg); + vsnprintf(tmp,79,mesg,ap); + dialogWindow = gnome_message_box_new(mesg,GNOME_MESSAGE_BOX_ERROR,GNOME_STOCK_BUTTON_OK,NULL); + gnome_dialog_run_and_close(GNOME_DIALOG(dialogWindow)); + va_end(ap); } gint get_pilot_id_from_gpilotd() { diff --git a/calendar/conduits/calendar/calendar-conduit-control-applet.desktop b/calendar/conduits/calendar/calendar-conduit-control-applet.desktop index aaaa7bd2c8..43c429ef97 100644 --- a/calendar/conduits/calendar/calendar-conduit-control-applet.desktop +++ b/calendar/conduits/calendar/calendar-conduit-control-applet.desktop @@ -4,3 +4,4 @@ Comment=Configure the GnomeCal conduit Exec=calendar-conduit-control-applet --cap-id=1 Terminal=0 Type=Application +Icon=gnome-calendar-conduit.png diff --git a/calendar/conduits/calendar/calendar-conduit.c b/calendar/conduits/calendar/calendar-conduit.c index 400824186a..cd2c061023 100644 --- a/calendar/conduits/calendar/calendar-conduit.c +++ b/calendar/conduits/calendar/calendar-conduit.c @@ -30,6 +30,15 @@ #include "calendar-conduit.h" +int debug_alarms = 0; /* needed to satisfy some other part of gncal */ +/* Default values for alarms */ /* needed to satisfy some other part of gncal */ +CalendarAlarm alarm_defaults[4] = { + { ALARM_MAIL, 0, 15, ALARM_MINUTES }, + { ALARM_PROGRAM, 0, 15, ALARM_MINUTES }, + { ALARM_DISPLAY, 0, 15, ALARM_MINUTES }, + { ALARM_AUDIO, 0, 15, ALARM_MINUTES } +}; + GnomePilotConduit * conduit_get_gpilot_conduit (guint32); void conduit_destroy_gpilot_conduit (GnomePilotConduit*); void local_record_from_icalobject(GCalLocalRecord *local,iCalObject *obj); @@ -81,6 +90,7 @@ calendar_notify (time_t time, CalendarAlarm *which, void *data) static GList * get_calendar_objects(GnomePilotConduitStandardAbs *conduit, + gboolean *status, GCalConduitContext *ctxt) { GList *result; @@ -96,21 +106,25 @@ get_calendar_objects(GnomePilotConduitStandardAbs *conduit, INFO ("Object did not exist"); show_exception(&(ctxt->ev)); CORBA_exception_free(&(ctxt->ev)); + if(status!=NULL) (*status) = FALSE; return NULL; } else if(ctxt->ev._major != CORBA_NO_EXCEPTION) { WARN (_("Error while communicating with calendar server")); show_exception(&(ctxt->ev)); CORBA_exception_free(&(ctxt->ev)); + if(status!=NULL) (*status) = FALSE; return NULL; } + if(status!=NULL) (*status) = TRUE; if(uids->_length>0) { int i; for(i=0;i<uids->_length;i++) { result = g_list_prepend(result,g_strdup(uids->_buffer[i])); } - } else + } else { INFO ("No entries found"); + } CORBA_free(uids); @@ -705,7 +719,7 @@ iterate (GnomePilotConduitStandardAbs *conduit, if(*local==NULL) { LOG ("beginning iteration"); - events = get_calendar_objects(conduit,ctxt); + events = get_calendar_objects(conduit,NULL,ctxt); hest = 0; if(events!=NULL) { @@ -938,8 +952,32 @@ static gint delete_all (GnomePilotConduitStandardAbs *conduit, GCalConduitContext *ctxt) { - LOG ("entering delete_all"); + GList *events,*it; + gboolean error; + events = get_calendar_objects(conduit,&error,ctxt); + + if (error == FALSE) return -1; + for (it=events;it;it = g_slist_next(it)) { + GNOME_Calendar_Repository_delete_object(ctxt->calendar, + it->data, + &(ctxt->ev)); + if (ctxt->ev._major == CORBA_USER_EXCEPTION){ + INFO ("Object did not exist"); + show_exception(&(ctxt->ev)); + CORBA_exception_free(&(ctxt->ev)); + } else if(ctxt->ev._major != CORBA_NO_EXCEPTION) { + WARN (_("Error while communicating with calendar server")); + show_exception(&(ctxt->ev)); + CORBA_exception_free(&(ctxt->ev)); + /* destroy loop, free data */ + for (it=events;it;it = g_slist_next(it)) g_free(it->data); + g_slist_free(events); + return -1; + } + g_free(it->data); + } + g_slist_free(events); return -1; } diff --git a/calendar/conduits/calendar/calendar-conduit.h b/calendar/conduits/calendar/calendar-conduit.h index cee7d3386e..2ebf453e7e 100644 --- a/calendar/conduits/calendar/calendar-conduit.h +++ b/calendar/conduits/calendar/calendar-conduit.h @@ -37,6 +37,7 @@ typedef struct _GCalConduitCfg GCalConduitCfg; struct _GCalConduitCfg { gboolean open_secret; guint32 pilotId; + GnomePilotConduitSyncType sync_type; /* only used by capplet */ }; #define GET_GCALCONFIG(c) ((GCalConduitCfg*)gtk_object_get_data(GTK_OBJECT(c),"gcalconduit_cfg")) diff --git a/calendar/gnome-calendar-conduit.png b/calendar/gnome-calendar-conduit.png Binary files differnew file mode 100644 index 0000000000..e867ba90b2 --- /dev/null +++ b/calendar/gnome-calendar-conduit.png diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am index 4042368bff..f08b4df06a 100644 --- a/calendar/gui/Makefile.am +++ b/calendar/gui/Makefile.am @@ -114,7 +114,7 @@ LINK_FLAGS = \ ../libversit/libversit.la calendar_pilot_sync_LDADD = \ - $(PISOCK_LIBS) \ + $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ $(LINK_FLAGS) if HAVE_GNOME_PILOT @@ -139,7 +139,7 @@ libcalendar_conduit_la_LDFLAGS = \ libcalendar_conduit_la_LIBADD = \ ../libversit/libversit.la \ - $(PISOCK_LIBS) \ + $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ $(GNOME_LIBDIR) \ $(GNOME_LIBS) @@ -150,9 +150,8 @@ calendar_conduit_control_applet_LDADD = \ $(CAPPLET_LIBS) \ $(GNOME_LIBDIR) \ $(GNOME_CAPPLET_LIBS) \ - $(PISOCK_LIBS) \ + $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ $(GNOMEUI_LIBS) \ - $(PISOCK_LIBS) \ $(GNOME_PILOT_LIBS) \ $(INTLLIBS) @@ -180,9 +179,8 @@ calendar_conduit_control_applet_LDADD = \ # $(CAPPLET_LIBS) \ # $(GNOME_LIBDIR) \ # $(GNOME_CAPPLET_LIBS) \ -# $(PISOCK_LIBS) \ +# $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ # $(GNOMEUI_LIBS) \ -# $(PISOCK_LIBS) \ # $(GNOME_PILOT_LIBS) \ # $(INTLLIBS) endif @@ -205,7 +203,11 @@ EXTRA_DIST = \ bell.xpm \ recur.xpm \ $(idl_DATA) \ - $(gnorba_DATA) + $(gnorba_DATA) \ + gnome-calendar-conduit.png + +appicondir = $(datadir)/pixmaps +appicon_DATA = gnome-calendar-conduit.png Productivitydir = $(datadir)/gnome/apps/Applications diff --git a/calendar/gui/calendar-conduit-control-applet.c b/calendar/gui/calendar-conduit-control-applet.c index 57f4a07cc8..fb1aeeadd9 100644 --- a/calendar/gui/calendar-conduit-control-applet.c +++ b/calendar/gui/calendar-conduit-control-applet.c @@ -32,42 +32,68 @@ GtkWidget *dialogWindow=NULL; gboolean activated,org_activation_state; GnomePilotConduitMgmt *conduit; -static void doTrySettings(GtkWidget *widget, GCalConduitCfg *conduitCfg); -static void doRevertSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg); -static void doSaveSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg); - -static void readStateCfg(GtkWidget *w); -static void setStateCfg(GtkWidget *w); +static void doTrySettings(GtkWidget *widget, gpointer); +static void doRevertSettings(GtkWidget *widget, gpointer); +static void doSaveSettings(GtkWidget *widget, gpointer); +static void readStateCfg(GtkWidget *w,GCalConduitCfg *cfg); +static void setStateCfg(GtkWidget *w,GCalConduitCfg *cfg); +void about_cb (GtkWidget *, gpointer); GCalConduitCfg *origState = NULL; GCalConduitCfg *curState = NULL; gint pilotId; CORBA_Environment ev; +/* This array must be in the same order as enumerations + in GnomePilotConduitSyncType as they are used as index. + Custom type implies Disabled state. +*/ +static gchar* sync_options[] ={ N_("Disabled"), + N_("Synchronize"), + N_("Copy From Pilot"), + N_("Copy To Pilot"), + N_("Merge From Pilot"), + N_("Merge To Pilot")}; +#define SYNC_OPTIONS_COUNT 6 + +static void +setSettings(GCalConduitCfg* conduitCfg) +{ + if(conduitCfg->sync_type!=GnomePilotConduitSyncTypeCustom) + gpilotd_conduit_mgmt_enable(conduit,pilotId,conduitCfg->sync_type); + else + gpilotd_conduit_mgmt_disable(conduit,pilotId); + + gcalconduit_save_configuration(conduitCfg); +} + static void -doTrySettings(GtkWidget *widget, GCalConduitCfg *conduitCfg) +doTrySettings(GtkWidget *widget, gpointer whatever) { - readStateCfg(cfgStateWindow); - if(activated) - gpilotd_conduit_mgmt_enable(conduit,pilotId,GnomePilotConduitSyncTypeSynchronize); - else - gpilotd_conduit_mgmt_disable(conduit,pilotId); + readStateCfg(cfgStateWindow,curState); + setSettings(curState); } static void -doSaveSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg) +doSaveSettings(GtkWidget *widget, gpointer whatever) { - doTrySettings(widget, conduitCfg); - gcalconduit_save_configuration(conduitCfg); + doTrySettings(widget,whatever); } +static void +doCancelSettings(GtkWidget *widget, gpointer whatever) +{ + setSettings(origState); +} static void -doRevertSettings(GtkWidget *widget, GCalConduitCfg *conduitCfg) +doRevertSettings(GtkWidget *widget, gpointer whatever) { - activated = org_activation_state; - setStateCfg(cfgStateWindow); + gcalconduit_destroy_configuration(curState); + curState = gcalconduit_dupe_configuration(origState); + setStateCfg(cfgStateWindow,curState); + setSettings(curState); } static void @@ -113,11 +139,11 @@ void about_cb (GtkWidget *widget, gpointer data) { GtkWidget *about; const gchar *authors[] = {_("Eskil Heyn Olsen <deity@eskil.dk>"),NULL}; - about = gnome_about_new(_("Gpilotd calendar conduit"), VERSION, - _("(C) 1998 the Free Software Foundation"), + about = gnome_about_new(_("GnomeCalendar Conduit"), VERSION, + _("(C) 1998"), authors, _("Configuration utility for the calendar conduit.\n"), - _("gnome-unknown.xpm")); + _("gnome-calendar-conduit.png")); gtk_widget_show (about); return; @@ -128,40 +154,73 @@ static void toggled_cb(GtkWidget *widget, gpointer data) { capplet_widget_state_changed(CAPPLET_WIDGET(capplet), TRUE); } -static GtkWidget -*createStateCfgWindow(void) +/* called by the sync_type GtkOptionMenu */ +static void +sync_action_selection(GtkMenuShell *widget, gpointer unused) { - GtkWidget *vbox, *table; - GtkWidget *entry, *label; - GtkWidget *button; - - vbox = gtk_vbox_new(FALSE, GNOME_PAD); - - table = gtk_table_new(2, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(table), 4); - gtk_table_set_col_spacings(GTK_TABLE(table), 10); - gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, GNOME_PAD); + if (!ignore_changes) { + capplet_widget_state_changed(CAPPLET_WIDGET (capplet), TRUE); + } +} - label = gtk_label_new(_("Enabled")); - gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1,2); +/* called by the sync_type GtkOptionMenu */ +static void +activate_sync_type(GtkMenuItem *widget, gpointer data) +{ + curState->sync_type = GPOINTER_TO_INT(data); + gtk_widget_set_sensitive(cfgOptionsWindow,curState->sync_type!=GnomePilotConduitSyncTypeCustom); + if(!ignore_changes) + capplet_widget_state_changed(CAPPLET_WIDGET(capplet), TRUE); +} - button = gtk_check_button_new(); - gtk_object_set_data(GTK_OBJECT(vbox), "conduit_on_off", button); - gtk_signal_connect(GTK_OBJECT(button), "toggled", - GTK_SIGNAL_FUNC(toggled_cb), - NULL); - gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 2, 1,2); +static GtkWidget +*createStateCfgWindow(void) +{ + GtkWidget *vbox, *table; + GtkWidget *label, *button; + GtkWidget *optionMenu,*menuItem; + GtkMenu *menu; + gint i; + + vbox = gtk_vbox_new(FALSE, GNOME_PAD); + + table = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, GNOME_PAD); + + label = gtk_label_new(_("Synchronize Action")); + gtk_box_pack_start(GTK_BOX(table), label, FALSE, FALSE, GNOME_PAD); + + optionMenu=gtk_option_menu_new(); + gtk_object_set_data(GTK_OBJECT(vbox), "conduit_state", optionMenu); + menu = GTK_MENU(gtk_menu_new()); + + for (i=0; i<SYNC_OPTIONS_COUNT;i++) { + sync_options[i]=_(sync_options[i]); + menuItem = gtk_menu_item_new_with_label(sync_options[i]); + gtk_widget_show(menuItem); + gtk_signal_connect(GTK_OBJECT(menuItem),"activate", + GTK_SIGNAL_FUNC(activate_sync_type), + GINT_TO_POINTER(i)); + gtk_menu_append(menu,menuItem); + } - return vbox; + gtk_option_menu_set_menu(GTK_OPTION_MENU(optionMenu),GTK_WIDGET(menu)); + gtk_signal_connect(GTK_OBJECT(menu), "selection-done", + GTK_SIGNAL_FUNC(sync_action_selection), + NULL); + + gtk_box_pack_start(GTK_BOX(table), optionMenu, FALSE, FALSE, 0); + + return vbox; } static void -setStateCfg(GtkWidget *cfg) +setStateCfg(GtkWidget *w,GCalConduitCfg *cfg) { GtkWidget *button; gchar num[40]; - - button = gtk_object_get_data(GTK_OBJECT(cfg), "conduit_on_off"); +/* + button = gtk_object_get_data(GTK_OBJECT(w), "conduit_on_off"); g_assert(button!=NULL); @@ -169,15 +228,16 @@ setStateCfg(GtkWidget *cfg) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),activated); gtk_widget_set_sensitive(cfgOptionsWindow,GTK_TOGGLE_BUTTON(button)->active); ignore_changes = FALSE; +*/ } static void -readStateCfg(GtkWidget *cfg) +readStateCfg(GtkWidget *w,GCalConduitCfg *cfg) { GtkWidget *button; - button = gtk_object_get_data(GTK_OBJECT(cfg), "conduit_on_off"); + button = gtk_object_get_data(GTK_OBJECT(w), "conduit_on_off"); g_assert(button!=NULL); @@ -187,44 +247,47 @@ readStateCfg(GtkWidget *cfg) static void pilot_capplet_setup(void) { - GtkWidget *frame, *table; + GtkWidget *frame, *table; - capplet = capplet_widget_new(); + capplet = capplet_widget_new(); - table = gtk_table_new(1, 2, FALSE); - gtk_container_border_width(GTK_CONTAINER(table), GNOME_PAD); - gtk_container_add(GTK_CONTAINER(capplet), table); + table = gtk_table_new(1, 2, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), GNOME_PAD); + gtk_container_add(GTK_CONTAINER(capplet), table); - frame = gtk_frame_new(_("Conduit state")); - gtk_container_border_width(GTK_CONTAINER(frame), GNOME_PAD_SMALL); - gtk_table_attach_defaults(GTK_TABLE(table), frame, 0, 1, 0, 1); - cfgStateWindow = createStateCfgWindow(); - gtk_container_add(GTK_CONTAINER(frame), cfgStateWindow); + frame = gtk_frame_new(_("Conduit state")); + gtk_container_border_width(GTK_CONTAINER(frame), GNOME_PAD_SMALL); + gtk_table_attach_defaults(GTK_TABLE(table), frame, 0, 1, 0, 1); + cfgStateWindow = createStateCfgWindow(); + gtk_container_add(GTK_CONTAINER(frame), cfgStateWindow); - gtk_signal_connect(GTK_OBJECT(capplet), "try", - GTK_SIGNAL_FUNC(doTrySettings), NULL); - gtk_signal_connect(GTK_OBJECT(capplet), "revert", - GTK_SIGNAL_FUNC(doRevertSettings), NULL); - gtk_signal_connect(GTK_OBJECT(capplet), "ok", - GTK_SIGNAL_FUNC(doSaveSettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "help", - GTK_SIGNAL_FUNC(about_cb), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "try", + GTK_SIGNAL_FUNC(doTrySettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "revert", + GTK_SIGNAL_FUNC(doRevertSettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "ok", + GTK_SIGNAL_FUNC(doSaveSettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "cancel", + GTK_SIGNAL_FUNC(doCancelSettings), NULL); + gtk_signal_connect(GTK_OBJECT(capplet), "help", + GTK_SIGNAL_FUNC(about_cb), NULL); - setStateCfg(cfgStateWindow); + setStateCfg(cfgStateWindow,curState); - gtk_widget_show_all(capplet); + gtk_widget_show_all(capplet); } -void run_error_dialog(gchar *mesg,...) { - char tmp[80]; - va_list ap; - - va_start(ap,mesg); - vsnprintf(tmp,79,mesg,ap); - dialogWindow = gnome_message_box_new(mesg,GNOME_MESSAGE_BOX_ERROR,GNOME_STOCK_BUTTON_OK,NULL); - gnome_dialog_run_and_close(GNOME_DIALOG(dialogWindow)); - va_end(ap); +static void +run_error_dialog(gchar *mesg,...) { + char tmp[80]; + va_list ap; + + va_start(ap,mesg); + vsnprintf(tmp,79,mesg,ap); + dialogWindow = gnome_message_box_new(mesg,GNOME_MESSAGE_BOX_ERROR,GNOME_STOCK_BUTTON_OK,NULL); + gnome_dialog_run_and_close(GNOME_DIALOG(dialogWindow)); + va_end(ap); } gint get_pilot_id_from_gpilotd() { diff --git a/calendar/gui/calendar-conduit-control-applet.desktop b/calendar/gui/calendar-conduit-control-applet.desktop index aaaa7bd2c8..43c429ef97 100644 --- a/calendar/gui/calendar-conduit-control-applet.desktop +++ b/calendar/gui/calendar-conduit-control-applet.desktop @@ -4,3 +4,4 @@ Comment=Configure the GnomeCal conduit Exec=calendar-conduit-control-applet --cap-id=1 Terminal=0 Type=Application +Icon=gnome-calendar-conduit.png diff --git a/calendar/gui/calendar-conduit.c b/calendar/gui/calendar-conduit.c index 400824186a..cd2c061023 100644 --- a/calendar/gui/calendar-conduit.c +++ b/calendar/gui/calendar-conduit.c @@ -30,6 +30,15 @@ #include "calendar-conduit.h" +int debug_alarms = 0; /* needed to satisfy some other part of gncal */ +/* Default values for alarms */ /* needed to satisfy some other part of gncal */ +CalendarAlarm alarm_defaults[4] = { + { ALARM_MAIL, 0, 15, ALARM_MINUTES }, + { ALARM_PROGRAM, 0, 15, ALARM_MINUTES }, + { ALARM_DISPLAY, 0, 15, ALARM_MINUTES }, + { ALARM_AUDIO, 0, 15, ALARM_MINUTES } +}; + GnomePilotConduit * conduit_get_gpilot_conduit (guint32); void conduit_destroy_gpilot_conduit (GnomePilotConduit*); void local_record_from_icalobject(GCalLocalRecord *local,iCalObject *obj); @@ -81,6 +90,7 @@ calendar_notify (time_t time, CalendarAlarm *which, void *data) static GList * get_calendar_objects(GnomePilotConduitStandardAbs *conduit, + gboolean *status, GCalConduitContext *ctxt) { GList *result; @@ -96,21 +106,25 @@ get_calendar_objects(GnomePilotConduitStandardAbs *conduit, INFO ("Object did not exist"); show_exception(&(ctxt->ev)); CORBA_exception_free(&(ctxt->ev)); + if(status!=NULL) (*status) = FALSE; return NULL; } else if(ctxt->ev._major != CORBA_NO_EXCEPTION) { WARN (_("Error while communicating with calendar server")); show_exception(&(ctxt->ev)); CORBA_exception_free(&(ctxt->ev)); + if(status!=NULL) (*status) = FALSE; return NULL; } + if(status!=NULL) (*status) = TRUE; if(uids->_length>0) { int i; for(i=0;i<uids->_length;i++) { result = g_list_prepend(result,g_strdup(uids->_buffer[i])); } - } else + } else { INFO ("No entries found"); + } CORBA_free(uids); @@ -705,7 +719,7 @@ iterate (GnomePilotConduitStandardAbs *conduit, if(*local==NULL) { LOG ("beginning iteration"); - events = get_calendar_objects(conduit,ctxt); + events = get_calendar_objects(conduit,NULL,ctxt); hest = 0; if(events!=NULL) { @@ -938,8 +952,32 @@ static gint delete_all (GnomePilotConduitStandardAbs *conduit, GCalConduitContext *ctxt) { - LOG ("entering delete_all"); + GList *events,*it; + gboolean error; + events = get_calendar_objects(conduit,&error,ctxt); + + if (error == FALSE) return -1; + for (it=events;it;it = g_slist_next(it)) { + GNOME_Calendar_Repository_delete_object(ctxt->calendar, + it->data, + &(ctxt->ev)); + if (ctxt->ev._major == CORBA_USER_EXCEPTION){ + INFO ("Object did not exist"); + show_exception(&(ctxt->ev)); + CORBA_exception_free(&(ctxt->ev)); + } else if(ctxt->ev._major != CORBA_NO_EXCEPTION) { + WARN (_("Error while communicating with calendar server")); + show_exception(&(ctxt->ev)); + CORBA_exception_free(&(ctxt->ev)); + /* destroy loop, free data */ + for (it=events;it;it = g_slist_next(it)) g_free(it->data); + g_slist_free(events); + return -1; + } + g_free(it->data); + } + g_slist_free(events); return -1; } diff --git a/calendar/gui/calendar-conduit.h b/calendar/gui/calendar-conduit.h index cee7d3386e..2ebf453e7e 100644 --- a/calendar/gui/calendar-conduit.h +++ b/calendar/gui/calendar-conduit.h @@ -37,6 +37,7 @@ typedef struct _GCalConduitCfg GCalConduitCfg; struct _GCalConduitCfg { gboolean open_secret; guint32 pilotId; + GnomePilotConduitSyncType sync_type; /* only used by capplet */ }; #define GET_GCALCONFIG(c) ((GCalConduitCfg*)gtk_object_get_data(GTK_OBJECT(c),"gcalconduit_cfg")) diff --git a/calendar/gui/calendar-pilot-sync.c b/calendar/gui/calendar-pilot-sync.c index f4bc821500..a98ff9b49b 100644 --- a/calendar/gui/calendar-pilot-sync.c +++ b/calendar/gui/calendar-pilot-sync.c @@ -37,9 +37,20 @@ struct pi_sockaddr addr; /* The Pilot DB identifier for DateBook */ int db; +/* If true, enable debug output for alarms */ +int debug_alarms = 0; + /* True if you want to dump the flags bits from the records */ int debug_attrs = 0; +/* Default values for alarms */ +CalendarAlarm alarm_defaults[4] = { + { ALARM_MAIL, 0, 15, ALARM_MINUTES }, + { ALARM_PROGRAM, 0, 15, ALARM_MINUTES }, + { ALARM_DISPLAY, 0, 15, ALARM_MINUTES }, + { ALARM_AUDIO, 0, 15, ALARM_MINUTES } +}; + int only_desktop_to_pilot = 0; int only_pilot_to_desktop = 0; diff --git a/calendar/gui/gnome-calendar-conduit.png b/calendar/gui/gnome-calendar-conduit.png Binary files differnew file mode 100644 index 0000000000..e867ba90b2 --- /dev/null +++ b/calendar/gui/gnome-calendar-conduit.png |