Index: addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in,v
retrieving revision 1.25
diff -u -p -r1.25 GNOME_Evolution_Addressbook.server.in.in
--- addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in 5 Feb 2006 23:46:25 -0000 1.25
+++ addressbook/gui/component/GNOME_Evolution_Addressbook.server.in.in 12 Sep 2006 05:58:32 -0000
@@ -44,6 +44,8 @@
_value="Evolution Address Book component"/>
+
+
@@ -92,7 +94,9 @@
-
+
+
+
@@ -113,7 +117,9 @@
-
+
+
+
Index: addressbook/gui/component/addressbook-component.c
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/gui/component/addressbook-component.c,v
retrieving revision 1.147
diff -u -p -r1.147 addressbook-component.c
--- addressbook/gui/component/addressbook-component.c 17 Aug 2006 09:14:59 -0000 1.147
+++ addressbook/gui/component/addressbook-component.c 12 Sep 2006 05:58:32 -0000
@@ -215,7 +215,29 @@ impl__get_userCreatableItems (PortableSe
CORBA_Environment *ev)
{
GNOME_Evolution_CreatableItemTypeList *list = GNOME_Evolution_CreatableItemTypeList__alloc ();
+ GList *name=NULL, *verb=NULL, *accel=NULL, *ptr=NULL;
+ char *parse_filename=NULL;
+ char *accel_contact, *accel_book, *accel_list;
+ int index;
+ char *home = g_get_home_dir();
+ char *user_path = g_build_filename (home, ".evolution", "ui", NULL);
+ e_toolbar_copy_file ("evolution-uci.xml");
+ parse_filename = g_build_filename (user_path, "evolution-uci.xml", NULL);
+ e_xml_parse_shortcuts_file (parse_filename, &name, &verb, &accel);
+
+ ptr = g_list_find_custom (verb, "NewContact", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_contact = g_list_nth_data (accel, index);
+
+ ptr = g_list_find_custom (verb, "NewContactList", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_list = g_list_nth_data (accel, index);
+
+ ptr = g_list_find_custom (verb, "NewAddressbook", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_book = g_list_nth_data (accel, index);
+
list->_length = 3;
list->_maximum = list->_length;
list->_buffer = GNOME_Evolution_CreatableItemTypeList_allocbuf (list->_length);
@@ -226,7 +248,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[0].description = _("New Contact");
list->_buffer[0].menuDescription = _("_Contact");
list->_buffer[0].tooltip = _("Create a new contact");
- list->_buffer[0].menuShortcut = 'c';
+ list->_buffer[0].menuShortcut = accel_contact;
list->_buffer[0].iconName = "stock_contact";
list->_buffer[0].type = GNOME_Evolution_CREATABLE_OBJECT;
@@ -234,7 +256,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[1].description = _("New Contact List");
list->_buffer[1].menuDescription = _("Contact _List");
list->_buffer[1].tooltip = _("Create a new contact list");
- list->_buffer[1].menuShortcut = 'l';
+ list->_buffer[1].menuShortcut = accel_list;
list->_buffer[1].iconName = "stock_contact-list";
list->_buffer[1].type = GNOME_Evolution_CREATABLE_OBJECT;
@@ -242,7 +264,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[2].description = _("New Address Book");
list->_buffer[2].menuDescription = _("Address _Book");
list->_buffer[2].tooltip = _("Create a new address book");
- list->_buffer[2].menuShortcut = '\0';
+ list->_buffer[2].menuShortcut = accel_book;
list->_buffer[2].iconName = "stock_addressbook";
list->_buffer[2].type = GNOME_Evolution_CREATABLE_FOLDER;
Index: addressbook/gui/component/addressbook-view.c
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/gui/component/addressbook-view.c,v
retrieving revision 1.48
diff -u -p -r1.48 addressbook-view.c
--- addressbook/gui/component/addressbook-view.c 15 Jun 2006 09:59:54 -0000 1.48
+++ addressbook/gui/component/addressbook-view.c 12 Sep 2006 05:58:32 -0000
@@ -47,6 +47,10 @@
#include "misc/e-task-bar.h"
#include "misc/e-info-label.h"
+#include
+#include
+
+#include
#include "e-util/e-icon-factory.h"
#include "e-util/e-util-private.h"
@@ -656,9 +660,8 @@ control_activate (BonoboControl *con
bonobo_ui_component_freeze (uic, NULL);
- xmlfile = g_build_filename (EVOLUTION_UIDIR,
- "evolution-addressbook.xml",
- NULL);
+ xmlfile = e_toolbar_copy_file ("evolution-addressbook.xml");
+
bonobo_ui_util_set_ui (uic, PREFIX,
xmlfile,
"evolution-addressbook", NULL);
@@ -1333,7 +1336,9 @@ addressbook_view_init (AddressbookView *
gtk_widget_show (priv->info_widget);
priv->selector = e_source_selector_new (priv->source_list);
-
+ gtk_tree_view_set_enable_search ((GtkTreeView *)priv->selector,
+ gconf_client_get_bool (priv->gconf_client, "/apps/evolution/shell/view_defaults/side_bar_search", NULL));
+
g_signal_connect (priv->selector, "drag-motion", G_CALLBACK (selector_tree_drag_motion), view);
g_signal_connect (priv->selector, "drag-leave", G_CALLBACK (selector_tree_drag_leave), view);
g_signal_connect (priv->selector, "drag-drop", G_CALLBACK (selector_tree_drag_drop), view);
Index: calendar/gui/GNOME_Evolution_Calendar.server.in.in
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/GNOME_Evolution_Calendar.server.in.in,v
retrieving revision 1.20
diff -u -p -r1.20 GNOME_Evolution_Calendar.server.in.in
--- calendar/gui/GNOME_Evolution_Calendar.server.in.in 12 Jan 2006 15:08:40 -0000 1.20
+++ calendar/gui/GNOME_Evolution_Calendar.server.in.in 12 Sep 2006 05:58:33 -0000
@@ -40,6 +40,7 @@
+
@@ -60,6 +61,7 @@
+
@@ -80,6 +82,7 @@
+
@@ -111,7 +114,11 @@
-
+
+
+
+
+
@@ -124,6 +131,7 @@
+
Index: calendar/gui/calendar-commands.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/calendar-commands.c,v
retrieving revision 1.163
diff -u -p -r1.163 calendar-commands.c
--- calendar/gui/calendar-commands.c 30 Jan 2006 04:27:10 -0000 1.163
+++ calendar/gui/calendar-commands.c 12 Sep 2006 05:58:33 -0000
@@ -66,6 +66,7 @@
#include "e-util/e-icon-factory.h"
#include "e-util/e-util-private.h"
#include "e-cal-menu.h"
+#include "e-util/e-util.h"
/* Focusing information for the calendar view. We have to keep track of this
* ourselves because with Bonobo controls, we may get unpaired focus_out events.
@@ -649,9 +650,8 @@ calendar_control_activate (BonoboControl
bonobo_ui_component_freeze (uic, NULL);
- xmlfile = g_build_filename (EVOLUTION_UIDIR,
- "evolution-calendar.xml",
- NULL);
+ xmlfile = e_toolbar_copy_file ("evolution-calendar.xml");
+
bonobo_ui_util_set_ui (uic, PREFIX,
xmlfile,
"evolution-calendar",
Index: calendar/gui/calendar-component.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/calendar-component.c,v
retrieving revision 1.220
diff -u -p -r1.220 calendar-component.c
--- calendar/gui/calendar-component.c 22 Aug 2006 10:24:31 -0000 1.220
+++ calendar/gui/calendar-component.c 12 Sep 2006 05:58:33 -0000
@@ -1334,7 +1334,9 @@ create_component_view (CalendarComponent
e_source_selector_set_select_new ((ESourceSelector *)component_view->source_selector, TRUE);
a11y = gtk_widget_get_accessible (GTK_WIDGET (component_view->source_selector));
atk_object_set_name (a11y, _("Calendar Source Selector"));
-
+ gtk_tree_view_set_enable_search ((GtkTreeView *)component_view->source_selector,
+ calendar_config_get_side_bar_search());
+
g_signal_connect (component_view->source_selector, "drag-motion", G_CALLBACK (selector_tree_drag_motion),
calendar_component);
g_signal_connect (component_view->source_selector, "drag-leave", G_CALLBACK (selector_tree_drag_leave),
@@ -1533,7 +1535,33 @@ impl__get_userCreatableItems (PortableSe
CORBA_Environment *ev)
{
GNOME_Evolution_CreatableItemTypeList *list = GNOME_Evolution_CreatableItemTypeList__alloc ();
-
+ GList *name=NULL, *verb=NULL, *accel=NULL, *ptr=NULL;
+ char *parse_filename=NULL;
+ char *accel_cal, *accel_meet, *accel_app, *accel_allday;
+ int index;
+ char *home = g_get_home_dir();
+ char *user_path = g_build_filename (home, ".evolution", "ui", NULL);
+
+ e_toolbar_copy_file ("evolution-uci.xml");
+ parse_filename = g_build_filename (user_path, "evolution-uci.xml", NULL);
+ e_xml_parse_shortcuts_file (parse_filename, &name, &verb, &accel);
+
+ ptr = g_list_find_custom (verb, "NewAppointment", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_app = g_list_nth_data (accel, index);
+
+ ptr = g_list_find_custom (verb, "NewMeeting", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_meet = g_list_nth_data (accel, index);
+
+ ptr = g_list_find_custom (verb, "NewAllDayAppointment", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_allday = g_list_nth_data (accel, index);
+
+ ptr = g_list_find_custom (verb, "NewCalendar", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_cal = g_list_nth_data (accel, index);
+
list->_length = 4;
list->_maximum = list->_length;
list->_buffer = GNOME_Evolution_CreatableItemTypeList_allocbuf (list->_length);
@@ -1544,7 +1572,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[0].description = _("New appointment");
list->_buffer[0].menuDescription = _("_Appointment");
list->_buffer[0].tooltip = _("Create a new appointment");
- list->_buffer[0].menuShortcut = 'a';
+ list->_buffer[0].menuShortcut = accel_app;
list->_buffer[0].iconName = "stock_new-appointment";
list->_buffer[0].type = GNOME_Evolution_CREATABLE_OBJECT;
@@ -1552,7 +1580,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[1].description = _("New meeting");
list->_buffer[1].menuDescription = _("M_eeting");
list->_buffer[1].tooltip = _("Create a new meeting request");
- list->_buffer[1].menuShortcut = 'e';
+ list->_buffer[1].menuShortcut = accel_meet;
list->_buffer[1].iconName = "stock_new-meeting";
list->_buffer[1].type = GNOME_Evolution_CREATABLE_OBJECT;
@@ -1560,7 +1588,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[2].description = _("New all day appointment");
list->_buffer[2].menuDescription = _("All Day A_ppointment");
list->_buffer[2].tooltip = _("Create a new all-day appointment");
- list->_buffer[2].menuShortcut = '\0';
+ list->_buffer[2].menuShortcut = accel_allday;
list->_buffer[2].iconName = "stock_new-24h-appointment";
list->_buffer[2].type = GNOME_Evolution_CREATABLE_OBJECT;
@@ -1568,7 +1596,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[3].description = _("New calendar");
list->_buffer[3].menuDescription = _("Cale_ndar");
list->_buffer[3].tooltip = _("Create a new calendar");
- list->_buffer[3].menuShortcut = '\0';
+ list->_buffer[3].menuShortcut = accel_cal;
list->_buffer[3].iconName = "stock_calendar";
list->_buffer[3].type = GNOME_Evolution_CREATABLE_FOLDER;
Index: calendar/gui/calendar-config-keys.h
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/calendar-config-keys.h,v
retrieving revision 1.16
diff -u -p -r1.16 calendar-config-keys.h
--- calendar/gui/calendar-config-keys.h 17 Jul 2006 06:01:28 -0000 1.16
+++ calendar/gui/calendar-config-keys.h 12 Sep 2006 05:58:33 -0000
@@ -61,7 +61,7 @@ G_BEGIN_DECLS
#define CALENDAR_CONFIG_COMPRESS_WEEKEND CALENDAR_CONFIG_PREFIX "/display/compress_weekend"
#define CALENDAR_CONFIG_SHOW_EVENT_END CALENDAR_CONFIG_PREFIX "/display/show_event_end"
#define CALENDAR_CONFIG_WORKING_DAYS CALENDAR_CONFIG_PREFIX "/display/working_days"
-
+#define CALENDAR_CONFIG_SIDE_BAR_SEARCH "/apps/evolution/shell/view_defaults/side_bar_search"
/* Date navigator settings */
#define CALENDAR_CONFIG_DN_SHOW_WEEK_NUMBERS CALENDAR_CONFIG_PREFIX "/date_navigator/show_week_numbers"
Index: calendar/gui/calendar-config.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/calendar-config.c,v
retrieving revision 1.89
diff -u -p -r1.89 calendar-config.c
--- calendar/gui/calendar-config.c 17 Jul 2006 06:01:28 -0000 1.89
+++ calendar/gui/calendar-config.c 12 Sep 2006 05:58:33 -0000
@@ -1483,3 +1483,9 @@ calendar_config_get_dir_path (void)
return path;
}
+
+gboolean
+calendar_config_get_side_bar_search ()
+{
+ return gconf_client_get_bool (config, CALENDAR_CONFIG_SIDE_BAR_SEARCH, NULL);
+}
Index: calendar/gui/calendar-config.h
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/calendar-config.h,v
retrieving revision 1.48
diff -u -p -r1.48 calendar-config.h
--- calendar/gui/calendar-config.h 17 Jul 2006 06:01:28 -0000 1.48
+++ calendar/gui/calendar-config.h 12 Sep 2006 05:58:33 -0000
@@ -257,6 +257,7 @@ gboolean calendar_config_locale_support
void calendar_config_set_dir_path (const char *);
char * calendar_config_get_dir_path (void);
+gboolean calendar_config_get_side_bar_search ();
gboolean calendar_config_get_daylight_saving (void);
void calendar_config_set_daylight_saving (gboolean daylight_saving);
Index: calendar/gui/memos-component.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/memos-component.c,v
retrieving revision 1.10
diff -u -p -r1.10 memos-component.c
--- calendar/gui/memos-component.c 22 Aug 2006 17:21:40 -0000 1.10
+++ calendar/gui/memos-component.c 12 Sep 2006 05:58:33 -0000
@@ -981,7 +981,9 @@ create_component_view (MemosComponent *m
e_source_selector_set_select_new ((ESourceSelector *)component_view->source_selector, TRUE);
a11y = gtk_widget_get_accessible (GTK_WIDGET (component_view->source_selector));
atk_object_set_name (a11y, _("Memo Source Selector"));
-
+ gtk_tree_view_set_enable_search ((GtkTreeView *)component_view->source_selector,
+ calendar_config_get_side_bar_search());
+
g_signal_connect (component_view->source_selector, "drag-motion", G_CALLBACK (selector_tree_drag_motion),
memos_component);
g_signal_connect (component_view->source_selector, "drag-leave", G_CALLBACK (selector_tree_drag_leave),
@@ -1155,7 +1157,29 @@ impl__get_userCreatableItems (PortableSe
CORBA_Environment *ev)
{
GNOME_Evolution_CreatableItemTypeList *list = GNOME_Evolution_CreatableItemTypeList__alloc ();
-
+ GList *name=NULL, *verb=NULL, *accel=NULL, *ptr=NULL;
+ char *parse_filename=NULL;
+ char *accel_memo, *accel_smemo, *accel_list;
+ int index;
+ char *home = g_get_home_dir();
+ char *user_path = g_build_filename (home, ".evolution", "ui", NULL);
+
+ e_toolbar_copy_file ("evolution-uci.xml");
+ parse_filename = g_build_filename (user_path, "evolution-uci.xml", NULL);
+ e_xml_parse_shortcuts_file (parse_filename, &name, &verb, &accel);
+
+ ptr = g_list_find_custom (verb, "NewMemo", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_memo = g_list_nth_data (accel, index);
+
+ ptr = g_list_find_custom (verb, "NewSharedMemo", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_smemo = g_list_nth_data (accel, index);
+
+ ptr = g_list_find_custom (verb, "NewMemoList", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_list = g_list_nth_data (accel, index);
+
list->_length = 3;
list->_maximum = list->_length;
list->_buffer = GNOME_Evolution_CreatableItemTypeList_allocbuf (list->_length);
@@ -1166,7 +1190,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[0].description = _("New memo");
list->_buffer[0].menuDescription = _("Mem_o");
list->_buffer[0].tooltip = _("Create a new memo");
- list->_buffer[0].menuShortcut = 'o';
+ list->_buffer[0].menuShortcut = accel_memo;
list->_buffer[0].iconName = "stock_insert-note";
list->_buffer[0].type = GNOME_Evolution_CREATABLE_OBJECT;
@@ -1174,7 +1198,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[1].description = _("New shared memo");
list->_buffer[1].menuDescription = _("_Shared memo");
list->_buffer[1].tooltip = _("Create a shared new memo");
- list->_buffer[1].menuShortcut = 's';
+ list->_buffer[1].menuShortcut = accel_smemo;
list->_buffer[1].iconName = "stock_insert-note";
list->_buffer[1].type = GNOME_Evolution_CREATABLE_OBJECT;
@@ -1182,7 +1206,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[2].description = _("New memo list");
list->_buffer[2].menuDescription = _("Memo li_st");
list->_buffer[2].tooltip = _("Create a new memo list");
- list->_buffer[2].menuShortcut = '\0';
+ list->_buffer[2].menuShortcut = accel_list;
list->_buffer[2].iconName = "stock_notes";
list->_buffer[2].type = GNOME_Evolution_CREATABLE_FOLDER;
Index: calendar/gui/memos-control.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/memos-control.c,v
retrieving revision 1.2
diff -u -p -r1.2 memos-control.c
--- calendar/gui/memos-control.c 26 Nov 2005 02:31:50 -0000 1.2
+++ calendar/gui/memos-control.c 12 Sep 2006 05:58:33 -0000
@@ -213,9 +213,8 @@ memos_control_activate (BonoboControl *c
bonobo_ui_component_freeze (uic, NULL);
- xmlfile = g_build_filename (EVOLUTION_UIDIR,
- "evolution-memos.xml",
- NULL);
+ xmlfile = e_toolbar_copy_file ("evolution-memos.xml");
+
bonobo_ui_util_set_ui (uic, PREFIX,
xmlfile,
"evolution-memos",
Index: calendar/gui/tasks-component.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/tasks-component.c,v
retrieving revision 1.99
diff -u -p -r1.99 tasks-component.c
--- calendar/gui/tasks-component.c 8 Jul 2006 13:29:35 -0000 1.99
+++ calendar/gui/tasks-component.c 12 Sep 2006 05:58:34 -0000
@@ -985,7 +985,8 @@ create_component_view (TasksComponent *t
e_source_selector_set_select_new ((ESourceSelector *)component_view->source_selector, TRUE);
a11y = gtk_widget_get_accessible (GTK_WIDGET (component_view->source_selector));
atk_object_set_name (a11y, _("Task Source Selector"));
-
+ gtk_tree_view_set_enable_search ((GtkTreeView *)component_view->source_selector,
+ calendar_config_get_side_bar_search());
g_signal_connect (component_view->source_selector, "drag-motion", G_CALLBACK (selector_tree_drag_motion),
tasks_component);
g_signal_connect (component_view->source_selector, "drag-leave", G_CALLBACK (selector_tree_drag_leave),
@@ -1159,6 +1160,28 @@ impl__get_userCreatableItems (PortableSe
CORBA_Environment *ev)
{
GNOME_Evolution_CreatableItemTypeList *list = GNOME_Evolution_CreatableItemTypeList__alloc ();
+ GList *name=NULL, *verb=NULL, *accel=NULL, *ptr=NULL;
+ char *parse_filename=NULL;
+ char *accel_task, *accel_atask, *accel_list;
+ int index;
+ char *home = g_get_home_dir();
+ char *user_path = g_build_filename (home, ".evolution", "ui", NULL);
+
+ e_toolbar_copy_file ("evolution-uci.xml");
+ parse_filename = g_build_filename (user_path, "evolution-uci.xml", NULL);
+ e_xml_parse_shortcuts_file (parse_filename, &name, &verb, &accel);
+
+ ptr = g_list_find_custom (verb, "NewTask", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_task = g_list_nth_data (accel, index);
+
+ ptr = g_list_find_custom (verb, "NewAssignedTask", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_atask = g_list_nth_data (accel, index);
+
+ ptr = g_list_find_custom (verb, "NewTaskList", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_list = g_list_nth_data (accel, index);
list->_length = 3;
list->_maximum = list->_length;
@@ -1170,7 +1193,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[0].description = _("New task");
list->_buffer[0].menuDescription = _("_Task");
list->_buffer[0].tooltip = _("Create a new task");
- list->_buffer[0].menuShortcut = 't';
+ list->_buffer[0].menuShortcut = accel_task;
list->_buffer[0].iconName = "stock_task";
list->_buffer[0].type = GNOME_Evolution_CREATABLE_OBJECT;
@@ -1178,7 +1201,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[1].description = _("New assigned task");
list->_buffer[1].menuDescription = _("Assigne_d Task");
list->_buffer[1].tooltip = _("Create a new assigned task");
- list->_buffer[1].menuShortcut = '\0';
+ list->_buffer[1].menuShortcut = accel_atask;
list->_buffer[1].iconName = "stock_task";
list->_buffer[1].type = GNOME_Evolution_CREATABLE_OBJECT;
@@ -1186,7 +1209,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[2].description = _("New task list");
list->_buffer[2].menuDescription = _("Tas_k list");
list->_buffer[2].tooltip = _("Create a new task list");
- list->_buffer[2].menuShortcut = '\0';
+ list->_buffer[2].menuShortcut = accel_list;
list->_buffer[2].iconName = "stock_todo";
list->_buffer[2].type = GNOME_Evolution_CREATABLE_FOLDER;
Index: calendar/gui/tasks-control.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/tasks-control.c,v
retrieving revision 1.88
diff -u -p -r1.88 tasks-control.c
--- calendar/gui/tasks-control.c 10 Aug 2006 07:34:30 -0000 1.88
+++ calendar/gui/tasks-control.c 12 Sep 2006 05:58:34 -0000
@@ -59,6 +59,7 @@
#include "e-cal-menu.h"
#include "e-util/e-menu.h"
#include "itip-utils.h"
+#include "e-util/e-util.h"
#define FIXED_MARGIN .05
@@ -285,9 +286,8 @@ tasks_control_activate (BonoboControl *c
bonobo_ui_component_freeze (uic, NULL);
- xmlfile = g_build_filename (EVOLUTION_UIDIR,
- "evolution-tasks.xml",
- NULL);
+ xmlfile = e_toolbar_copy_file ("evolution-tasks.xml");
+
bonobo_ui_util_set_ui (uic, PREFIX,
xmlfile,
"evolution-tasks",
Index: e-util/e-util.c
===================================================================
RCS file: /cvs/gnome/evolution/e-util/e-util.c,v
retrieving revision 1.77
diff -u -p -r1.77 e-util.c
--- e-util/e-util.c 27 Aug 2006 11:55:06 -0000 1.77
+++ e-util/e-util.c 12 Sep 2006 05:58:35 -0000
@@ -605,6 +605,118 @@ e_create_directory (gchar *directory)
}
+static time_t
+get_tstamp (GSList *list, const char *file)
+{
+ time_t ftime=0;
+ int slen = strlen (file);
+
+ while (list) {
+ char* tsfile= (char *)list->data;
+
+ if (strncmp (file, tsfile, slen) == 0) {
+ char **substr = g_strsplit (tsfile, "=", 2);
+
+ ftime = atoi (substr[1]);
+ printf("%s(%d):%s: %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, substr[1]);
+ g_strfreev (substr);
+ break;
+ }
+ list = list->next;
+ }
+
+ printf("%s(%d):%s: returning time for %s = %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, file, ftime);
+
+ return ftime;
+
+}
+
+static void
+set_tstamp (GSList **plist, const char *file, time_t stime)
+{
+ GSList *tmp;
+ char * tfile=g_strdup_printf ("%s=%d", file, stime);
+ int slen = strlen (file);
+
+ tmp = *plist;
+
+ while (tmp) {
+ char* tsfile= tmp->data;
+
+
+ if (strncmp (file, tsfile, slen) == 0) {
+ g_free (tsfile);
+ tmp->data=tfile;
+
+ return;
+ }
+ tmp = tmp->next;
+ }
+
+ printf("%s(%d):%s: setting %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, stime);
+ *plist = g_slist_prepend (*plist, tfile);
+
+ return;
+}
+
+const char *
+e_toolbar_copy_file (const char * file)
+{
+ char *home = g_get_home_dir();
+ char *path = g_build_filename (home, ".evolution", "ui", NULL);
+ char *xmlfile, *contents = NULL, *tmp = NULL;
+ gsize length;
+ GError *err=NULL;
+ struct stat file_stat;
+ int ret;
+ GConfClient *gconf = gconf_client_get_default ();
+ time_t store_time;
+ GSList *list=NULL;
+ GList *name=NULL, *verb=NULL, *accl=NULL;
+ gboolean exists;
+ xmlfile = g_build_filename (path, file, NULL);
+
+ if (!g_file_test (path, G_FILE_TEST_IS_DIR)) {
+ if (g_mkdir (path, 0777))
+ g_warning ("Directory UI Was not created");
+ }
+
+ exists = g_file_test (xmlfile, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR);
+ tmp = g_build_filename (EVOLUTION_UIDIR, file, NULL);
+ ret = g_stat (tmp, &file_stat);
+ list = gconf_client_get_list (gconf, "/apps/evolution/shell/ui_timestamps", GCONF_VALUE_STRING, NULL);
+ store_time = get_tstamp (list, file);
+ printf("%s(%d):%s: %d %d %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, exists, store_time, file_stat.st_mtime);
+ if ( !exists|| store_time != file_stat.st_mtime) {
+
+ if (!exists && g_file_get_contents (tmp, &contents, &length, &err)) {
+ printf("%s(%d):%s: file doesnt exist\n", __FILE__, __LINE__, __PRETTY_FUNCTION__);
+ set_tstamp (&list, file, file_stat.st_mtime);
+ gconf_client_set_list (gconf, "/apps/evolution/shell/ui_timestamps", GCONF_VALUE_STRING, list, NULL);
+ if (!g_file_set_contents (xmlfile, contents, length, &err))
+ g_warning ("Cannot set the contents of file %s", file);
+ }
+ else if (exists) {
+ /* We have to overwrite with new file preserving the old prefs *sigh */
+ printf("%s(%d):%s: file exists\n", __FILE__, __LINE__, __PRETTY_FUNCTION__);
+ e_xml_parse_shortcuts_file (xmlfile, &name, &verb, &accl);
+ printf("%s(%d):%s: 2\n", __FILE__, __LINE__, __PRETTY_FUNCTION__);
+ e_xml_save_shortcuts_file (file, verb, accl, TRUE);
+ set_tstamp (&list, file, file_stat.st_mtime);
+ gconf_client_set_list (gconf, "/apps/evolution/shell/ui_timestamps", GCONF_VALUE_STRING, list, NULL);
+ }
+
+ }
+
+ g_slist_foreach (list, (GFunc)g_free, NULL);
+ g_free(path);
+ g_free(tmp);
+ g_object_unref (gconf);
+ return(xmlfile);
+}
+
+
+
/* Perform a binary search for key in base which has nmemb elements
of size bytes each. The comparisons are done by (*compare)(). */
void e_bsearch (const void *key,
Index: e-util/e-util.h
===================================================================
RCS file: /cvs/gnome/evolution/e-util/e-util.h,v
retrieving revision 1.63
diff -u -p -r1.63 e-util.h
--- e-util/e-util.h 24 Aug 2006 01:11:24 -0000 1.63
+++ e-util/e-util.h 12 Sep 2006 05:58:35 -0000
@@ -197,6 +197,7 @@ size_t e_utf8_strftime_fix_am_pm (cha
const char *fmt,
const struct tm *tm);
+const char * e_toolbar_copy_file (const char *file);
/* String to/from double conversion functions */
gdouble e_flexible_strtod (const gchar *nptr,
Index: e-util/e-xml-utils.c
===================================================================
RCS file: /cvs/gnome/evolution/e-util/e-xml-utils.c,v
retrieving revision 1.40
diff -u -p -r1.40 e-xml-utils.c
--- e-util/e-xml-utils.c 17 Dec 2005 16:50:36 -0000 1.40
+++ e-util/e-xml-utils.c 12 Sep 2006 05:58:35 -0000
@@ -39,6 +39,7 @@
#include
#include
#include
+#include
#include "e-i18n.h"
#include "e-util.h"
@@ -430,5 +431,468 @@ e_xml_get_translated_string_prop_by_name
g_free(combined_name);
return ret_val;
+}
+
+void
+toolbar_xml_parse_file ( const char *path, GList **name, GList **verb)
+{
+ xmlDocPtr doc = NULL;
+ xmlNodePtr root, scan, cur, iter;
+ char *tmp = NULL, *tmp1 = NULL, *status = NULL;
+
+ doc = e_xml_parse_file (path);
+ if (doc == NULL) {
+ g_warning("Error: file '%s' not found", path);
+ return;
+ }
+
+ root = xmlDocGetRootElement (doc);
+ if (root == NULL
+ || strcmp (root->name, "Root") != 0 ) {
+ g_warning ("Error: file '%s' Invalid format", path);
+ xmlFreeDoc (doc);
+ return;
+ }
+
+ cur = root->children;
+
+ for (scan = cur->next->children; scan; scan = scan->next) {
+ if (!strcmp (scan->name, "cmd")) {
+ status = xmlGetProp (scan, "ignore");
+ if ((status != NULL) && (!strcmp (status, "yes"))) {
+ continue;
+ }
+
+ tmp = xmlGetProp (scan, "_label");
+ if (tmp == NULL)
+ continue;
+ else {
+ *name = g_list_append ( *name, tmp);
+
+ tmp1 = xmlGetProp (scan, "name");
+ *verb = g_list_append ( *verb, tmp1);
+ }
+ }
+ if (!strcmp (scan->name, "placeholder")) {
+ for (iter = scan->children; iter; iter = iter->next) {
+ if (!strcmp (iter->name, "cmd")) {
+ tmp = xmlGetProp (iter, "_label");
+ if(tmp == NULL)
+ continue;
+ else {
+ *name = g_list_append ( *name, tmp);
+
+ tmp1 = xmlGetProp (iter, "name");
+ *verb = g_list_append ( *verb, tmp1);
+ }
+ }
+ }
+ }
+ }
+
+ xmlFreeDoc (doc);
+}
+
+void
+e_xml_parse_shortcuts_file ( const char *path, GList **name, GList **verb, GList **accel)
+{
+ xmlDocPtr doc = NULL;
+ xmlNodePtr root, scan, cur, iter;
+ char *tmp = NULL, *tmp1 = NULL, *status = NULL;
+
+ doc = e_xml_parse_file (path);
+ if (doc == NULL) {
+ g_warning("Error: file '%s' not found", path);
+ return;
+ }
+
+ root = xmlDocGetRootElement (doc);
+ if (root == NULL
+ || strcmp (root->name, "Root") != 0 ) {
+ g_warning ("Error: file '%s' Invalid format", path);
+ xmlFreeDoc (doc);
+ return;
+ }
+
+ cur = root->children;
+
+ for (scan = cur->next->children; scan; scan = scan->next) {
+ if (!strcmp (scan->name, "cmd")) {
+ char *ename;
+
+ ename = xmlGetProp (scan, "_editorlabel");
+ if (ename) {
+ *name = g_list_prepend ( *name, ename);
+ *verb = g_list_prepend ( *verb, xmlGetProp (scan, "name"));
+ *accel = g_list_prepend ( *accel, xmlGetProp(scan, "accel"));
+ }
+ }
+
+ }
+
+ xmlFreeDoc (doc);
+}
+
+
+void
+get_placeholders (const char *path, GList **verb, GList **place)
+{
+ xmlDocPtr doc = NULL;
+ xmlNodePtr root, scan, cur, iter;
+ char *tmp = NULL, *tmp1 = NULL, *status = NULL;
+
+ doc = e_xml_parse_file (path);
+ if (doc == NULL) {
+ g_warning("Error: file '%s' not found", path);
+ return;
+ }
+
+ root = xmlDocGetRootElement (doc);
+ if (root == NULL
+ || strcmp (root->name, "Root") != 0 ) {
+ g_warning ("Error: file '%s' Invalid format", path);
+ xmlFreeDoc (doc);
+ return;
+ }
+
+ cur = root->children;
+
+ for (scan = cur->next->children; scan; scan = scan->next) {
+ if (!strcmp (scan->name, "cmd")) {
+ status = xmlGetProp (scan, "ignore");
+ if ((status != NULL) && (!strcmp (status, "yes"))) {
+ continue;
+ }
+ tmp = xmlGetProp (scan, "name");
+ if (tmp == NULL)
+ continue;
+ else {
+ *verb = g_list_append ( *verb, tmp);
+
+ tmp1 = xmlGetProp (scan, "placeholder");
+ *place = g_list_append ( *place, tmp1);
+ }
+ }
+ }
+
+ xmlFreeDoc (doc);
+}
+
+void
+toolbar_get_active_items ( const char *path, GList **active)
+{
+ xmlDocPtr doc = NULL;
+ xmlNodePtr root, scan, cur, iter;
+ char *tmp = NULL;
+
+ doc = e_xml_parse_file (path);
+ if (doc == NULL) {
+ g_warning ("Error: file '%s' not found", path);
+ return;
+ }
+
+ root = xmlDocGetRootElement (doc);
+ if (root == NULL
+ || strcmp (root->name, "Root") != 0 ) {
+ g_warning ("Error: file '%s' Invalid format", path);
+ xmlFreeDoc (doc);
+ return;
+ }
+ cur = root->children;
+
+ for (; cur; cur=cur->next) {
+ if (!strcmp (cur->name, "dockitem"))
+ break;
+ }
+ if (cur!=NULL) {
+ for (scan = cur->children; scan; scan = scan->next) {
+ if (!strcmp (scan->name, "toolitem")) {
+ tmp = xmlGetProp (scan, "verb");
+ if (tmp == NULL)
+ continue;
+ else {
+ *active = g_list_append ( *active, tmp);
+ }
+ }
+ if (!strcmp (scan->name, "placeholder")) {
+ for (iter = scan->children; iter; iter = iter->next) {
+ if (!strcmp (iter->name, "toolitem")) {
+ tmp = xmlGetProp(iter, "verb");
+ if (tmp == NULL)
+ continue;
+ else {
+ *active = g_list_append ( *active, tmp);
+ }
+
+ }
+ }
+ }
+ }
+ }
+ xmlFreeDoc (doc);
+}
+
+
+void
+toolbar_xml_save_file (GList * modify, const char * file)
+{
+ xmlDoc *doc;
+ xmlNode *root, *child, *gchild, *ggchild;
+ xmlDocPtr source = NULL;
+ xmlNodePtr scan = NULL, cur = NULL, temp = NULL, trav = NULL;
+
+ int i, len, j, index, next_index;
+
+ char *filename = NULL, *str = NULL, *tmp = NULL, *next_place = NULL, *cur_place = NULL;
+ char *home = g_get_home_dir();
+ char *user_path = g_build_filename (home, ".evolution", "ui", NULL);
+
+ char **xml_files;
+
+ xml_files = g_strsplit (file, ",", 0); for (i = 0; xml_files[i] != NULL; i++) {
+ GList *verb = NULL, *place = NULL, *ind = NULL, *next_ind = NULL;
+ char * source_filename = NULL;
+
+ source_filename = g_build_filename (user_path, xml_files[i], NULL);
+ get_placeholders (source_filename, &verb, &place);
+
+ source = e_xml_parse_file (source_filename);
+ if (source == NULL) {
+ g_warning ("Error: file '%s' not found",source_filename);
+ return;
+ }
+
+ temp = xmlDocGetRootElement (source);
+
+ doc = xmlNewDoc ("1.0");
+ root = xmlNewNode (NULL, "Root");
+ xmlDocSetRootElement (doc, root);
+
+ for ( cur = temp->children; cur != NULL; cur = cur->next)
+ {
+
+ if (!strcmp (cur->name, "text"))
+ continue;
+ else if (!strcmp (cur->name, "dockitem")) {
+ child = xmlNewChild (root, NULL, "dockitem", NULL);
+ e_xml_set_string_prop_by_name (child, "name", "Toolbar");
+
+ for (trav = cur->children; trav; trav = trav->next) {
+ if (g_str_equal (trav->name, "placeholder") && xmlGetLastChild (trav) == NULL) {
+ scan = xmlCopyNode (trav , 1);
+ if ( scan != NULL)
+ scan = xmlAddChild (child,scan);
+ }
+ }
+
+ len = g_list_length (modify);
+ for (j=0 ; jchildren; cur != NULL; cur = cur->next)
+ {
+
+ if (!strcmp (cur->name, "text"))
+ continue;
+ else if (!strcmp (cur->name, "commands")) {
+ child = xmlNewChild (root, NULL, "commands", NULL);
+
+ for (trav = cur->children; trav; trav = trav->next) {
+ if (g_str_equal (trav->name, "cmd") && xmlGetLastChild (trav) == NULL) {
+ int pos;
+ GList *index=NULL;
+ char *str = xmlGetProp (trav, "name");
+
+ index = g_list_find_custom (modify, str, (GCompareFunc *)safe_strcmp);
+ if (index) {
+ char *cur_accel=NULL;
+
+ pos = g_list_position ( modify, index);
+ cur_accel = g_list_nth_data (accel, pos);
+ scan = xmlCopyNode (trav , 1);
+
+ if (cur_accel)
+ e_xml_set_string_prop_by_name (scan, "accel", cur_accel);
+ else {
+ xmlAttrPtr accel_prop;
+ accel_prop = xmlHasProp (scan, "accel");
+ xmlRemoveProp (accel_prop);
+ }
+
+ scan = xmlAddChild (child,scan);
+ } else {
+ /* Will be used on revert mode for new verbs*/
+ scan = xmlCopyNode (trav , 1);
+
+ scan = xmlAddChild (child,scan);
+ }
+
+ }
+ }
+ } else {
+ scan = xmlCopyNode (cur , 1);
+ if ( scan != NULL)
+ scan = xmlAddChild (root,scan);
+ }
+
+ }
+
+ filename = g_concat_dir_and_file (rpath,"save.xml");
+ if (e_xml_save_file (filename, doc) == -1)
+ g_warning ("Unable to save view to %s", filename);
+
+ xmlFreeDoc(doc);
+ xmlFreeDoc(source);
+
+ if (g_remove (revert ? rfile : source_filename))
+ g_print ("\nError In Removing File");
+ else if (g_rename (filename, rfile))
+ g_print ("\nERROR In renaming The file");
+
+/* g_free (source_filename); */
+/* g_free (filename); */
+/* if (verb != NULL) */
+/* g_list_foreach (verb, (GFunc *)g_free, NULL); */
+/* if (place != NULL) */
+/* g_list_foreach (place, (GFunc *)g_free, NULL); */
+ }
+
+ g_free (user_path);
+
}
Index: mail/GNOME_Evolution_Mail.server.in.in
===================================================================
RCS file: /cvs/gnome/evolution/mail/GNOME_Evolution_Mail.server.in.in,v
retrieving revision 1.28
diff -u -p -r1.28 GNOME_Evolution_Mail.server.in.in
--- mail/GNOME_Evolution_Mail.server.in.in 12 Jan 2006 15:03:03 -0000 1.28
+++ mail/GNOME_Evolution_Mail.server.in.in 12 Sep 2006 05:58:35 -0000
@@ -28,6 +28,8 @@
+
+
@@ -93,7 +95,9 @@
-
+
+
+
@@ -122,8 +126,10 @@
-
-
+
+
+
-
+
+
+
Index: mail/em-folder-browser.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/em-folder-browser.c,v
retrieving revision 1.89
diff -u -p -r1.89 em-folder-browser.c
--- mail/em-folder-browser.c 28 Aug 2006 06:54:55 -0000 1.89
+++ mail/em-folder-browser.c 12 Sep 2006 05:58:35 -0000
@@ -81,6 +81,7 @@
#include "e-util/e-dialog-utils.h"
#include "e-util/e-error.h"
#include "e-util/e-util-private.h"
+#include "e-util/e-util.h"
#include "em-utils.h"
#include "em-composer-utils.h"
#include "em-format-html-display.h"
@@ -293,7 +294,7 @@ generate_viewoption_menu (GtkWidget *emf
GSList *l;
menu = gtk_menu_new ();
-
+ printf("%s(%d):%s: %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__,_("Important Messages"));
for (i = 0; emfb_view_items[i].search.id != -1; ++i) {
if (emfb_view_items[i].search.text) {
char *str;
@@ -428,17 +429,11 @@ emfb_init(GObject *o)
g_slist_free(emfb->view.ui_files);
emfb->view.ui_files = g_slist_append(NULL,
- g_build_filename (EVOLUTION_UIDIR,
- "evolution-mail-global.xml",
- NULL));
+ e_toolbar_copy_file ("evolution-mail-global.xml"));
emfb->view.ui_files = g_slist_append(emfb->view.ui_files,
- g_build_filename (EVOLUTION_UIDIR,
- "evolution-mail-list.xml",
- NULL));
+ e_toolbar_copy_file ("evolution-mail-list.xml"));
emfb->view.ui_files = g_slist_append(emfb->view.ui_files,
- g_build_filename (EVOLUTION_UIDIR,
- "evolution-mail-message.xml",
- NULL));
+ e_toolbar_copy_file ("evolution-mail-message.xml"));
emfb->view.enable_map = g_slist_prepend(emfb->view.enable_map, (void *)emfb_enable_map);
@@ -610,6 +605,7 @@ void em_folder_browser_show_preview(EMFo
}
return;
+
}
emfb->view.preview_active = state;
@@ -1247,6 +1243,14 @@ emfb_edit_select_thread(BonoboUIComponen
}
static void
+emfb_edit_select_entire_thread(BonoboUIComponent *uid, void *data, const char *path)
+{
+ EMFolderView *emfv = data;
+
+ message_list_select_entire_thread(emfv->list);
+}
+
+static void
emfb_folder_properties(BonoboUIComponent *uid, void *data, const char *path)
{
EMFolderBrowser *emfb = data;
@@ -1491,6 +1495,7 @@ static BonoboUIVerb emfb_verbs[] = {
BONOBO_UI_UNSAFE_VERB ("EditInvertSelection", emfb_edit_invert_selection),
BONOBO_UI_UNSAFE_VERB ("EditSelectAll", emfb_edit_select_all),
BONOBO_UI_UNSAFE_VERB ("EditSelectThread", emfb_edit_select_thread),
+ BONOBO_UI_UNSAFE_VERB ("EditSelectEntireThread", emfb_edit_select_entire_thread),
BONOBO_UI_UNSAFE_VERB ("ChangeFolderProperties", emfb_folder_properties),
BONOBO_UI_UNSAFE_VERB ("FolderExpunge", emfb_folder_expunge),
/* HideDeleted is a toggle */
Index: mail/em-folder-tree.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/em-folder-tree.c,v
retrieving revision 1.162
diff -u -p -r1.162 em-folder-tree.c
--- mail/em-folder-tree.c 7 Aug 2006 18:55:02 -0000 1.162
+++ mail/em-folder-tree.c 12 Sep 2006 05:58:35 -0000
@@ -495,7 +495,7 @@ folder_tree_new (EMFolderTree *emft, EMF
GConfClient *gconf;
gconf = mail_config_get_gconf_client ();
- side_bar_search = gconf_client_get_bool (gconf, "/apps/evolution/mail/display/side_bar_search", NULL);
+ side_bar_search = gconf_client_get_bool (gconf, "/apps/evolution/shell/view_defaults/side_bar_search", NULL);
tree = gtk_tree_view_new_with_model ((GtkTreeModel *) model);
GTK_WIDGET_SET_FLAGS(tree, GTK_CAN_FOCUS);
Index: mail/em-message-browser.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/em-message-browser.c,v
retrieving revision 1.26
diff -u -p -r1.26 em-message-browser.c
--- mail/em-message-browser.c 21 Aug 2006 05:59:48 -0000 1.26
+++ mail/em-message-browser.c 12 Sep 2006 05:58:36 -0000
@@ -51,6 +51,7 @@
#include
#include "e-util/e-util-private.h"
+#include "e-util/e-util.h"
#include "em-format-html-display.h"
#include "em-message-browser.h"
@@ -92,13 +93,9 @@ emmb_init(GObject *o)
g_slist_free(emmb->view.ui_files);
emmb->view.ui_files = g_slist_append(NULL,
- g_build_filename (EVOLUTION_UIDIR,
- "evolution-mail-messagedisplay.xml",
- NULL));
+ e_toolbar_copy_file ("evolution-mail-messagedisplay.xml"));
emmb->view.ui_files = g_slist_append(emmb->view.ui_files,
- g_build_filename (EVOLUTION_UIDIR,
- "evolution-mail-message.xml",
- NULL));
+ e_toolbar_copy_file ("evolution-mail-message.xml"));
/* currently: just use a scrolledwindow for preview widget */
p->preview = gtk_scrolled_window_new(NULL, NULL);
Index: mail/em-migrate.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/em-migrate.c,v
retrieving revision 1.55
diff -u -p -r1.55 em-migrate.c
--- mail/em-migrate.c 26 Apr 2006 08:15:39 -0000 1.55
+++ mail/em-migrate.c 12 Sep 2006 05:58:36 -0000
@@ -933,7 +933,6 @@ static e_gconf_map_t mail_accounts_map[]
static e_gconf_map_t mail_display_map[] = {
/* /Mail/Display */
- { "side_bar_search", "mail/display/side_bar_search", E_GCONF_MAP_BOOL },
{ "thread_list", "mail/display/thread_list", E_GCONF_MAP_BOOL },
{ "thread_subject", "mail/display/thread_subject", E_GCONF_MAP_BOOL },
{ "hide_deleted", "mail/display/show_deleted", E_GCONF_MAP_BOOLNOT },
Index: mail/evolution-mail.schemas.in.in
===================================================================
RCS file: /cvs/gnome/evolution/mail/evolution-mail.schemas.in.in,v
retrieving revision 1.29
diff -u -p -r1.29 evolution-mail.schemas.in.in
--- mail/evolution-mail.schemas.in.in 14 Jul 2006 05:42:26 -0000 1.29
+++ mail/evolution-mail.schemas.in.in 12 Sep 2006 05:58:36 -0000
@@ -170,20 +170,6 @@
- /schemas/apps/evolution/mail/display/side_bar_search
- /apps/evolution/mail/display/side_bar_search
- evolution-mail
- bool
- true
-
- Enable or disable type ahead search feature
-
- Enable side bar search feature so that you can start interactive searching by typing in the text. Use is that you can easily find a folder in that side bar by just typing the folder name and the selection jumps automatically to that folder.
-
-
-
-
-
/schemas/apps/evolution/mail/display/mark_citations
/apps/evolution/mail/display/mark_citations
evolution-mail
Index: mail/mail-component.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/mail-component.c,v
retrieving revision 1.136
diff -u -p -r1.136 mail-component.c
--- mail/mail-component.c 2 Aug 2006 04:45:41 -0000 1.136
+++ mail/mail-component.c 12 Sep 2006 05:58:37 -0000
@@ -808,7 +808,25 @@ static GNOME_Evolution_CreatableItemType
impl__get_userCreatableItems (PortableServer_Servant servant, CORBA_Environment *ev)
{
GNOME_Evolution_CreatableItemTypeList *list = GNOME_Evolution_CreatableItemTypeList__alloc ();
+ GList *name=NULL, *verb=NULL, *accel=NULL, *ptr=NULL;
+ char *parse_filename=NULL;
+ char *accel_message, *accel_folder;
+ int index;
+ char *home = g_get_home_dir();
+ char *user_path = g_build_filename (home, ".evolution", "ui", NULL);
+
+ e_toolbar_copy_file ("evolution-uci.xml");
+ parse_filename = g_build_filename (user_path, "evolution-uci.xml", NULL);
+ e_xml_parse_shortcuts_file (parse_filename, &name, &verb, &accel);
+ ptr = g_list_find_custom (verb, "NewMailMessage", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_message = g_list_nth_data (accel, index);
+
+ ptr = g_list_find_custom (verb, "NewMailFolder", (GCompareFunc *)strcmp);
+ index = g_list_position ( verb, ptr);
+ accel_folder = g_list_nth_data (accel, index);
+
list->_length = 2;
list->_maximum = list->_length;
list->_buffer = GNOME_Evolution_CreatableItemTypeList_allocbuf (list->_length);
@@ -819,7 +837,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[0].description = _("New Mail Message");
list->_buffer[0].menuDescription = _("_Mail Message");
list->_buffer[0].tooltip = _("Compose a new mail message");
- list->_buffer[0].menuShortcut = 'm';
+ list->_buffer[0].menuShortcut = accel_message;
list->_buffer[0].iconName = "stock_mail-compose";
list->_buffer[0].type = GNOME_Evolution_CREATABLE_OBJECT;
@@ -827,7 +845,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[1].description = _("New Mail Folder");
list->_buffer[1].menuDescription = _("Mail _Folder");
list->_buffer[1].tooltip = _("Create a new mail folder");
- list->_buffer[1].menuShortcut = '\0';
+ list->_buffer[1].menuShortcut = accel_folder;
list->_buffer[1].iconName = "stock_new-dir";
list->_buffer[1].type = GNOME_Evolution_CREATABLE_FOLDER;
Index: mail/message-list.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/message-list.c,v
retrieving revision 1.437
diff -u -p -r1.437 message-list.c
--- mail/message-list.c 25 Aug 2006 17:48:15 -0000 1.437
+++ mail/message-list.c 12 Sep 2006 05:58:37 -0000
@@ -757,6 +757,51 @@ message_list_select_thread (MessageList
etsm = (ETreeSelectionModel *) e_tree_get_selection_model (message_list->tree);
e_tree_selected_path_foreach (message_list->tree, thread_select_foreach, &tsi);
+ e_tree_selection_model_select_paths(etsm, tsi.paths);
+ g_ptr_array_free (tsi.paths, TRUE);
+}
+
+static ETreePath
+get_top_parent (ETreeModel *etm, ETreePath *child)
+{
+ if (e_tree_model_node_depth (etm, child) == 1)
+ return child;
+ else
+ return get_top_parent(etm, e_tree_model_node_get_parent (etm, child));
+}
+
+static void
+thread_select_all_foreach (ETreePath path, gpointer user_data)
+{
+ thread_select_info_t *tsi = (thread_select_info_t *) user_data;
+ ETreeModel *model = tsi->ml->model;
+ ETreePath node;
+
+ node = get_top_parent (model, path);
+ g_ptr_array_add (tsi->paths, node);
+
+ e_tree_model_node_traverse (model, node, select_node, tsi);
+}
+
+/**
+ * message_list_select_entire_thread:
+ * @message_list: Message List widget
+ *
+ * Selects all messages in the current thread (based on cursor).
+ **/
+
+void
+message_list_select_entire_thread (MessageList *message_list)
+{
+ ETreeSelectionModel *etsm;
+ thread_select_info_t tsi;
+
+ tsi.ml = message_list;
+ tsi.paths = g_ptr_array_new ();
+
+ etsm = (ETreeSelectionModel *) e_tree_get_selection_model (message_list->tree);
+
+ e_tree_selected_path_foreach (message_list->tree, thread_select_all_foreach, &tsi);
e_tree_selection_model_select_paths(etsm, tsi.paths);
g_ptr_array_free (tsi.paths, TRUE);
}
Index: mail/message-list.h
===================================================================
RCS file: /cvs/gnome/evolution/mail/message-list.h,v
retrieving revision 1.92
diff -u -p -r1.92 message-list.h
--- mail/message-list.h 2 Jun 2006 18:12:02 -0000 1.92
+++ mail/message-list.h 12 Sep 2006 05:58:37 -0000
@@ -202,6 +202,7 @@ void message_list_select_next_
/* selection manipulation */
void message_list_select_all (MessageList *ml);
void message_list_select_thread (MessageList *ml);
+void message_list_select_entire_thread (MessageList *ml);
void message_list_invert_selection (MessageList *ml);
/* clipboard stuff */
Index: shell/Evolution-Component.idl
===================================================================
RCS file: /cvs/gnome/evolution/shell/Evolution-Component.idl,v
retrieving revision 1.21
diff -u -p -r1.21 Evolution-Component.idl
--- shell/Evolution-Component.idl 22 Dec 2005 11:11:15 -0000 1.21
+++ shell/Evolution-Component.idl 12 Sep 2006 05:58:38 -0000
@@ -41,7 +41,7 @@ module Evolution {
string description;
string menuDescription;
string tooltip;
- char menuShortcut;
+ string menuShortcut;
string iconName;
CreatableItem type;
};
Index: shell/apps_evolution_shell.schemas.in.in
===================================================================
RCS file: /cvs/gnome/evolution/shell/apps_evolution_shell.schemas.in.in,v
retrieving revision 1.15
diff -u -p -r1.15 apps_evolution_shell.schemas.in.in
--- shell/apps_evolution_shell.schemas.in.in 28 Apr 2006 11:19:51 -0000 1.15
+++ shell/apps_evolution_shell.schemas.in.in 12 Sep 2006 05:58:38 -0000
@@ -14,6 +14,18 @@
+
+ /schemas/apps/evolution/shell/ui_timestamps
+ /apps/evolution/shell/ui_timestamps
+ evolution
+ list
+ string
+ []
+
+ Time stamp of the XML UI files for migration purposes.
+
+
+
@@ -69,6 +81,20 @@
+
+
+ /schemas/apps/evolution/shell/view_display/side_bar_search
+ /apps/evolution/shell/view_display/side_bar_search
+ evolution
+ bool
+ true
+
+ Enable or disable type ahead search feature
+
+ Enable side bar search feature so that you can start interactive searching by typing in the text. Use is that you can easily find a folder in that side bar by just typing the folder name and the selection jumps automatically to that folder.
+
+
+
/schemas/apps/evolution/shell/view_defaults/width
Index: shell/e-component-registry.c
===================================================================
RCS file: /cvs/gnome/evolution/shell/e-component-registry.c,v
retrieving revision 1.58
diff -u -p -r1.58 e-component-registry.c
--- shell/e-component-registry.c 2 Jun 2006 17:32:19 -0000 1.58
+++ shell/e-component-registry.c 12 Sep 2006 05:58:38 -0000
@@ -50,6 +50,7 @@ static EComponentInfo *
component_info_new (const char *id,
GNOME_Evolution_Component iface,
const char *alias,
+ const char *file,
const char *button_label,
const char *button_tooltips,
const char *menu_label,
@@ -63,6 +64,7 @@ component_info_new (const char *id,
info->id = g_strdup (id);
info->iface = bonobo_object_dup_ref(iface, NULL);
info->alias = g_strdup (alias);
+ info->file = g_strdup (file);
info->button_label = g_strdup (button_label);
info->button_tooltips = g_strdup (button_tooltips);
info->menu_label = g_strdup (menu_label);
@@ -180,6 +182,7 @@ query_components (EComponentRegistry *re
const char *menu_label;
const char *menu_accelerator;
const char *alias;
+ const char *file;
const char *icon_name;
const char *sort_order_string;
const char *tooltips;
@@ -210,6 +213,8 @@ query_components (EComponentRegistry *re
alias = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:component_alias", NULL);
+ file = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:component_file", NULL);
+
icon_name = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_icon", NULL);
if (icon_name) {
icon = e_icon_factory_get_icon (icon_name, E_ICON_SIZE_LARGE_TOOLBAR);
@@ -223,7 +228,7 @@ query_components (EComponentRegistry *re
else
sort_order = atoi (sort_order_string);
- info = component_info_new (id, iface, alias, label, tooltips, menu_label,
+ info = component_info_new (id, iface, alias, file, label, tooltips, menu_label,
menu_accelerator, sort_order, icon, menuicon);
set_schemas (info, & info_list->_buffer [i]);
Index: shell/e-component-registry.h
===================================================================
RCS file: /cvs/gnome/evolution/shell/e-component-registry.h,v
retrieving revision 1.17
diff -u -p -r1.17 e-component-registry.h
--- shell/e-component-registry.h 16 May 2005 04:46:40 -0000 1.17
+++ shell/e-component-registry.h 12 Sep 2006 05:58:38 -0000
@@ -67,6 +67,7 @@ struct _EComponentInfo {
char *id;
char *alias;
+ char *file;
/* NULL if not activated. */
GNOME_Evolution_Component iface;
@@ -77,7 +78,7 @@ struct _EComponentInfo {
char *menu_label;
char *menu_accelerator;
GdkPixbuf *menu_icon;
-
+
int sort_order;
/* List of URI schemas that this component supports. */
Index: shell/e-shell-window-commands.c
===================================================================
RCS file: /cvs/gnome/evolution/shell/e-shell-window-commands.c,v
retrieving revision 1.52
diff -u -p -r1.52 e-shell-window-commands.c
--- shell/e-shell-window-commands.c 22 Aug 2006 17:39:27 -0000 1.52
+++ shell/e-shell-window-commands.c 12 Sep 2006 05:58:38 -0000
@@ -30,11 +30,15 @@
#include
#include
+#include
+
#include
#include
#include
#include
+#include
+
#include
@@ -42,6 +46,9 @@
#include
+#include
+#include
+
#include "e-util/e-icon-factory.h"
#include "e-util/e-dialog-utils.h"
#include "e-util/e-error.h"
@@ -53,6 +60,25 @@
#include "e-shell-importer.h"
+
+enum {
+
+TB_NAME = 0,
+TB_VERB,
+TB_ENABLED_COLUMN,
+TB_N_COLUMN
+
+};
+
+
+enum {
+CS_TREE = 0,
+CS_NAME,
+CS_VERB,
+CS_ACCEL,
+CS_N_COLUMN
+};
+
/* Utility functions. */
static void
@@ -604,6 +630,695 @@ command_about_box (BonoboUIComponent *ui
gtk_widget_show (about_box_window);
}
+
+static void
+list_enable_toggled (GtkCellRendererToggle *renderer,
+ const char *path_string,
+ GtkWidget *view)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gboolean bool;
+
+ path = gtk_tree_path_new_from_string (path_string);
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+
+ if (gtk_tree_model_get_iter (model, &iter, path)) {
+ gtk_tree_model_get (model, &iter, TB_ENABLED_COLUMN, &bool , -1);
+ gtk_tree_store_set (GTK_TREE_STORE (model), &iter, TB_ENABLED_COLUMN,!bool , -1);
+ }
+
+ gtk_tree_path_free (path);
+}
+
+static int
+custom_toolbar_dialog_key_pressed (GtkWidget *dialog, GdkEventKey *event, void *user_data)
+{
+ if (event->keyval == GDK_Escape) {
+ gtk_widget_destroy (dialog);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void
+custom_toolbar (BonoboUIComponent *uih,
+ EShellWindow *window,
+ const char *path)
+{
+ GtkCellRenderer *renderer;
+ GtkTreeModel *model;
+ GtkWidget *view, *scrolled;
+ GtkTreeStore *store;
+ GtkTreeIter iter;
+ GtkDialog *dialog;
+ GtkTreeSelection *selection;
+ GList *cols, *l, *name = NULL, *active = NULL, *selected = NULL, *verb = NULL;
+ char *str = NULL, *str1 = NULL, *component = NULL, *file = NULL;
+ int response, i, len;
+ char **xml_files;
+
+ char *home = g_get_home_dir();
+ char *user_path = g_build_filename (home, ".evolution", "ui", NULL);
+
+ component = e_shell_window_peek_current_component_alias(window);
+ EComponentRegistry *registry = e_shell_peek_component_registry (e_shell_window_peek_shell (window));
+ EComponentInfo *info = e_component_registry_peek_info (registry,
+ ECR_FIELD_ALIAS,
+ component);
+
+ file = g_strdup (info->file);
+ xml_files = g_strsplit (file, ",", 0);
+
+ dialog = (GtkDialog *)gtk_dialog_new();
+ gtk_dialog_set_has_separator(dialog, TRUE);
+ g_signal_connect ((GtkWidget *)dialog, "key-press-event" , G_CALLBACK (custom_toolbar_dialog_key_pressed), NULL);
+
+ gtk_widget_ensure_style ((GtkWidget *)dialog);
+ gtk_container_set_border_width ((GtkContainer *)(dialog->vbox), 0);
+ gtk_container_set_border_width ((GtkContainer *)(dialog->action_area), 12);
+
+ gtk_dialog_add_button (dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+ gtk_dialog_add_button (dialog, GTK_STOCK_OK, GTK_RESPONSE_OK);
+ gtk_window_set_title ((GtkWindow *)dialog, "Customize Toolbar..." );
+ gtk_window_set_default_size ((GtkWindow *) dialog, 300, 500);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN);
+
+ view = gtk_tree_view_new ();
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view),
+ -1,
+ _("Name"),
+ renderer,
+ "text", TB_NAME,
+ NULL);
+ g_object_set_data ((GObject *) scrolled, "renderer", renderer);
+
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view),
+ -1,
+ "Verb",
+ renderer,
+ "text", TB_VERB,
+ NULL);
+ g_object_set_data ((GObject *) scrolled, "renderer", renderer);
+
+ renderer = gtk_cell_renderer_toggle_new ();
+ g_object_set (G_OBJECT (renderer), "activatable", TRUE, NULL);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view),
+ -1,
+ _("Enabled"),
+ renderer,
+ "active", TB_ENABLED_COLUMN ,
+ NULL);
+ g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (list_enable_toggled), view);
+
+ for (i = 0; xml_files[i] != NULL; i++) {
+ char *parse_filename = NULL;
+
+ e_toolbar_copy_file (xml_files[i]);
+ parse_filename = g_build_filename (user_path, xml_files[i], NULL);
+ toolbar_xml_parse_file (parse_filename, &name, &verb);
+ toolbar_get_active_items (parse_filename, &active);
+
+ g_free(parse_filename);
+ }
+
+ store = gtk_list_store_new (TB_N_COLUMN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
+
+ len=g_list_length(name);
+ for (i=0 ; inext) {
+ GtkTreeViewColumn *col = (GtkTreeViewColumn *) l->data;
+ if(strcmp (gtk_tree_view_column_get_title (col), "Name") == 0) {
+ gtk_tree_view_column_set_fixed_width (col, 200);
+ }
+ if (strcmp (gtk_tree_view_column_get_title (col), "Verb") == 0) {
+ gtk_tree_view_column_set_visible (col, FALSE);
+ break;
+ }
+ }
+
+ model= GTK_TREE_MODEL(store);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (view),model);
+ g_object_unref (model);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+ g_object_set_data ((GObject *) scrolled, "view", view);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), scrolled);
+
+ gtk_widget_show_all ((GtkWidget *)dialog);
+ response = gtk_dialog_run(dialog);
+
+ if (response == GTK_RESPONSE_OK)
+ {
+ int valid;
+ valid = gtk_tree_model_get_iter_first (store, &iter);
+
+ while (valid)
+ {
+ gchar *str_data;
+ gboolean bool_data;
+
+ gtk_tree_model_get (store, &iter,
+ TB_VERB, &str_data,
+ TB_ENABLED_COLUMN, &bool_data,
+ -1);
+ if (bool_data)
+ selected = g_list_append ( selected, str_data);
+
+ valid = gtk_tree_model_iter_next (store, &iter);
+ }
+
+ toolbar_xml_save_file (selected, file);
+ gtk_widget_destroy ((GtkWidget *)dialog);
+ }
+ else if (response == GTK_RESPONSE_CANCEL) {
+ gtk_widget_destroy ((GtkWidget *)dialog);
+ }
+
+
+ g_free(file);
+ g_strfreev(xml_files);
+ g_free(user_path);
+ g_list_foreach (name, (GFunc *)g_free, NULL);
+ g_list_foreach (active, (GFunc *)g_free, NULL);
+ g_list_foreach (selected, (GFunc *)g_free, NULL);
+ g_list_foreach (verb, (GFunc *)g_free, NULL);
+}
+
+static char *
+sanitize_accel (char *in)
+{
+ int len;
+ char *out;
+ int i=0,j=0;
+ gboolean quoted=FALSE;
+
+ if (!in)
+ return NULL;
+
+ len = strlen (in);
+ out = malloc ((len+2) * sizeof (char));
+ for (;i';
+ quoted = !quoted;
+ } else if (in[i] == ' ')
+ continue;
+ else
+ out[j] = in[i];
+
+ }
+
+ out[j] = 0;
+
+ g_free (in);
+ return out;
+}
+
+
+static char *
+desanitize_accel (char *in)
+{
+ int len;
+ char *out;
+ int i=0,j=0;
+ gboolean quoted=FALSE;
+
+ if (!in)
+ return NULL;
+
+ len = strlen (in);
+ out = malloc ((len+2) * sizeof (char));
+ for (;i') {
+ out[j] = '*';
+ } else if (in[i] == ' ')
+ continue;
+ else
+ out[j] = in[i];
+
+ }
+
+ out[j] = 0;
+
+// g_free (in);
+ return out;
+}
+
+
+
+/* static gboolean */
+/* decide_key (GtkEntry *entry, GdkEventKey *event, gpointer dum) */
+/* { */
+
+/* if (event->keyval > 65500) */
+/* return TRUE; */
+
+/* gtk_entry_set_text (entry, gtk_accelerator_name (event->keyval, event->state)); */
+/* return TRUE; */
+/* } */
+/* static void */
+/* accel_editstart (GtkCellRenderer *renderer, */
+/* GtkCellEditable *editable, */
+/* gchar *path, */
+/* gpointer user_data) */
+/* { */
+/* printf("%s(%d):%s: started\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); */
+/* gtk_entry_set_text (editable, "Type a new accelerator or backspace to clear"); */
+/* gtk_entry_set_has_frame (editable, FALSE); */
+/* g_signal_connect (editable, "key_press_event", G_CALLBACK(decide_key), NULL); */
+/* } */
+
+/* static void */
+/* accel_edited (GtkCellRendererText *renderer, */
+/* gchar *arg1, */
+/* gchar *arg2, */
+/* gpointer user_data) */
+/* { */
+/* printf("%s(%d):%s: finished \n", __FILE__, __LINE__, __PRETTY_FUNCTION__); */
+/* //g_object_set (G_OBJECT (renderer), "sensitive", TRUE, NULL); */
+/* } */
+
+/* static void */
+/* col_clicked (GtkTreeViewColumn *col, gpointer dum) */
+/* { */
+/* printf("%s(%d):%s: clicked\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); */
+/* } */
+
+/* static void */
+/* row_act (GtkTreeView *tree_view, */
+/* GtkTreePath *path, */
+/* GtkTreeViewColumn *column, */
+/* gpointer user_data) */
+/* { */
+/* printf("%s(%d):%s: ROW \n", __FILE__, __LINE__, __PRETTY_FUNCTION__); */
+/* } */
+
+
+static gboolean
+check_for_dupe (GtkTreeModel *store, const char *key)
+{
+ GtkTreeIter iter, parent;
+ gboolean valid;
+
+
+ valid = gtk_tree_model_get_iter_first (store, &parent);
+
+ if (valid)
+ valid = gtk_tree_model_iter_children (store, &iter, &parent);
+ else {
+ /* Crisis*/
+ return FALSE;
+ }
+
+
+ while (valid)
+ {
+ char *verb, *name, *accel;
+
+ gtk_tree_model_get (store, &iter, 1, &name, 2, &verb, 3, &accel, -1);
+ if (accel && g_ascii_strcasecmp (key, accel) == 0) {
+ e_error_run(NULL, "shell:shortcut-exist", key, name, NULL);
+ return TRUE;
+ }
+
+ valid = gtk_tree_model_iter_next (store, &iter);
+ if (!valid) {
+ valid = gtk_tree_model_iter_next (store, &parent);
+ if (valid)
+ valid = gtk_tree_model_iter_children (store, &iter, &parent);
+ else
+ break;
+ }
+
+
+
+ }
+
+ return FALSE;
+
+}
+
+static void
+accel_edited_callback (GtkCellRendererText *cell,
+ const char *path_string,
+ guint keyval,
+ GdkModifierType mask,
+ guint hardware_keycode,
+ GtkTreeView *view)
+{
+ GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gboolean ret;
+ char *acc = gtk_accelerator_name (keyval, mask);
+
+ model = gtk_tree_view_get_model (view);
+ gtk_tree_model_get_iter (model, &iter, path);
+ ret = check_for_dupe (model, acc);
+ if (!ret)
+ gtk_tree_store_set (model, &iter, CS_ACCEL, acc, -1);
+ printf("%s(%d):%s: %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, acc);
+ g_free (acc);
+
+}
+
+static void
+accel_clear_callback (GtkCellRendererAccel *accel,
+ gchar *path_string,
+ GtkTreeView *view)
+{
+ GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ model = gtk_tree_view_get_model (view);
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_store_set (model, &iter, CS_ACCEL, NULL, -1);
+}
+
+static void
+check_toggled (GtkToggleButton * check, gpointer dummy)
+{
+ GConfClient *client = gconf_client_get_default ();
+
+ gconf_client_set_bool (client, "/apps/evolution/shell/view_defaults/sidebar_visible", gtk_toggle_button_get_active (check), NULL);
+ g_object_unref (client);
+}
+
+static void
+custom_shortcuts (BonoboUIComponent *uih, EShellWindow *window, const char *path)
+{
+ GtkCellRenderer *renderer;
+ GtkTreeModel *model;
+ GtkWidget *view, *scrolled, *box, *check, *hbox, *image, *label, *def;
+ GtkWidget *bimage, *blabel, *bbox;
+ GtkListStore *store;
+ GtkTreeIter iter, parent;
+ GtkDialog *dialog;
+ GtkTreeSelection *selection;
+ GtkTreeViewColumn *col;
+ GList *cols, *l, *name = NULL, *active = NULL, *verb = NULL, *accel=NULL;
+ char *component = NULL, *file = NULL;
+ int response, i, len;
+ char **xml_files;
+
+ char *home = g_get_home_dir();
+ char *user_path = g_build_filename (home, ".evolution", "ui", NULL);
+ GConfClient *client = gconf_client_get_default ();
+ EComponentRegistry *registry;
+ EComponentInfo *info;
+ char *parse_filename = NULL;
+
+ component = e_shell_window_peek_current_component_alias(window);
+ registry = e_shell_peek_component_registry (e_shell_window_peek_shell (window));
+ info = e_component_registry_peek_info (registry,
+ ECR_FIELD_ALIAS,
+ component);
+
+ file = g_strdup (info->file);
+ xml_files = g_strsplit (file, ",", 0);
+
+
+ dialog = (GtkDialog *)gtk_dialog_new();
+ box =gtk_vbox_new (FALSE, 6);
+ check = gtk_check_button_new_with_mnemonic (_("_Enable interactive search in side bar"));
+ gtk_box_pack_start (box, check, FALSE, FALSE, 3);
+ gtk_toggle_button_set_active ((GtkToggleButton *) check, gconf_client_get_bool (client, "/apps/evolution/shell/view_defaults/side_bar_search", NULL));
+ g_signal_connect (check, "toggled", check_toggled, NULL);
+ g_object_unref (client);
+
+ gtk_dialog_set_has_separator(dialog, TRUE);
+ g_signal_connect ((GtkWidget *)dialog, "key-press-event" , G_CALLBACK (custom_toolbar_dialog_key_pressed), NULL);
+
+ gtk_widget_ensure_style ((GtkWidget *)dialog);
+ gtk_container_set_border_width ((GtkContainer *)box, 9);
+
+ def = gtk_button_new ();
+ blabel = gtk_label_new_with_mnemonic (_("_Revert to Defaults"));
+ bimage = e_icon_factory_get_image ("stock_undo", E_ICON_SIZE_BUTTON);
+ bbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (bbox, bimage, FALSE, FALSE, 0);
+ gtk_box_pack_start (bbox, blabel, FALSE, FALSE, 0);
+ gtk_container_add (def, bbox);
+
+ gtk_dialog_add_action_widget (dialog, def, GTK_RESPONSE_ACCEPT);
+ gtk_dialog_add_button (dialog, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
+ gtk_dialog_set_default_response (dialog, GTK_RESPONSE_CLOSE);
+
+ gtk_dialog_set_has_separator (dialog, FALSE);
+ gtk_window_set_title ((GtkWindow *)dialog, _("Customize Keyboard Shortcuts") );
+ gtk_window_set_default_size ((GtkWindow *) dialog, 400, 540);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+ label = gtk_label_new_with_mnemonic (_("_Shortcut Keys:"));
+
+ gtk_box_pack_start (hbox, label, FALSE, FALSE, 0);
+ gtk_box_pack_start (box, hbox, FALSE, FALSE, 0);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN);
+ gtk_box_pack_start (box, scrolled, TRUE, TRUE, 0);
+
+
+ view = gtk_tree_view_new ();
+ gtk_label_set_mnemonic_widget (label, view);
+ gtk_tree_view_set_enable_search (view, FALSE);
+ gtk_tree_view_set_rules_hint (view, TRUE);
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view),
+ -1,
+ _("Name"),
+ renderer,
+ "text", CS_NAME,
+ NULL);
+ g_object_set_data ((GObject *) scrolled, "renderer", renderer);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+ label = gtk_label_new (_("Changes will not take effect immediately. Please restart your Evolution to use the new shortcuts."));
+ gtk_widget_set_size_request (label, 350, -1);
+ gtk_label_set_line_wrap (label, TRUE);
+
+ image = e_icon_factory_get_image ("stock_dialog-info", E_ICON_SIZE_DIALOG);
+ gtk_box_pack_start (hbox, image, FALSE, FALSE, 0);
+ gtk_box_pack_start (hbox, label, FALSE, FALSE, 0);
+ gtk_box_pack_start (box, hbox, FALSE, FALSE, 0);
+
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view),
+ -1,
+ "Verb",
+ renderer,
+ "text", CS_VERB,
+ NULL);
+ g_object_set_data ((GObject *) scrolled, "renderer", renderer);
+
+ renderer = gtk_cell_renderer_accel_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view),
+ -1,
+ "Accelerator",
+ renderer,
+ "text", CS_ACCEL,
+ NULL);
+ col = gtk_tree_view_get_column (GTK_TREE_VIEW (view), 2);
+
+ g_signal_connect (renderer, "accel-edited", accel_edited_callback, view);
+ g_signal_connect (renderer, "accel-cleared", accel_clear_callback, view);
+ g_object_set (G_OBJECT (renderer), "editable", TRUE, "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK, NULL);
+ g_object_set_data ((GObject *) scrolled, "renderer", renderer);
+
+ e_toolbar_copy_file ("evolution.xml");
+ parse_filename = g_build_filename (user_path, "evolution.xml", NULL);
+ e_xml_parse_shortcuts_file (parse_filename, &name, &verb, &accel);
+
+ e_toolbar_copy_file ("evolution-uci.xml");
+ parse_filename = g_build_filename (user_path, "evolution-uci.xml", NULL);
+ e_xml_parse_shortcuts_file (parse_filename, &name, &verb, &accel);
+ for (i = 0; xml_files[i] != NULL; i++) {
+
+
+ e_toolbar_copy_file (xml_files[i]);
+ parse_filename = g_build_filename (user_path, xml_files[i], NULL);
+ e_xml_parse_shortcuts_file (parse_filename, &name, &verb, &accel);
+ }
+
+ name = g_list_reverse (name);
+ accel = g_list_reverse (accel);
+ verb = g_list_reverse (verb);
+
+ store = gtk_tree_store_new (CS_N_COLUMN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+
+ len=g_list_length(name);
+ for (i=0 ; inext) {
+ GtkTreeViewColumn *col = (GtkTreeViewColumn *) l->data;
+ if(strcmp (gtk_tree_view_column_get_title (col), "Name") == 0) {
+ gtk_tree_view_column_set_fixed_width (col, 200);
+ }
+ if (strcmp (gtk_tree_view_column_get_title (col), "Verb") == 0) {
+ gtk_tree_view_column_set_visible (col, FALSE);
+ break;
+ }
+ }
+
+
+
+ model= GTK_TREE_MODEL(store);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (view),model);
+ gtk_tree_view_expand_all((GtkTreeView *)view);
+ gtk_tree_view_set_expander_column((GtkTreeView *)view, gtk_tree_view_get_column((GtkTreeView *)view, 0));
+
+ g_object_unref (model);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+ g_object_set_data ((GObject *) scrolled, "view", view);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), box);
+ gtk_widget_show_all ((GtkWidget *)dialog);
+ response = gtk_dialog_run(dialog);
+ //printf("%s(%d):%s: %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, response);
+ if (response == GTK_RESPONSE_CLOSE || response == GTK_RESPONSE_NONE || response == GTK_RESPONSE_DELETE_EVENT)
+ {
+ int valid;
+ GList *verb=NULL, *set_accel=NULL;
+
+ valid = gtk_tree_model_get_iter_first (store, &parent);
+ if (valid)
+ valid = gtk_tree_model_iter_children (store, &iter, &parent);
+ else {
+ gtk_widget_destroy ((GtkWidget *)dialog);
+ return;
+ }
+
+
+ while (valid)
+ {
+ gchar *str_data, *accel_data;
+
+ gtk_tree_model_get (store, &iter,
+ CS_VERB, &str_data,
+ CS_ACCEL, &accel_data,
+ -1);
+ printf("%s(%d):%s: %s %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, str_data, accel_data);
+ if (str_data) {
+ verb = g_list_append ( verb, str_data);
+ set_accel = g_list_append ( set_accel, desanitize_accel(accel_data));
+ }
+ valid = gtk_tree_model_iter_next (store, &iter);
+
+
+ if (!valid) {
+ valid = gtk_tree_model_iter_next (store, &parent);
+ if (valid)
+ valid = gtk_tree_model_iter_children (store, &iter, &parent);
+ else
+ break;
+ }
+
+
+
+ }
+
+ e_xml_save_shortcuts_file (file, verb, set_accel, FALSE);
+ e_xml_save_shortcuts_file ("evolution.xml", verb, set_accel, FALSE);
+ e_xml_save_shortcuts_file ("evolution-uci.xml", verb, set_accel, FALSE);
+ gtk_widget_destroy ((GtkWidget *)dialog);
+ }
+ else if (response == GTK_RESPONSE_ACCEPT) {
+ e_xml_revert_shortcuts_file (file);
+ gtk_widget_destroy ((GtkWidget *)dialog);
+
+ }
+
+
+ g_free(file);
+ g_strfreev(xml_files);
+ g_free(user_path);
+ g_list_foreach (name, (GFunc *)g_free, NULL);
+ g_list_foreach (active, (GFunc *)g_free, NULL);
+ //g_list_foreach (selected, (GFunc *)g_free, NULL);
+ g_list_foreach (verb, (GFunc *)g_free, NULL);
+}
+
+
+
+
+
+
#if 0
/* Unused */
static void
@@ -747,6 +1462,9 @@ static BonoboUIVerb new_verbs [] = {
static BonoboUIVerb actions_verbs[] = {
BONOBO_UI_VERB ("SendReceive", (BonoboUIVerbFn) command_send_receive),
BONOBO_UI_VERB ("ForgetPasswords", command_forget_passwords),
+ BONOBO_UI_VERB ("CustomToolbar", custom_toolbar),
+ BONOBO_UI_VERB ("CustomShortcuts", custom_shortcuts),
+
BONOBO_UI_VERB_END
};
@@ -944,12 +1662,14 @@ view_statusbar_item_toggled_handler (Bon
{
GtkWidget *status_bar = e_shell_window_peek_statusbar (shell_window);
gboolean is_visible;
+ GConfClient *client = gconf_client_get_default ();
is_visible = state[0] == '1';
if(is_visible)
gtk_widget_show (status_bar);
else
gtk_widget_hide (status_bar);
- gconf_client_set_bool (gconf_client_get_default (),"/apps/evolution/shell/view_defaults/statusbar_visible", is_visible, NULL);
+ gconf_client_set_bool (client, "/apps/evolution/shell/view_defaults/statusbar_visible", is_visible, NULL);
+ g_object_unref (client);
}
static void
@@ -961,12 +1681,15 @@ view_sidebar_item_toggled_handler (Bonob
{
GtkWidget *side_bar = GTK_WIDGET(e_shell_window_peek_sidebar (shell_window));
gboolean is_visible;
+ GConfClient *client = gconf_client_get_default ();
+
is_visible = state[0] == '1';
if(is_visible)
gtk_widget_show (side_bar);
else
gtk_widget_hide (side_bar);
- gconf_client_set_bool (gconf_client_get_default (),"/apps/evolution/shell/view_defaults/sidebar_visible", is_visible, NULL);
+ gconf_client_set_bool (client, "/apps/evolution/shell/view_defaults/sidebar_visible", is_visible, NULL);
+ g_object_unref (client);
}
/* Public API. */
Index: shell/e-shell-window.c
===================================================================
RCS file: /cvs/gnome/evolution/shell/e-shell-window.c,v
retrieving revision 1.53
diff -u -p -r1.53 e-shell-window.c
--- shell/e-shell-window.c 23 Aug 2006 09:02:48 -0000 1.53
+++ shell/e-shell-window.c 12 Sep 2006 05:58:38 -0000
@@ -54,6 +54,8 @@
#include
#include
+#include
+
#include
#include
@@ -139,6 +141,7 @@ static GdkBitmap *offline_mask = NULL;
static GdkPixmap *online_pixmap = NULL;
static GdkBitmap *online_mask = NULL;
+static gboolean store_window_size (GtkWidget* widget);
/* ComponentView handling. */
@@ -827,7 +830,8 @@ setup_widgets (EShellWindow *window)
static void
impl_dispose (GObject *object)
{
- EShellWindowPrivate *priv = E_SHELL_WINDOW (object)->priv;
+ EShellWindow *self = E_SHELL_WINDOW (object);
+ EShellWindowPrivate *priv = self->priv;
if (priv->shell != NULL) {
g_object_remove_weak_pointer (G_OBJECT (priv->shell), (void **) &priv->shell);
@@ -1016,7 +1028,7 @@ e_shell_window_new (EShell *shell,
bonobo_object_corba_objref (BONOBO_OBJECT (ui_container)),
NULL);
- xmlfile = g_build_filename (EVOLUTION_UIDIR, "evolution.xml", NULL);
+ xmlfile = e_toolbar_copy_file ("evolution.xml");
bonobo_ui_util_set_ui (priv->ui_component,
PREFIX,
xmlfile,
@@ -1106,6 +1118,16 @@ e_shell_window_peek_current_component_id
return window->priv->current_view->component_id;
}
+const char *
+e_shell_window_peek_current_component_alias (EShellWindow *window)
+{
+ g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL);
+
+ if (window->priv->current_view == NULL)
+ return NULL;
+
+ return window->priv->current_view->component_alias;
+}
EShell *
e_shell_window_peek_shell (EShellWindow *window)
Index: shell/e-shell-window.h
===================================================================
RCS file: /cvs/gnome/evolution/shell/e-shell-window.h,v
retrieving revision 1.11
diff -u -p -r1.11 e-shell-window.h
--- shell/e-shell-window.h 21 Dec 2005 07:18:49 -0000 1.11
+++ shell/e-shell-window.h 12 Sep 2006 05:58:38 -0000
@@ -63,6 +63,9 @@ void e_shell_window_switch_to_com
const char *component_id);
const char *e_shell_window_peek_current_component_id (EShellWindow *shell);
+const char *e_shell_window_peek_current_component_alias (EShellWindow *shell);
+
+
EShell *e_shell_window_peek_shell (EShellWindow *window);
BonoboUIComponent *e_shell_window_peek_bonobo_ui_component (EShellWindow *window);
ESidebar *e_shell_window_peek_sidebar (EShellWindow *window);
Index: shell/e-user-creatable-items-handler.c
===================================================================
RCS file: /cvs/gnome/evolution/shell/e-user-creatable-items-handler.c,v
retrieving revision 1.20
diff -u -p -r1.20 e-user-creatable-items-handler.c
--- shell/e-user-creatable-items-handler.c 22 Aug 2006 05:03:42 -0000 1.20
+++ shell/e-user-creatable-items-handler.c 12 Sep 2006 05:58:38 -0000
@@ -63,7 +63,7 @@ typedef struct _Component Component;
/* Representation of a single menu item. */
struct _MenuItem {
const char *label;
- char shortcut;
+ char *shortcut;
char *verb;
char *tooltip;
char *component;
@@ -568,8 +568,8 @@ xml_menu_item_func (EUserCreatableItemsH
if (first)
g_string_append_printf (xml, " accel=\"*Control*N\"");
- else if (item->shortcut != '\0')
- g_string_append_printf (xml, " accel=\"*Control**Shift*%c\"", item->shortcut);
+ else if (item->shortcut && *item->shortcut)
+ g_string_append_printf (xml, " accel=\"%s\"", item->shortcut);
if (item->icon != NULL) {
char *icon_xml;
@@ -630,6 +630,40 @@ default_activate (EComboButton *combo_bu
execute_verb (handler, handler->priv->default_menu_item->verb);
}
+static char *
+sanitize_accel (char *in)
+{
+ int len;
+ char *out;
+ int i=0,j=0;
+ gboolean quoted=FALSE;
+
+ if (!in)
+ return NULL;
+
+ len = strlen (in);
+ out = malloc ((len+2) * sizeof (char));
+ for (;i';
+ quoted = !quoted;
+ } else if (in[i] == ' ')
+ continue;
+ else
+ out[j] = in[i];
+
+ }
+
+ out[j] = 0;
+
+ return out;
+}
+
static void
gtk_menu_item_func (EUserCreatableItemsHandler *handler, gpointer menu,
MenuItem *item, gboolean first)
@@ -649,12 +683,17 @@ gtk_menu_item_func (EUserCreatableItemsH
handler->priv->accel_group,
'n', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE);
- } else if (item->shortcut != '\0') {
+ } else if (item->shortcut && *item->shortcut) {
+ char *san_accel = sanitize_accel (item->shortcut);
+ guint mod, accel;
+
+ gtk_accelerator_parse (san_accel, &accel, &mod);
gtk_widget_add_accelerator (menuitem, "activate",
handler->priv->accel_group,
- item->shortcut,
- GDK_CONTROL_MASK | GDK_SHIFT_MASK,
+ accel,
+ mod,
GTK_ACCEL_VISIBLE);
+ g_free (san_accel);
}
g_object_set_data (G_OBJECT (menuitem), "EUserCreatableItemsHandler:verb", item->verb);
Index: shell/evolution-test-component.c
===================================================================
RCS file: /cvs/gnome/evolution/shell/evolution-test-component.c,v
retrieving revision 1.42
diff -u -p -r1.42 evolution-test-component.c
--- shell/evolution-test-component.c 12 Jan 2004 05:26:25 -0000 1.42
+++ shell/evolution-test-component.c 12 Sep 2006 05:58:38 -0000
@@ -140,7 +140,7 @@ impl__get_userCreatableItems (PortableSe
list->_buffer[0].description = _("New Test");
list->_buffer[0].menuDescription = _("_Test");
list->_buffer[0].tooltip = _("Create a new test item");
- list->_buffer[0].menuShortcut = 'i';
+ list->_buffer[0].menuShortcut = "*Shift**Control*i";
list->_buffer[0].iconName = "";
return list;
Index: shell/shell.error.xml
===================================================================
RCS file: /cvs/gnome/evolution/shell/shell.error.xml,v
retrieving revision 1.10
diff -u -p -r1.10 shell.error.xml
--- shell/shell.error.xml 5 Feb 2006 20:18:12 -0000 1.10
+++ shell/shell.error.xml 12 Sep 2006 05:58:38 -0000
@@ -79,5 +79,9 @@ Click help for details.
-
+
+ <_primary>Shortcut key already assigned
+ <_secondary xml:space="preserve">Shortcut key "{0}" is already assigned to "{1}". Please choose a different shortcut key.
+
+
Index: ui/Makefile.am
===================================================================
RCS file: /cvs/gnome/evolution/ui/Makefile.am,v
retrieving revision 1.30
diff -u -p -r1.30 Makefile.am
--- ui/Makefile.am 27 Jan 2006 19:32:41 -0000 1.30
+++ ui/Makefile.am 12 Sep 2006 05:58:38 -0000
@@ -1,5 +1,6 @@
XML_FILES = \
evolution.xml \
+ evolution-uci.xml \
evolution-addressbook.xml \
evolution-calendar.xml \
evolution-composer-entries.xml \
Index: ui/evolution-addressbook.xml
===================================================================
RCS file: /cvs/gnome/evolution/ui/evolution-addressbook.xml,v
retrieving revision 1.74
diff -u -p -r1.74 evolution-addressbook.xml
--- ui/evolution-addressbook.xml 26 Apr 2006 08:57:47 -0000 1.74
+++ ui/evolution-addressbook.xml 12 Sep 2006 05:58:38 -0000
@@ -1,92 +1,106 @@
+
+
+ _editorlabel="Forward Contact" _tip="Send selected contacts to another person."/>
+ _editorlabel="Send Message to Contact" _tip="Send a message to the selected contacts."/>
+ _editorlabel="Copy Contact to Folder" accel="*Shift**Control*y"/>
+ _editorlabel="Move Contact to Folder" accel="*Shift**Control*v"/>
+ _editorlabel="Copy All Contacts To" pixtype="pixbuf"/>
+ _editorlabel="Movel All Contacts To" pixtype="pixbuf"/>
+ _editorlabel="Save Address Book As VCard" pixtype="pixbuf"/>
+ _editorlabel="Delete Addressbook" pixtype="pixbuf"/>
+ _editorlabel="Rename Address Book" pixtype="pixbuf"/>
+ _editorlabel="Addressbook Properties" pixtype="pixbuf"/>