aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@src.gnome.org>2009-01-18 04:06:17 +0800
committerMatthew Barnes <mbarnes@src.gnome.org>2009-01-18 04:06:17 +0800
commitc22126d54f0cf0637e3d5ddd5d78b3ff5d111582 (patch)
tree64f296a85dd817e3184159126e8dbde39c173363
parent4d07d219d1f18aeba2c16317ade4b4004d8934b9 (diff)
downloadgsoc2013-evolution-c22126d54f0cf0637e3d5ddd5d78b3ff5d111582.tar.gz
gsoc2013-evolution-c22126d54f0cf0637e3d5ddd5d78b3ff5d111582.tar.zst
gsoc2013-evolution-c22126d54f0cf0637e3d5ddd5d78b3ff5d111582.zip
Hack GtkIconTheme so we can reference category icons as named icons.
Necessary for EActionComboBox, since GtkActions can only handle named or stock icons. Hopefully this is just a temporary hack. Eventually we should make the category icons themeable. Kill the "mail-account-disable" plugin and integrate it properly. More dead plugins to follow... Don't show disabled menu items in pop-up context menus. It does the user no good to see things he CAN'T do with the object he clicked on. svn path=/branches/kill-bonobo/; revision=37093
-rw-r--r--addressbook/gui/component/e-book-shell-view-actions.c19
-rw-r--r--calendar/modules/e-cal-shell-view-actions.c19
-rw-r--r--calendar/modules/e-memo-shell-view-actions.c19
-rw-r--r--calendar/modules/e-task-shell-view-actions.c19
-rw-r--r--configure.in4
-rw-r--r--mail/e-mail-shell-view-actions.c127
-rw-r--r--mail/e-mail-shell-view-actions.h16
-rw-r--r--mail/e-mail-shell-view-private.c4
-rw-r--r--mail/e-mail-shell-view-private.h2
-rw-r--r--mail/e-mail-shell-view.c19
-rw-r--r--plugins/calendar-weather/Makefile.am10
-rw-r--r--plugins/calendar-weather/calendar-weather.c27
-rw-r--r--plugins/calendar-weather/category_weather_cloudy_16.pngbin597 -> 0 bytes
-rw-r--r--plugins/calendar-weather/category_weather_fog_16.pngbin217 -> 0 bytes
-rw-r--r--plugins/calendar-weather/category_weather_partly_cloudy_16.pngbin760 -> 0 bytes
-rw-r--r--plugins/calendar-weather/category_weather_rain_16.pngbin647 -> 0 bytes
-rw-r--r--plugins/calendar-weather/category_weather_snow_16.pngbin624 -> 0 bytes
-rw-r--r--plugins/calendar-weather/category_weather_sun_16.pngbin420 -> 0 bytes
-rw-r--r--plugins/calendar-weather/category_weather_tstorm_16.pngbin728 -> 0 bytes
-rw-r--r--plugins/mail-account-disable/ChangeLog62
-rw-r--r--plugins/mail-account-disable/Makefile.am21
-rw-r--r--plugins/mail-account-disable/mail-account-disable.c100
-rw-r--r--plugins/mail-account-disable/org-gnome-mail-account-disable.eplug.xml18
-rw-r--r--shell/main.c33
-rw-r--r--ui/evolution-mail.ui15
-rw-r--r--widgets/misc/e-action-combo-box.c54
26 files changed, 343 insertions, 245 deletions
diff --git a/addressbook/gui/component/e-book-shell-view-actions.c b/addressbook/gui/component/e-book-shell-view-actions.c
index fc9e6b99db..ce044d08f1 100644
--- a/addressbook/gui/component/e-book-shell-view-actions.c
+++ b/addressbook/gui/component/e-book-shell-view-actions.c
@@ -884,6 +884,7 @@ e_book_shell_view_update_search_filter (EBookShellView *book_shell_view)
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;
@@ -893,6 +894,24 @@ e_book_shell_view_update_search_filter (EBookShellView *book_shell_view)
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);
diff --git a/calendar/modules/e-cal-shell-view-actions.c b/calendar/modules/e-cal-shell-view-actions.c
index 0631b6e088..c63d3c8315 100644
--- a/calendar/modules/e-cal-shell-view-actions.c
+++ b/calendar/modules/e-cal-shell-view-actions.c
@@ -1006,6 +1006,7 @@ e_cal_shell_view_update_search_filter (ECalShellView *cal_shell_view)
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;
@@ -1015,6 +1016,24 @@ e_cal_shell_view_update_search_filter (ECalShellView *cal_shell_view)
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);
diff --git a/calendar/modules/e-memo-shell-view-actions.c b/calendar/modules/e-memo-shell-view-actions.c
index 23c456c066..554f1651d5 100644
--- a/calendar/modules/e-memo-shell-view-actions.c
+++ b/calendar/modules/e-memo-shell-view-actions.c
@@ -790,6 +790,7 @@ e_memo_shell_view_update_search_filter (EMemoShellView *memo_shell_view)
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;
@@ -799,6 +800,24 @@ e_memo_shell_view_update_search_filter (EMemoShellView *memo_shell_view)
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);
diff --git a/calendar/modules/e-task-shell-view-actions.c b/calendar/modules/e-task-shell-view-actions.c
index 21e9d89767..61a1455809 100644
--- a/calendar/modules/e-task-shell-view-actions.c
+++ b/calendar/modules/e-task-shell-view-actions.c
@@ -980,6 +980,7 @@ e_task_shell_view_update_search_filter (ETaskShellView *task_shell_view)
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;
@@ -989,6 +990,24 @@ e_task_shell_view_update_search_filter (ETaskShellView *task_shell_view)
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);
diff --git a/configure.in b/configure.in
index 7476bedb03..0ebb69820f 100644
--- a/configure.in
+++ b/configure.in
@@ -1758,7 +1758,7 @@ AC_ARG_ENABLE([plugins],
[enable_plugins="$enableval"],[enable_plugins=all])
dnl Add any new plugins here
-plugins_base_always="calendar-file calendar-http $CALENDAR_WEATHER itip-formatter plugin-manager default-source addressbook-file startup-wizard mark-all-read groupwise-features groupwise-account-setup mail-account-disable publish-calendar caldav imap-features google-account-setup webdav-account-setup"
+plugins_base_always="calendar-file calendar-http $CALENDAR_WEATHER itip-formatter plugin-manager default-source addressbook-file startup-wizard mark-all-read groupwise-features groupwise-account-setup publish-calendar caldav imap-features google-account-setup webdav-account-setup"
plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $EXCHANGE_PLUGIN $MONO_PLUGIN "
all_plugins_base="$plugins_base_always sa-junk-plugin bogo-junk-plugin exchange-operations mono"
@@ -1789,7 +1789,6 @@ dnl groupwise-features
dnl import-ics-attachments
dnl ipod-sync
dnl itip-formatter
-dnl mail-account-disable
dnl mailing-list-actions
dnl mail-to-task
dnl mark-all-read
@@ -2102,7 +2101,6 @@ plugins/startup-wizard/Makefile
plugins/groupwise-account-setup/Makefile
plugins/hula-account-setup/Makefile
plugins/groupwise-features/Makefile
-plugins/mail-account-disable/Makefile
plugins/sa-junk-plugin/Makefile
plugins/bogo-junk-plugin/Makefile
plugins/ipod-sync/Makefile
diff --git a/mail/e-mail-shell-view-actions.c b/mail/e-mail-shell-view-actions.c
index 8ad9766e2d..8037470ffe 100644
--- a/mail/e-mail-shell-view-actions.c
+++ b/mail/e-mail-shell-view-actions.c
@@ -22,6 +22,45 @@
#include "e-mail-shell-view-private.h"
static void
+action_mail_account_disable_cb (GtkAction *action,
+ EMailShellView *mail_shell_view)
+{
+ EMailShellSidebar *mail_shell_sidebar;
+ EShellModule *shell_module;
+ EShellView *shell_view;
+ EMFolderTree *folder_tree;
+ EAccountList *account_list;
+ EAccount *account;
+ gchar *folder_uri;
+
+ shell_view = E_SHELL_VIEW (mail_shell_view);
+ shell_module = e_shell_view_get_shell_module (shell_view);
+
+ mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar;
+ folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
+ folder_uri = em_folder_tree_get_selected_uri (folder_tree);
+ g_return_if_fail (folder_uri != NULL);
+
+ account = mail_config_get_account_by_source_url (folder_uri);
+ g_return_if_fail (account != NULL);
+
+ if (mail_config_has_proxies (account))
+ mail_config_remove_account_proxies (account);
+
+ account->enabled = !account->enabled;
+ account_list = mail_config_get_accounts ();
+ e_account_list_change (account_list, account);
+ e_mail_shell_module_remove_store_by_uri (shell_module, folder_uri);
+
+ if (account->parent_uid != NULL)
+ mail_config_remove_account (account);
+
+ mail_config_save_accounts ();
+
+ g_free (folder_uri);
+}
+
+static void
action_mail_create_search_folder_cb (GtkAction *action,
EMailShellView *mail_shell_view)
{
@@ -504,6 +543,13 @@ action_mail_view_cb (GtkRadioAction *action,
static GtkActionEntry mail_entries[] = {
+ { "mail-account-disable",
+ NULL,
+ N_("_Disable Account"),
+ NULL,
+ N_("Disable this account"),
+ G_CALLBACK (action_mail_account_disable_cb) },
+
{ "mail-create-search-folder",
NULL,
N_("C_reate Search Folder From Search..."),
@@ -679,6 +725,57 @@ static GtkActionEntry mail_entries[] = {
N_("Subscribe or unsubscribe to folders on remote servers"),
G_CALLBACK (action_mail_tools_subscriptions_cb) },
+ /*** Popup Menu Variations ***/
+
+ { "mail-popup-folder-copy",
+ "folder-copy",
+ N_("_Copy Folder To..."),
+ NULL,
+ N_("Copy the selected folder into another folder"),
+ G_CALLBACK (action_mail_folder_copy_cb) },
+
+ { "mail-popup-folder-delete",
+ GTK_STOCK_DELETE,
+ NULL,
+ NULL,
+ N_("Permanently remove this folder"),
+ G_CALLBACK (action_mail_folder_delete_cb) },
+
+ { "mail-popup-folder-move",
+ "folder-move",
+ N_("_Move Folder To..."),
+ NULL,
+ N_("Move the selected folder into another folder"),
+ G_CALLBACK (action_mail_folder_move_cb) },
+
+ { "mail-popup-folder-new",
+ "folder-new",
+ N_("_New Folder..."),
+ NULL,
+ N_("Create a new folder for storing mail"),
+ G_CALLBACK (action_mail_folder_new_cb) },
+
+ { "mail-popup-folder-properties",
+ GTK_STOCK_PROPERTIES,
+ NULL,
+ NULL,
+ N_("Change the properties of this folder"),
+ G_CALLBACK (action_mail_folder_properties_cb) },
+
+ { "mail-popup-folder-refresh",
+ GTK_STOCK_REFRESH,
+ NULL,
+ NULL,
+ N_("Refresh the folder"),
+ G_CALLBACK (action_mail_folder_refresh_cb) },
+
+ { "mail-popup-folder-rename",
+ NULL,
+ N_("_Rename..."),
+ NULL,
+ N_("Change the name of this folder"),
+ G_CALLBACK (action_mail_folder_rename_cb) },
+
/*** Menus ***/
{ "mail-folder-menu",
@@ -991,4 +1088,34 @@ e_mail_shell_view_actions_init (EMailShellView *mail_shell_view)
object = G_OBJECT (ACTION (MAIL_VIEW_VERTICAL));
key = "/apps/evolution/mail/display/layout";
gconf_bridge_bind_property (bridge, key, object, "current-value");
+
+ /* Fine tuning. */
+
+ e_binding_new (
+ G_OBJECT (ACTION (MAIL_FOLDER_COPY)), "sensitive",
+ G_OBJECT (ACTION (MAIL_POPUP_FOLDER_COPY)), "visible");
+
+ e_binding_new (
+ G_OBJECT (ACTION (MAIL_FOLDER_DELETE)), "sensitive",
+ G_OBJECT (ACTION (MAIL_POPUP_FOLDER_DELETE)), "visible");
+
+ e_binding_new (
+ G_OBJECT (ACTION (MAIL_FOLDER_MOVE)), "sensitive",
+ G_OBJECT (ACTION (MAIL_POPUP_FOLDER_MOVE)), "visible");
+
+ e_binding_new (
+ G_OBJECT (ACTION (MAIL_FOLDER_NEW)), "sensitive",
+ G_OBJECT (ACTION (MAIL_POPUP_FOLDER_NEW)), "visible");
+
+ e_binding_new (
+ G_OBJECT (ACTION (MAIL_FOLDER_PROPERTIES)), "sensitive",
+ G_OBJECT (ACTION (MAIL_POPUP_FOLDER_PROPERTIES)), "visible");
+
+ e_binding_new (
+ G_OBJECT (ACTION (MAIL_FOLDER_REFRESH)), "sensitive",
+ G_OBJECT (ACTION (MAIL_POPUP_FOLDER_REFRESH)), "visible");
+
+ e_binding_new (
+ G_OBJECT (ACTION (MAIL_FOLDER_RENAME)), "sensitive",
+ G_OBJECT (ACTION (MAIL_POPUP_FOLDER_RENAME)), "visible");
}
diff --git a/mail/e-mail-shell-view-actions.h b/mail/e-mail-shell-view-actions.h
index 5538385911..55125657b6 100644
--- a/mail/e-mail-shell-view-actions.h
+++ b/mail/e-mail-shell-view-actions.h
@@ -25,6 +25,8 @@
#include <shell/e-shell-window-actions.h>
/* Mail Actions */
+#define E_SHELL_WINDOW_ACTION_MAIL_ACCOUNT_DISABLE(window) \
+ E_SHELL_WINDOW_ACTION ((window), "mail-account-disable")
#define E_SHELL_WINDOW_ACTION_MAIL_ADD_SENDER(window) \
E_SHELL_WINDOW_ACTION ((window), "mail-add-sender")
#define E_SHELL_WINDOW_ACTION_MAIL_CARET_MODE(window) \
@@ -133,6 +135,20 @@
E_SHELL_WINDOW_ACTION ((window), "mail-next-thread")
#define E_SHELL_WINDOW_ACTION_MAIL_NEXT_UNREAD(window) \
E_SHELL_WINDOW_ACTION ((window), "mail-next-unread")
+#define E_SHELL_WINDOW_ACTION_MAIL_POPUP_FOLDER_COPY(window) \
+ E_SHELL_WINDOW_ACTION ((window), "mail-popup-folder-copy")
+#define E_SHELL_WINDOW_ACTION_MAIL_POPUP_FOLDER_DELETE(window) \
+ E_SHELL_WINDOW_ACTION ((window), "mail-popup-folder-delete")
+#define E_SHELL_WINDOW_ACTION_MAIL_POPUP_FOLDER_MOVE(window) \
+ E_SHELL_WINDOW_ACTION ((window), "mail-popup-folder-move")
+#define E_SHELL_WINDOW_ACTION_MAIL_POPUP_FOLDER_NEW(window) \
+ E_SHELL_WINDOW_ACTION ((window), "mail-popup-folder-new")
+#define E_SHELL_WINDOW_ACTION_MAIL_POPUP_FOLDER_PROPERTIES(window) \
+ E_SHELL_WINDOW_ACTION ((window), "mail-popup-folder-properties")
+#define E_SHELL_WINDOW_ACTION_MAIL_POPUP_FOLDER_REFRESH(window) \
+ E_SHELL_WINDOW_ACTION ((window), "mail-popup-folder-refresh")
+#define E_SHELL_WINDOW_ACTION_MAIL_POPUP_FOLDER_RENAME(window) \
+ E_SHELL_WINDOW_ACTION ((window), "mail-popup-folder-rename")
#define E_SHELL_WINDOW_ACTION_MAIL_PREVIEW(window) \
E_SHELL_WINDOW_ACTION ((window), "mail-preview")
#define E_SHELL_WINDOW_ACTION_MAIL_PREVIOUS(window) \
diff --git a/mail/e-mail-shell-view-private.c b/mail/e-mail-shell-view-private.c
index 728f056421..c175e1ad4d 100644
--- a/mail/e-mail-shell-view-private.c
+++ b/mail/e-mail-shell-view-private.c
@@ -34,7 +34,7 @@ mail_shell_view_folder_tree_selected_cb (EMailShellView *mail_shell_view,
reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content);
- if ((flags & CAMEL_FOLDER_NOSELECT) || full_name == NULL)
+ if ((flags & CAMEL_FOLDER_NOSELECT) || uri == NULL)
e_mail_reader_set_folder (reader, NULL, NULL);
else {
EMFolderTreeModel *model;
@@ -45,6 +45,8 @@ mail_shell_view_folder_tree_selected_cb (EMailShellView *mail_shell_view,
e_mail_reader_set_folder_uri (reader, uri);
}
+
+ e_shell_view_update_actions (E_SHELL_VIEW (mail_shell_view));
}
static void
diff --git a/mail/e-mail-shell-view-private.h b/mail/e-mail-shell-view-private.h
index 6c6b9d29fa..af9cc1a673 100644
--- a/mail/e-mail-shell-view-private.h
+++ b/mail/e-mail-shell-view-private.h
@@ -29,6 +29,7 @@
#include <camel/camel-vtrash-folder.h>
#include "e-util/e-util.h"
+#include "e-util/e-binding.h"
#include "e-util/gconf-bridge.h"
#include "widgets/menus/gal-view-instance.h"
@@ -40,6 +41,7 @@
#include "em-subscribe-editor.h"
#include "em-utils.h"
#include "mail-autofilter.h"
+#include "mail-config.h"
#include "mail-ops.h"
#include "mail-send-recv.h"
#include "mail-vfolder.h"
diff --git a/mail/e-mail-shell-view.c b/mail/e-mail-shell-view.c
index 74870e59cb..74fa2e2291 100644
--- a/mail/e-mail-shell-view.c
+++ b/mail/e-mail-shell-view.c
@@ -91,14 +91,17 @@ mail_shell_view_update_actions (EShellView *shell_view)
EShellSidebar *shell_sidebar;
EShellWindow *shell_window;
EMFolderTree *folder_tree;
+ EAccount *account;
GtkAction *action;
CamelURL *camel_url;
+ const gchar *label;
gchar *uri;
gboolean sensitive;
gboolean visible;
guint32 state;
/* Be descriptive. */
+ gboolean account_is_groupwise;
gboolean folder_allows_children;
gboolean folder_can_be_deleted;
gboolean folder_is_junk;
@@ -130,9 +133,25 @@ mail_shell_view_update_actions (EShellView *shell_view)
(state & E_MAIL_SHELL_SIDEBAR_FOLDER_IS_TRASH);
uri = em_folder_tree_get_selected_uri (folder_tree);
+ account = mail_config_get_account_by_source_url (uri);
camel_url = camel_url_new (uri, NULL);
+
+ /* FIXME This belongs in a GroupWise plugin. */
+ account_is_groupwise =
+ (g_strrstr (uri, "groupwise://") != NULL) &&
+ account != NULL && account->parent_uid != NULL;
+
g_free (uri);
+ action = ACTION (MAIL_ACCOUNT_DISABLE);
+ visible = (account != NULL) && folder_is_store;
+ if (account_is_groupwise)
+ label = _("Proxy _Logout");
+ else
+ label = _("_Disable Account");
+ gtk_action_set_visible (action, visible);
+ g_object_set (action, "label", label, NULL);
+
action = ACTION (MAIL_EMPTY_TRASH);
visible = folder_is_trash;
gtk_action_set_visible (action, visible);
diff --git a/plugins/calendar-weather/Makefile.am b/plugins/calendar-weather/Makefile.am
index 2e2be150e3..cb0253e8fe 100644
--- a/plugins/calendar-weather/Makefile.am
+++ b/plugins/calendar-weather/Makefile.am
@@ -1,5 +1,4 @@
eds_datadir = `pkg-config --variable=privdatadir evolution-data-server-1.2`
-weatherdatadir = $(datadir)/evolution/$(BASE_VERSION)/weather
INCLUDES = \
-I$(top_srcdir) \
@@ -12,15 +11,6 @@ INCLUDES = \
@EVO_PLUGIN_RULE@
-weatherdata_DATA = \
- category_weather_cloudy_16.png \
- category_weather_fog_16.png \
- category_weather_partly_cloudy_16.png \
- category_weather_rain_16.png \
- category_weather_snow_16.png \
- category_weather_sun_16.png \
- category_weather_tstorm_16.png
-
plugin_DATA = org-gnome-calendar-weather.eplug
plugin_LTLIBRARIES = liborg-gnome-calendar-weather.la
diff --git a/plugins/calendar-weather/calendar-weather.c b/plugins/calendar-weather/calendar-weather.c
index a6dce31326..c16883ae23 100644
--- a/plugins/calendar-weather/calendar-weather.c
+++ b/plugins/calendar-weather/calendar-weather.c
@@ -51,8 +51,8 @@ int
e_plugin_lib_enable (EPluginLib *epl, int enable)
{
GList *l;
- gboolean found = FALSE;
- const char *tmp;
+ const gchar *tmp;
+ gint ii;
static struct {
const char *description;
@@ -74,24 +74,21 @@ e_plugin_lib_enable (EPluginLib *epl, int enable)
/* Add the categories icons if we don't have them. */
for (l = e_categories_get_list (); l; l = g_list_next (l)) {
- if (!strcmp ((const char *)l->data, tmp)) {
- found = TRUE;
- break;
- }
+ if (!strcmp ((const char *)l->data, tmp))
+ goto exit;
}
- if (!found) {
- int i;
-
- for (i = 0; categories[i].description; i++) {
- char *filename;
+ for (ii = 0; categories[ii].description; ii++) {
+ char *filename;
- filename = e_icon_factory_get_icon_filename (categories[i].icon_name, E_ICON_SIZE_MENU);
- e_categories_add (_(categories[i].description), NULL, filename, FALSE);
- g_free (filename);
- }
+ filename = e_icon_factory_get_icon_filename (
+ categories[ii].icon_name, E_ICON_SIZE_MENU);
+ e_categories_add (
+ _(categories[ii].description), NULL, filename, FALSE);
+ g_free (filename);
}
+exit:
return 0;
}
diff --git a/plugins/calendar-weather/category_weather_cloudy_16.png b/plugins/calendar-weather/category_weather_cloudy_16.png
deleted file mode 100644
index ddb3ba7c59..0000000000
--- a/plugins/calendar-weather/category_weather_cloudy_16.png
+++ /dev/null
Binary files differ
diff --git a/plugins/calendar-weather/category_weather_fog_16.png b/plugins/calendar-weather/category_weather_fog_16.png
deleted file mode 100644
index 23e4e2f1d4..0000000000
--- a/plugins/calendar-weather/category_weather_fog_16.png
+++ /dev/null
Binary files differ
diff --git a/plugins/calendar-weather/category_weather_partly_cloudy_16.png b/plugins/calendar-weather/category_weather_partly_cloudy_16.png
deleted file mode 100644
index 472feaa654..0000000000
--- a/plugins/calendar-weather/category_weather_partly_cloudy_16.png
+++ /dev/null
Binary files differ
diff --git a/plugins/calendar-weather/category_weather_rain_16.png b/plugins/calendar-weather/category_weather_rain_16.png
deleted file mode 100644
index e00d5e1c82..0000000000
--- a/plugins/calendar-weather/category_weather_rain_16.png
+++ /dev/null
Binary files differ
diff --git a/plugins/calendar-weather/category_weather_snow_16.png b/plugins/calendar-weather/category_weather_snow_16.png
deleted file mode 100644
index 5e95985f5f..0000000000
--- a/plugins/calendar-weather/category_weather_snow_16.png
+++ /dev/null
Binary files differ
diff --git a/plugins/calendar-weather/category_weather_sun_16.png b/plugins/calendar-weather/category_weather_sun_16.png
deleted file mode 100644
index 780c61c23c..0000000000
--- a/plugins/calendar-weather/category_weather_sun_16.png
+++ /dev/null
Binary files differ
diff --git a/plugins/calendar-weather/category_weather_tstorm_16.png b/plugins/calendar-weather/category_weather_tstorm_16.png
deleted file mode 100644
index b2af092b53..0000000000
--- a/plugins/calendar-weather/category_weather_tstorm_16.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mail-account-disable/ChangeLog b/plugins/mail-account-disable/ChangeLog
deleted file mode 100644
index 86dc9a4897..0000000000
--- a/plugins/mail-account-disable/ChangeLog
+++ /dev/null
@@ -1,62 +0,0 @@
-2008-10-03 Sankar P <psankar@novell.com>
-
-License Changes
-
- * mail-account-disable.c:
-
-2007-11-18 Gilles Dartiguelongue <gdartigu@svn.gnome.org>
-
- ** Fix bug #495875
-
- * mail-account-disable.c:
- right click menu reordering
-
-2007-04-02 Sankar P <psankar@novell.com>
-
- * Committed on behalf of Gilles Dartiguelongue <dartigug@esiee.fr>
-
- * org-gnome-mail-account-disable.eplug.xml:
- Cleanup.
- Fixes part of #301149
-
-2006-08-21 Matthew Barnes <mbarnes@redhat.com>
-
- * mail-account-disable.c:
- "Disable" did not work for "On This Computer" - fixes bug 350901.
-
-2006-01-06 Simon Zheng <simon.zheng@sun.com>
-
- * mail-account-disable.c:
- use libedataserver/e-account-list.h instead of e-util/e-account-list.h.
- use libedataserver/e-account.h instead of e-util/e-account.h.
-
-2005-12-12 Harish Krishnaswamy <kharish@novell.com>
-
- * Makefile.am: Fix make-clean issues.
-
-2005-08-23 Not Zed <NotZed@Ximian.com>
-
- * Makefile.am: Remove the special case for win32, its a bug on all
- platforms, silly.
-
- * mail-account-disable.c (mail_account_disable): make signature
- match usage.
-
-2005-07-13 Tor Lillqvist <tml@novell.com>
-
- * Makefile.am (INCLUDES): Remove duplicated line.
- (LDFLAGS): Use NO_UNDEFINED.
- (LIBADD): Link with the required libraries, but let's do it only
- on Win32.
-
- * org-gnome-mail-account-disable.eplug.xml: Use SOEXT.
-
-2005-07-12 Vivek Jain <jvivek@novell.com>
-
- have a ChangeLog and transfer the changelog entry from the main
- ChangeLog
- (2005-07-10 Shreyas Srinivasan <sshreyas@novell.com>)
-
- * plugins/mail-account-disable/*: Plugin to add Disable/ Proxy
- Logout to a store menu on right click.
-
diff --git a/plugins/mail-account-disable/Makefile.am b/plugins/mail-account-disable/Makefile.am
deleted file mode 100644
index 7ec8a1124e..0000000000
--- a/plugins/mail-account-disable/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_builddir)/mail \
- $(EVOLUTION_MAIL_CFLAGS) \
- -DEVOLUTION_GLADEDIR=\""$(gladedir)"\"
-
-@EVO_PLUGIN_RULE@
-
-plugin_DATA = org-gnome-mail-account-disable.eplug
-plugin_LTLIBRARIES = libmail-account-disable.la
-
-libmail_account_disable_la_SOURCES = mail-account-disable.c
-libmail_account_disable_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
-libmail_account_disable_la_LIBADD = $(top_builddir)/e-util/libeutil.la \
- $(top_builddir)/mail/libevolution-mail.la \
- $(EVOLUTION_MAIL_LIBS)
-
-EXTRA_DIST = org-gnome-mail-account-disable.eplug.xml
-
-BUILT_SOURCES = $(plugin_DATA)
-CLEANFILES = $(BUILT_SOURCES)
diff --git a/plugins/mail-account-disable/mail-account-disable.c b/plugins/mail-account-disable/mail-account-disable.c
deleted file mode 100644
index 886b66a66f..0000000000
--- a/plugins/mail-account-disable/mail-account-disable.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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 <http://www.gnu.org/licenses/>
- *
- *
- * Authors:
- * Shreyas Srinivasan <sshreyas@novell.com>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <string.h>
-#include <mail/mail-component.h>
-#include <mail/em-folder-selector.h>
-#include <mail/em-popup.h>
-#include <mail/em-account-editor.h>
-#include <mail/mail-config.h>
-#include <libedataserver/e-account.h>
-#include <libedataserver/e-account-list.h>
-
-#define ACCOUNT_DISABLE 0
-#define PROXY_LOGOUT 1
-
-void mail_account_disable (EPopup *ep, EPopupItem *p, void *data);
-void org_gnome_create_mail_account_disable (EPlugin *ep, EMPopupTargetFolder *t);
-
-static EPopupItem popup_items[] = {
- { E_POPUP_ITEM, "40.emc.04", N_("_Disable"), mail_account_disable, NULL, NULL, 0, EM_POPUP_FOLDER_STORE },
- { E_POPUP_ITEM, "40.emc.04", N_("Proxy _Logout"), mail_account_disable, NULL, NULL, 0, EM_POPUP_FOLDER_STORE }
-};
-
-static void
-popup_free (EPopup *ep, GSList *items, void *data)
-{
- g_slist_free (items);
-}
-
-void
-mail_account_disable (EPopup *ep, EPopupItem *p, void *data)
-{
- MailComponent *component;
- EAccount *account = data;
-
- g_assert (account != NULL);
-
- component = mail_component_peek ();
-
- if (mail_config_has_proxies (account))
- mail_config_remove_account_proxies (account);
-
- account->enabled = !account->enabled;
- e_account_list_change (mail_config_get_accounts (), account);
- mail_component_remove_store_by_uri (component, account->source->url);
-
- if (account->parent_uid)
- mail_config_remove_account (account);
-
- mail_config_save_accounts();
-}
-
-void
-org_gnome_create_mail_account_disable (EPlugin *ep, EMPopupTargetFolder *t)
-{
- EAccount *account;
- GSList *menus = NULL;
-
- account = mail_config_get_account_by_source_url (t->uri);
-
- if (account == NULL)
- return;
-
- if (g_strrstr (t->uri,"groupwise://") && account->parent_uid) {
- popup_items[PROXY_LOGOUT].label = _(popup_items [PROXY_LOGOUT].label);
- menus = g_slist_prepend (menus, &popup_items [PROXY_LOGOUT]);
- }
- else {
- popup_items[ACCOUNT_DISABLE].label = _(popup_items [ACCOUNT_DISABLE].label);
- menus = g_slist_prepend (menus, &popup_items [ACCOUNT_DISABLE]);
- }
-
- e_popup_add_items (t->target.popup, menus, NULL, popup_free, account);
-}
-
diff --git a/plugins/mail-account-disable/org-gnome-mail-account-disable.eplug.xml b/plugins/mail-account-disable/org-gnome-mail-account-disable.eplug.xml
deleted file mode 100644
index f1e0b34ef9..0000000000
--- a/plugins/mail-account-disable/org-gnome-mail-account-disable.eplug.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<e-plugin-list>
- <e-plugin
- id="org.gnome.mail.account.disable"
- type="shlib"
- domain="@GETTEXT_PACKAGE@"
- _name="Disable Account"
- location="@PLUGINDIR@/libmail-account-disable@SOEXT@">
- <_description>Allows disabling of accounts.</_description>
- <author name="Shreyas Srinivasan" email="sshreyas@novell.com"/>
-
- <hook class="org.gnome.evolution.mail.popup:1.0">
- <menu id="org.gnome.evolution.mail.foldertree.popup" target="folder"
- factory="org_gnome_create_mail_account_disable">
- </menu>
- </hook>
- </e-plugin>
-</e-plugin-list>
diff --git a/shell/main.c b/shell/main.c
index 6272b6ad18..6dac5f062b 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -57,6 +57,7 @@
#include <bonobo-activation/bonobo-activation.h>
+#include <libedataserver/e-categories.h>
#include <libedataserverui/e-passwords.h>
#include <glade/glade.h>
@@ -166,6 +167,37 @@ kill_old_dataserver (void)
}
#endif
+static void
+categories_icon_theme_hack (void)
+{
+ GtkIconTheme *icon_theme;
+ const gchar *category_name;
+ const gchar *filename;
+ gchar *dirname;
+
+ /* XXX Allow the category icons to be referenced as named
+ * icons, since GtkAction does not support GdkPixbufs. */
+
+ /* Get the icon file for some default category. Doesn't matter
+ * which, so long as it has an icon. We're just interested in
+ * the directory components. */
+ category_name = _("Birthday");
+ filename = e_categories_get_icon_file_for (category_name);
+ g_return_if_fail (filename != NULL && *filename != '\0');
+
+ /* Extract the directory components. */
+ dirname = g_path_get_dirname (filename);
+ g_debug ("Category Icon Path: %s", dirname);
+
+ /* Add it to the icon theme's search path. This relies on
+ * GtkIconTheme's legacy feature of using image files found
+ * directly in the search path. */
+ icon_theme = gtk_icon_theme_get_default ();
+ gtk_icon_theme_append_search_path (icon_theme, dirname);
+
+ g_free (dirname);
+}
+
#ifdef DEVELOPMENT
@@ -650,6 +682,7 @@ main (int argc, char **argv)
if (setup_only)
exit (0);
+ categories_icon_theme_hack ();
gnome_sound_init ("localhost");
gtk_accel_map_load (e_get_accels_filename ());
diff --git a/ui/evolution-mail.ui b/ui/evolution-mail.ui
index 76e93a43b4..cc5a4d348c 100644
--- a/ui/evolution-mail.ui
+++ b/ui/evolution-mail.ui
@@ -67,18 +67,19 @@
<placeholder name='mail-toolbar-navigation'/>
</toolbar>
<popup name='mail-folder-popup'>
- <menuitem action='mail-folder-new'/>
- <menuitem action='mail-folder-copy'/>
- <menuitem action='mail-folder-move'/>
+ <menuitem action='mail-popup-folder-new'/>
+ <menuitem action='mail-popup-folder-copy'/>
+ <menuitem action='mail-popup-folder-move'/>
<separator/>
- <menuitem action='mail-folder-delete'/>
+ <menuitem action='mail-popup-folder-delete'/>
<separator/>
- <menuitem action='mail-folder-rename'/>
- <menuitem action='mail-folder-refresh'/>
+ <menuitem action='mail-popup-folder-rename'/>
+ <menuitem action='mail-popup-folder-refresh'/>
<menuitem action='mail-flush-outbox'/>
<menuitem action='mail-empty-trash'/>
+ <menuitem action='mail-account-disable'/>
<separator/>
- <menuitem action='mail-folder-properties'/>
+ <menuitem action='mail-popup-folder-properties'/>
</popup>
<popup name='mail-search-options'>
<menuitem action='mail-search-subject-or-sender-contains'/>
diff --git a/widgets/misc/e-action-combo-box.c b/widgets/misc/e-action-combo-box.c
index b3bc5a78a9..977ac06ade 100644
--- a/widgets/misc/e-action-combo-box.c
+++ b/widgets/misc/e-action-combo-box.c
@@ -43,6 +43,7 @@ struct _EActionComboBoxPrivate {
guint changed_handler_id; /* action::changed */
guint group_sensitive_handler_id; /* action-group::sensitive */
guint group_visible_handler_id; /* action-group::visible */
+ gboolean group_has_icons : 1;
};
static gpointer parent_class;
@@ -95,9 +96,14 @@ action_combo_box_render_pixbuf (GtkCellLayout *layout,
gchar *stock_id;
gboolean sensitive;
gboolean visible;
+ gint width;
gtk_tree_model_get (model, iter, COLUMN_ACTION, &action, -1);
+ /* Do any of the actions have an icon? */
+ if (!combo_box->priv->group_has_icons)
+ return;
+
/* A NULL action means the row is a separator. */
if (action == NULL)
return;
@@ -110,14 +116,31 @@ action_combo_box_render_pixbuf (GtkCellLayout *layout,
"visible", &visible,
NULL);
- g_object_set (
- G_OBJECT (renderer),
- "icon-name", icon_name,
- "sensitive", sensitive,
- "stock-id", stock_id,
- "stock-size", GTK_ICON_SIZE_MENU,
- "visible", visible,
- NULL);
+ /* Keep the pixbuf renderer a fixed size for proper alignment. */
+ gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, NULL);
+
+ /* We can't set both "icon-name" and "stock-id" because setting
+ * one unsets the other. So pick the one that has a non-NULL
+ * value. If both are non-NULL, "stock-id" wins. */
+
+ if (stock_id != NULL)
+ g_object_set (
+ G_OBJECT (renderer),
+ "sensitive", sensitive,
+ "stock-id", stock_id,
+ "stock-size", GTK_ICON_SIZE_MENU,
+ "visible", visible,
+ "width", width,
+ NULL);
+ else
+ g_object_set (
+ G_OBJECT (renderer),
+ "icon-name", icon_name,
+ "sensitive", sensitive,
+ "stock-size", GTK_ICON_SIZE_MENU,
+ "visible", visible,
+ "width", width,
+ NULL);
g_free (icon_name);
g_free (stock_id);
@@ -135,6 +158,7 @@ action_combo_box_render_text (GtkCellLayout *layout,
gchar *label;
gboolean sensitive;
gboolean visible;
+ gint xpad;
gtk_tree_model_get (model, iter, COLUMN_ACTION, &action, -1);
@@ -155,11 +179,14 @@ action_combo_box_render_text (GtkCellLayout *layout,
label = g_strjoinv (NULL, strv);
g_strfreev (strv);
+ xpad = combo_box->priv->group_has_icons ? 3 : 0;
+
g_object_set (
G_OBJECT (renderer),
"sensitive", sensitive,
"text", label,
"visible", visible,
+ "xpad", xpad,
NULL);
g_free (label);
@@ -201,14 +228,25 @@ action_combo_box_update_model (EActionComboBox *combo_box)
2, GTK_TYPE_RADIO_ACTION, G_TYPE_FLOAT);
list = gtk_radio_action_get_group (combo_box->priv->action);
+ combo_box->priv->group_has_icons = FALSE;
while (list != NULL) {
GtkTreeRowReference *reference;
GtkRadioAction *action = list->data;
GtkTreePath *path;
GtkTreeIter iter;
+ gchar *icon_name;
+ gchar *stock_id;
gint value;
+ g_object_get (
+ action, "icon-name", &icon_name,
+ "stock-id", &stock_id, NULL);
+ combo_box->priv->group_has_icons |=
+ (icon_name != NULL || stock_id != NULL);
+ g_free (icon_name);
+ g_free (stock_id);
+
gtk_list_store_append (list_store, &iter);
g_object_get (G_OBJECT (action), "value", &value, NULL);
gtk_list_store_set (