/* * e-cal-shell-view-actions.c * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with the program; if not, see * * * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * */ #include "e-cal-shell-view-private.h" static void action_calendar_copy_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellSidebar *cal_shell_sidebar; EShellWindow *shell_window; EShellView *shell_view; ESourceSelector *selector; ESource *source; shell_view = E_SHELL_VIEW (cal_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); cal_shell_sidebar = cal_shell_view->priv->cal_shell_sidebar; selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar); source = e_source_selector_peek_primary_selection (selector); g_return_if_fail (E_IS_SOURCE (source)); copy_source_dialog ( GTK_WINDOW (shell_window), source, E_CAL_SOURCE_TYPE_EVENT); } static void action_calendar_delete_cb (GtkAction *action, ECalShellView *cal_shell_view) { #if 0 ECalShellContent *cal_shell_content; ECalShellSidebar *cal_shell_sidebar; EShellWindow *shell_window; EShellView *shell_view; ECalendarView *calendar_view; GnomeCalendarViewType view_type; ECalModel *model; ESourceSelector *selector; ESourceGroup *source_group; ESourceList *source_list; ESource *source; gint response; gchar *uri; GError *error = NULL; shell_view = E_SHELL_VIEW (cal_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); cal_shell_content = cal_shell_content->priv->cal_shell_content; view_type = e_cal_shell_content_get_current_view (cal_shell_content); calendar_view = e_cal_shell_content_get_calendar_view ( cal_shell_content, view_type); model = e_calendar_view_get_model (calendar_view); cal_shell_sidebar = cal_shell_sidebar->priv->cal_shell_sidebar; selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar); source = e_source_selector_peek_primary_selection (selector); g_return_if_fail (E_IS_SOURCE (source)); /* Ask for confirmation. */ response = e_error_run ( GTK_WINDOW (shell_window), "calendar:prompt-delete-calendar", e_source_peek_name (source)); if (response != GTK_RESPONSE_YES) return; uri = e_source_get_uri (source); client = e_cal_model_get_client_for_uri (model, uri); if (client == NULL) client = e_cal_new_from_uri (uri, E_CAL_SOURCE_TYPE_EVENT); g_free (uri); g_return_if_fail (client != NULL); if (!e_cal_remove (client, &error)) { g_warning ("%s", error->message); g_error_free (error); return; } if (e_source_selector_source_is_selected (selector, source)) { e_cal_shell_sidebar_remove_source ( cal_shell_sidebar, source); e_source_selector_unselect_source (selector, source); } source_group = e_source_peek_group (source); e_source_group_remove_source (source_group, source); source_list = cal_shell_view->priv->source_list; if (!e_source_list_sync (source_list, &error)) { g_warning ("%s", error->message); g_error_free (error); } #endif } static void action_calendar_go_back_cb (GtkAction *action, ECalShellView *cal_shell_view) { #if 0 ECalShellContent *cal_shell_content; GnomeCalendar *calendar; cal_shell_content = cal_shell_view->priv->cal_shell_content; calendar = e_cal_shell_content_get_calendar (cal_shell_content); gnome_calendar_previous (calendar); #endif } static void action_calendar_go_forward_cb (GtkAction *action, ECalShellView *cal_shell_view) { #if 0 ECalShellContent *cal_shell_content; GnomeCalendar *calendar; cal_shell_content = cal_shell_view->priv->cal_shell_content; calendar = e_cal_shell_content_get_calendar (cal_shell_content); gnome_calendar_next (calendar); #endif } static void action_calendar_go_today_cb (GtkAction *action, ECalShellView *cal_shell_view) { #if 0 ECalShellContent *cal_shell_content; GnomeCalendar *calendar; cal_shell_content = cal_shell_view->priv->cal_shell_content; calendar = e_cal_shell_content_get_calendar (cal_shell_content); gnome_calendar_goto_today (calendar); #endif } static void action_calendar_jump_to_cb (GtkAction *action, ECalShellView *cal_shell_view) { #if 0 ECalShellContent *cal_shell_content; GnomeCalendar *calendar; cal_shell_content = cal_shell_view->priv->cal_shell_content; calendar = e_cal_shell_content_get_calendar (cal_shell_content); goto_dialog (calendar); #endif } static void action_calendar_new_cb (GtkAction *action, ECalShellView *cal_shell_view) { #if 0 EShellView *shell_view; EShellWindow *shell_window; shell_view = E_SHELL_VIEW (cal_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); calendar_setup_new_calendar (GTK_WINDOW (shell_window)); #endif } static void action_calendar_print_cb (GtkAction *action, ECalShellView *cal_shell_view) { #if 0 ECalShellContent *cal_shell_content; GnomeCalendar *calendar; GtkPrintOperationAction print_action; cal_shell_content = cal_shell_view->priv->cal_shell_content; calendar = e_cal_shell_content_get_calendar (cal_shell_content); print_action = GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG; if (gnome_calendar_get_view (calendar) == GNOME_CAL_LIST_VIEW) { ECalListView *list_view; GtkWidget *widget; ETable *table; widget = gnome_calendar_get_current_view_widget (calendar); list_view = E_CAL_LIST_VIEW (widget); table = e_table_scrolled_get_table (list_view->table_scrolled); print_table (table, _("Print"), _("Calendar"), action); } else { time_t start; gnome_calendar_get_current_time_range (calendar, &start, NULL); print_calendar (calendar, action, start); } #endif } static void action_calendar_print_preview_cb (GtkAction *action, ECalShellView *cal_shell_view) { #if 0 ECalShellContent *cal_shell_content; GnomeCalendar *calendar; GtkPrintOperationAction print_action; cal_shell_content = cal_shell_view->priv->cal_shell_content; calendar = e_cal_shell_content_get_calendar (cal_shell_content); print_action = GTK_PRINT_OPERATION_ACTION_PREVIEW; if (gnome_calendar_get_view (calendar) == GNOME_CAL_LIST_VIEW) { ECalListView *list_view; GtkWidget *widget; ETable *table; widget = gnome_calendar_get_current_view_widget (calendar); list_view = E_CAL_LIST_VIEW (widget); table = e_table_scrolled_get_table (list_view->table_scrolled); print_table (table, _("Print"), _("Calendar"), action); } else { time_t start; gnome_calendar_get_current_time_range (calendar, &start, NULL); print_calendar (calendar, action, start); } #endif } static void action_calendar_properties_cb (GtkAction *action, ECalShellView *cal_shell_view) { #if 0 ECalShellSidebar *cal_shell_sidebar; EShellView *shell_view; EShellWindow *shell_window; ESource *source; ESourceSelector *selector; shell_view = E_SHELL_VIEW (cal_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); cal_shell_sidebar = cal_shell_view->priv->cal_shell_sidebar; selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar); source = e_source_selector_peek_primary_selection (selector); g_return_if_fail (E_IS_SOURCE (source)); calendar_setup_edit_calendar (GTK_WINDOW (shell_window), source); #endif } static void action_calendar_purge_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_calendar_rename_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellSidebar *cal_shell_sidebar; ESourceSelector *selector; cal_shell_sidebar = cal_shell_view->priv->cal_shell_sidebar; selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar); e_source_selector_edit_primary_selection (selector); } static void action_calendar_search_cb (GtkRadioAction *action, GtkRadioAction *current, ECalShellView *cal_shell_view) { EShellView *shell_view; EShellContent *shell_content; const gchar *search_hint; /* XXX Figure out a way to handle this in EShellContent * instead of every shell view having to handle it. * The problem is EShellContent does not know what * the search option actions are for this view. It * would have to dig up the popup menu and retrieve * the action for each menu item. Seems messy. */ shell_view = E_SHELL_VIEW (cal_shell_view); shell_content = e_shell_view_get_shell_content (shell_view); search_hint = gtk_action_get_label (GTK_ACTION (current)); e_shell_content_set_search_hint (shell_content, search_hint); } static void action_calendar_select_one_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellSidebar *cal_shell_sidebar; ESourceSelector *selector; ESource *primary; GSList *list, *iter; /* XXX ESourceSelector should provide a function for this. */ cal_shell_sidebar = cal_shell_view->priv->cal_shell_sidebar; selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar); primary = e_source_selector_peek_primary_selection (selector); g_return_if_fail (primary != NULL); list = e_source_selector_get_selection (selector); for (iter = list; iter != NULL; iter = iter->next) { ESource *source = iter->data; if (source == primary) continue; e_source_selector_unselect_source (selector, source); } e_source_selector_free_selection (list); e_source_selector_select_source (selector, primary); } static void action_calendar_view_cb (GtkRadioAction *action, GtkRadioAction *current, ECalShellView *cal_shell_view) { EShellView *shell_view; GnomeCalendarViewType view_type; const gchar *view_id; shell_view = E_SHELL_VIEW (cal_shell_view); view_type = gtk_radio_action_get_current_value (action); switch (view_type) { case GNOME_CAL_DAY_VIEW: view_id = "Day_View"; break; case GNOME_CAL_WORK_WEEK_VIEW: view_id = "Work_Week_View"; break; case GNOME_CAL_WEEK_VIEW: view_id = "Week_View"; break; case GNOME_CAL_MONTH_VIEW: view_id = "Month_View"; break; case GNOME_CAL_LIST_VIEW: view_id = "List_View"; break; default: g_return_if_reached (); } e_shell_view_set_view_id (shell_view, view_id); } static void action_event_all_day_new_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_clipboard_copy_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; cal_shell_content = cal_shell_view->priv->cal_shell_content; e_cal_shell_content_copy_clipboard (cal_shell_content); } static void action_event_clipboard_cut_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; cal_shell_content = cal_shell_view->priv->cal_shell_content; e_cal_shell_content_cut_clipboard (cal_shell_content); } static void action_event_clipboard_paste_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; cal_shell_content = cal_shell_view->priv->cal_shell_content; e_cal_shell_content_paste_clipboard (cal_shell_content); } static void action_event_copy_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_delegate_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_delete_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; cal_shell_content = cal_shell_view->priv->cal_shell_content; e_cal_shell_content_delete_selection (cal_shell_content); } static void action_event_delete_occurrence_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; cal_shell_content = cal_shell_view->priv->cal_shell_content; e_cal_shell_content_delete_selected_occurrence (cal_shell_content); } static void action_event_delete_occurrence_all_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; /* XXX Same as "event-delete". */ cal_shell_content = cal_shell_view->priv->cal_shell_content; e_cal_shell_content_delete_selection (cal_shell_content); } static void action_event_forward_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_meeting_new_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_move_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_new_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_occurrence_movable_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_open_cb (GtkAction *action, ECalShellView *cal_shell_view) { #if 0 ECalShellContent *cal_shell_content; GnomeCalendar *calendar; GtkWidget *widget; cal_shell_content = cal_shell_view->priv->cal_shell_content; calendar = e_cal_shell_content_get_calendar (cal_shell_content); widget = gnome_calendar_get_current_view_widget (calendar); e_calendar_view_open_event (E_CALENDAR_VIEW (widget)); #endif } static void action_event_print_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_reply_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_reply_all_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_save_as_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_event_schedule_cb (GtkAction *action, ECalShellView *cal_shell_view) { /* FIXME */ } static void action_gal_save_custom_view_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; EShellView *shell_view; GalViewInstance *view_instance; /* All shell views respond to the activation of this action, * which is defined by EShellWindow. But only the currently * active shell view proceeds with saving the custom view. */ shell_view = E_SHELL_VIEW (cal_shell_view); if (!e_shell_view_is_active (shell_view)) return; cal_shell_content = cal_shell_view->priv->cal_shell_content; view_instance = e_cal_shell_content_get_view_instance (cal_shell_content); gal_view_instance_save_as (view_instance); } static void action_search_execute_cb (GtkAction *action, ECalShellView *cal_shell_view) { EShellView *shell_view; /* All shell views respond to the activation of this action, * which is defined by EShellWindow. But only the currently * active shell view proceeds with executing the search. */ shell_view = E_SHELL_VIEW (cal_shell_view); if (!e_shell_view_is_active (shell_view)) return; e_cal_shell_view_execute_search (cal_shell_view); } static void action_search_filter_cb (GtkRadioAction *action, GtkRadioAction *current, ECalShellView *cal_shell_view) { EShellView *shell_view; EShellWindow *shell_window; shell_view = E_SHELL_VIEW (cal_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); gtk_action_activate (ACTION (SEARCH_EXECUTE)); } static GtkActionEntry calendar_entries[] = { { "calendar-copy", GTK_STOCK_COPY, N_("_Copy..."), NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_calendar_copy_cb) }, { "calendar-delete", GTK_STOCK_DELETE, NULL, NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_calendar_delete_cb) }, { "calendar-go-back", GTK_STOCK_GO_BACK, N_("Previous"), NULL, N_("Go Back"), G_CALLBACK (action_calendar_go_back_cb) }, { "calendar-go-forward", GTK_STOCK_GO_FORWARD, N_("Next"), NULL, N_("Go Forward"), G_CALLBACK (action_calendar_go_forward_cb) }, { "calendar-go-today", "go-today", N_("Select _Today"), "t", N_("Select today"), G_CALLBACK (action_calendar_go_today_cb) }, { "calendar-jump-to", GTK_STOCK_JUMP_TO, N_("Select _Date"), "g", N_("Select a specific date"), G_CALLBACK (action_calendar_jump_to_cb) }, { "calendar-new", "x-office-calendar", N_("_New Calendar"), NULL, N_("Create a new calendar"), G_CALLBACK (action_calendar_new_cb) }, { "calendar-properties", GTK_STOCK_PROPERTIES, NULL, NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_calendar_properties_cb) }, { "calendar-purge", NULL, N_("Purg_e"), "e", N_("Purge old appointments and meetings"), G_CALLBACK (action_calendar_purge_cb) }, { "calendar-rename", NULL, N_("_Rename..."), "F2", N_("Rename the selected calendar"), G_CALLBACK (action_calendar_rename_cb) }, { "calendar-select-one", "stock_check-filled", N_("Show _Only This Calendar"), NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_calendar_select_one_cb) }, { "event-clipboard-copy", GTK_STOCK_COPY, NULL, NULL, N_("Copy the selection"), G_CALLBACK (action_event_clipboard_copy_cb) }, { "event-clipboard-cut", GTK_STOCK_CUT, NULL, NULL, N_("Cut the selection"), G_CALLBACK (action_event_clipboard_cut_cb) }, { "event-clipboard-paste", GTK_STOCK_PASTE, NULL, NULL, N_("Paste the clipboard"), G_CALLBACK (action_event_clipboard_paste_cb) }, { "event-copy", NULL, N_("Cop_y to Calendar..."), NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_event_copy_cb) }, { "event-delegate", NULL, N_("_Delegate Meeting..."), NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_event_delegate_cb) }, { "event-delete", GTK_STOCK_DELETE, NULL, NULL, N_("Delete the appointment"), G_CALLBACK (action_event_delete_cb) }, { "event-delete-occurrence", GTK_STOCK_DELETE, N_("Delete This _Occurrence"), NULL, N_("Delete this occurrence"), G_CALLBACK (action_event_delete_occurrence_cb) }, { "event-delete-occurrence-all", GTK_STOCK_DELETE, N_("Delete _All Occurrences"), NULL, N_("Delete all occurrences"), G_CALLBACK (action_event_delete_occurrence_all_cb) }, { "event-all-day-new", NULL, N_("New All Day _Event..."), NULL, N_("Create a new all day event"), G_CALLBACK (action_event_all_day_new_cb) }, { "event-forward", "mail-forward", N_("_Forward as iCalendar..."), NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_event_forward_cb) }, { "event-meeting-new", NULL, N_("New _Meeting..."), NULL, N_("Create a new meeting"), G_CALLBACK (action_event_meeting_new_cb) }, { "event-move", NULL, N_("Mo_ve to Calendar..."), NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_event_move_cb) }, { "event-new", NULL, N_("New _Appointment..."), NULL, N_("Create a new appointment"), G_CALLBACK (action_event_new_cb) }, { "event-occurrence-movable", NULL, N_("Make this Occurrence _Movable"), NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_event_occurrence_movable_cb) }, { "event-open", NULL, N_("_Open Appointment"), "o", N_("View the current appointment"), G_CALLBACK (action_event_open_cb) }, { "event-reply", "mail-reply-sender", N_("_Reply"), NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_event_reply_cb) }, { "event-reply-all", "mail-reply-all", N_("Reply to _All"), NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_event_reply_all_cb) }, { "event-save-as", GTK_STOCK_SAVE_AS, NULL, NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_event_save_as_cb) }, { "event-schedule", NULL, N_("_Schedule Meeting..."), NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_event_schedule_cb) }, /*** Menus ***/ { "calendar-actions-menu", NULL, N_("_Actions"), NULL, NULL, NULL } }; static EPopupActionEntry calendar_popup_entries[] = { /* FIXME No equivalent main menu items for the any of the calendar * popup menu items and for many of the event popup menu items. * This is an accessibility issue. */ { "calendar-popup-copy", NULL, "calendar-copy" }, { "calendar-popup-delete", NULL, "calendar-delete" }, { "calendar-popup-go-today", NULL, "calendar-go-today" }, { "calendar-popup-jump-to", NULL, "calendar-jump-to" }, { "calendar-popup-properties", NULL, "calendar-properties" }, { "calendar-popup-rename", NULL, "calendar-rename" }, { "calendar-popup-select-one", NULL, "calendar-select-one" }, { "event-popup-clipboard-copy", NULL, "event-clipboard-copy" }, { "event-popup-clipboard-cut", NULL, "event-clipboard-cut" }, { "event-popup-clipboard-paste", NULL, "event-clipboard-paste" }, { "event-popup-copy", NULL, "event-copy" }, { "event-popup-delegate", NULL, "event-delegate" }, { "event-popup-delete", NULL, "event-delete" }, { "event-popup-delete-occurrence", NULL, "event-delete-occurrence" }, { "event-popup-delete-occurrence-all", NULL, "event-delete-occurrence-all" }, { "event-popup-forward", NULL, "event-forward" }, { "event-popup-move", NULL, "event-move" }, { "event-popup-occurrence-movable", NULL, "event-occurrence-movable" }, { "event-popup-open", NULL, "event-open" }, { "event-popup-reply", NULL, "event-reply" }, { "event-popup-reply-all", NULL, "event-reply-all" }, { "event-popup-save-as", NULL, "event-save-as" }, { "event-popup-schedule", NULL, "event-schedule" } }; static GtkRadioActionEntry calendar_view_entries[] = { { "calendar-view-day", "view-calendar-day", N_("Day"), NULL, N_("Show one day"), GNOME_CAL_DAY_VIEW }, { "calendar-view-list", "view-calendar-list", N_("List"), NULL, N_("Show as list"), GNOME_CAL_LIST_VIEW }, { "calendar-view-month", "view-calendar-month", N_("Month"), NULL, N_("Show one month"), GNOME_CAL_MONTH_VIEW }, { "calendar-view-week", "view-calendar-week", N_("Week"), NULL, N_("Show one week"), GNOME_CAL_WEEK_VIEW }, { "calendar-view-workweek", "view-calendar-workweek", N_("Work Week"), NULL, N_("Show one work week"), GNOME_CAL_WORK_WEEK_VIEW } }; static GtkRadioActionEntry calendar_filter_entries[] = { { "calendar-filter-active-appointments", NULL, N_("Active Appointements"), NULL, NULL, /* XXX Add a tooltip! */ CALENDAR_FILTER_ACTIVE_APPOINTMENTS }, { "calendar-filter-any-category", NULL, N_("Any Category"), NULL, NULL, /* XXX Add a tooltip! */ CALENDAR_FILTER_ANY_CATEGORY }, { "calendar-filter-next-7-days-appointments", NULL, N_("Next 7 Days' Appointments"), NULL, NULL, /* XXX Add a tooltip! */ CALENDAR_FILTER_NEXT_7_DAYS_APPOINTMENTS }, { "calendar-filter-unmatched", NULL, N_("Unmatched"), NULL, NULL, /* XXX Add a tooltip! */ CALENDAR_FILTER_UNMATCHED } }; static GtkRadioActionEntry calendar_search_entries[] = { { "calendar-search-any-field-contains", NULL, N_("Any field contains"), NULL, NULL, /* XXX Add a tooltip! */ CALENDAR_SEARCH_ANY_FIELD_CONTAINS }, { "calendar-search-description-contains", NULL, N_("Description contains"), NULL, NULL, /* XXX Add a tooltip! */ CALENDAR_SEARCH_DESCRIPTION_CONTAINS }, { "calendar-search-summary-contains", NULL, N_("Summary contains"), NULL, NULL, /* XXX Add a tooltip! */ CALENDAR_SEARCH_SUMMARY_CONTAINS } }; static GtkActionEntry lockdown_printing_entries[] = { { "calendar-print", GTK_STOCK_PRINT, NULL, "p", N_("Print this calendar"), G_CALLBACK (action_calendar_print_cb) }, { "calendar-print-preview", GTK_STOCK_PRINT_PREVIEW, NULL, NULL, N_("Preview the calendar to be printed"), G_CALLBACK (action_calendar_print_preview_cb) }, { "event-print", GTK_STOCK_PRINT, NULL, NULL, NULL, /* XXX Add a tooltip! */ G_CALLBACK (action_event_print_cb) } }; static EPopupActionEntry lockdown_printing_popup_entries[] = { { "event-popup-print", NULL, "event-print" } }; void e_cal_shell_view_actions_init (ECalShellView *cal_shell_view) { EShellView *shell_view; EShellWindow *shell_window; GtkActionGroup *action_group; GtkAction *action; shell_view = E_SHELL_VIEW (cal_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); /* Calendar Actions */ action_group = ACTION_GROUP (CALENDAR); gtk_action_group_add_actions ( action_group, calendar_entries, G_N_ELEMENTS (calendar_entries), cal_shell_view); e_action_group_add_popup_actions ( action_group, calendar_popup_entries, G_N_ELEMENTS (calendar_popup_entries)); gtk_action_group_add_radio_actions ( action_group, calendar_view_entries, G_N_ELEMENTS (calendar_view_entries), GNOME_CAL_DAY_VIEW, G_CALLBACK (action_calendar_view_cb), cal_shell_view); gtk_action_group_add_radio_actions ( action_group, calendar_search_entries, G_N_ELEMENTS (calendar_search_entries), CALENDAR_SEARCH_SUMMARY_CONTAINS, G_CALLBACK (action_calendar_search_cb), cal_shell_view); /* Lockdown Printing Actions */ action_group = ACTION_GROUP (LOCKDOWN_PRINTING); gtk_action_group_add_actions ( action_group, lockdown_printing_entries, G_N_ELEMENTS (lockdown_printing_entries), cal_shell_view); e_action_group_add_popup_actions ( action_group, lockdown_printing_popup_entries, G_N_ELEMENTS (lockdown_printing_popup_entries)); /* Fine tuning. */ action = ACTION (CALENDAR_GO_TODAY); g_object_set (action, "short-label", _("Today"), NULL); action = ACTION (CALENDAR_JUMP_TO); g_object_set (action, "short-label", _("Go To"), NULL); action = ACTION (EVENT_DELETE); g_object_set (action, "short-label", _("Delete"), NULL); g_signal_connect ( ACTION (GAL_SAVE_CUSTOM_VIEW), "activate", G_CALLBACK (action_gal_save_custom_view_cb), cal_shell_view); g_signal_connect ( ACTION (SEARCH_EXECUTE), "activate", G_CALLBACK (action_search_execute_cb), cal_shell_view); /* Initialize the memo and task pad actions. */ e_cal_shell_view_memopad_actions_init (cal_shell_view); e_cal_shell_view_taskpad_actions_init (cal_shell_view); } void e_cal_shell_view_update_search_filter (ECalShellView *cal_shell_view) { EShellContent *shell_content; EShellWindow *shell_window; EShellView *shell_view; GtkActionGroup *action_group; GtkRadioAction *radio_action; GList *list, *iter; GSList *group; gint ii; shell_view = E_SHELL_VIEW (cal_shell_view); shell_content = e_shell_view_get_shell_content (shell_view); shell_window = e_shell_view_get_shell_window (shell_view); action_group = ACTION_GROUP (CALENDAR_FILTER); e_action_group_remove_all_actions (action_group); /* Add the standard filter actions. */ gtk_action_group_add_radio_actions ( action_group, calendar_filter_entries, G_N_ELEMENTS (calendar_filter_entries), CALENDAR_FILTER_ANY_CATEGORY, G_CALLBACK (action_search_filter_cb), cal_shell_view); /* Retrieve the radio group from an action we just added. */ list = gtk_action_group_list_actions (action_group); radio_action = GTK_RADIO_ACTION (list->data); group = gtk_radio_action_get_group (radio_action); g_list_free (list); /* Build the category actions. */ list = e_categories_get_list (); for (iter = list, ii = 0; iter != NULL; iter = iter->next, ii++) { const gchar *category_name = iter->data; const gchar *filename; GtkAction *action; gchar *action_name; action_name = g_strdup_printf ( "calendar-filter-category-%d", ii); radio_action = gtk_radio_action_new ( action_name, category_name, NULL, NULL, ii); g_free (action_name); /* Convert the category icon file to a themed icon name. */ filename = e_categories_get_icon_file_for (category_name); if (filename != NULL && *filename != '\0') { gchar *basename; gchar *cp; basename = g_path_get_basename (filename); /* Lose the file extension. */ if ((cp = strrchr (basename, '.')) != NULL) *cp = '\0'; g_object_set ( radio_action, "icon-name", basename, NULL); g_free (basename); } gtk_radio_action_set_group (radio_action, group); group = gtk_radio_action_get_group (radio_action); /* The action group takes ownership of the action. */ action = GTK_ACTION (radio_action); gtk_action_group_add_action (action_group, action); g_object_unref (radio_action); } g_list_free (list); /* Use any action in the group; doesn't matter which. */ e_shell_content_set_filter_action (shell_content, radio_action); ii = CALENDAR_FILTER_UNMATCHED; e_shell_content_add_filter_separator_after (shell_content, ii); ii = CALENDAR_FILTER_NEXT_7_DAYS_APPOINTMENTS; e_shell_content_add_filter_separator_after (shell_content, ii); }