From 3d4b38c997b20ddc706aa72b9c858b2548438e31 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 13 Nov 2009 16:11:47 -0500 Subject: =?UTF-8?q?Bug=C2=A0601785=20-=20Menu=20glitches=20in=20memo=20and?= =?UTF-8?q?=20task=20view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/calendar/e-memo-shell-content.c | 6 ++++++ modules/calendar/e-memo-shell-content.h | 3 ++- modules/calendar/e-memo-shell-view-private.c | 5 +++++ modules/calendar/e-memo-shell-view.c | 5 ++++- modules/calendar/e-task-shell-content.c | 6 ++++++ modules/calendar/e-task-shell-content.h | 3 ++- modules/calendar/e-task-shell-view-private.c | 5 +++++ modules/calendar/e-task-shell-view.c | 5 ++++- 8 files changed, 34 insertions(+), 4 deletions(-) diff --git a/modules/calendar/e-memo-shell-content.c b/modules/calendar/e-memo-shell-content.c index b877efc546..c90b1def26 100644 --- a/modules/calendar/e-memo-shell-content.c +++ b/modules/calendar/e-memo-shell-content.c @@ -24,6 +24,7 @@ #include #include "e-util/e-binding.h" +#include "e-util/e-selection.h" #include "e-util/gconf-bridge.h" #include "shell/e-shell-utils.h" #include "widgets/menus/gal-view-etable.h" @@ -530,6 +531,7 @@ memo_shell_content_check_state (EShellContent *shell_content) EMemoTable *memo_table; ETable *table; GSList *list, *iter; + GtkClipboard *clipboard; gboolean editable = TRUE; gboolean has_url = FALSE; gint n_selected; @@ -556,6 +558,8 @@ memo_shell_content_check_state (EShellContent *shell_content) } g_slist_free (list); + clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); + if (n_selected == 1) state |= E_MEMO_SHELL_CONTENT_SELECTION_SINGLE; if (n_selected > 1) @@ -564,6 +568,8 @@ memo_shell_content_check_state (EShellContent *shell_content) state |= E_MEMO_SHELL_CONTENT_SELECTION_CAN_EDIT; if (has_url) state |= E_MEMO_SHELL_CONTENT_SELECTION_HAS_URL; + if (e_clipboard_wait_is_calendar_available (clipboard)) + state |= E_MEMO_SHELL_CONTENT_CLIPBOARD_HAS_CALENDAR; return state; } diff --git a/modules/calendar/e-memo-shell-content.h b/modules/calendar/e-memo-shell-content.h index ae2710e148..20c7db4df1 100644 --- a/modules/calendar/e-memo-shell-content.h +++ b/modules/calendar/e-memo-shell-content.h @@ -59,7 +59,8 @@ enum { E_MEMO_SHELL_CONTENT_SELECTION_SINGLE = 1 << 0, E_MEMO_SHELL_CONTENT_SELECTION_MULTIPLE = 1 << 1, E_MEMO_SHELL_CONTENT_SELECTION_CAN_EDIT = 1 << 2, - E_MEMO_SHELL_CONTENT_SELECTION_HAS_URL = 1 << 3 + E_MEMO_SHELL_CONTENT_SELECTION_HAS_URL = 1 << 3, + E_MEMO_SHELL_CONTENT_CLIPBOARD_HAS_CALENDAR = 1 << 4 }; struct _EMemoShellContent { diff --git a/modules/calendar/e-memo-shell-view-private.c b/modules/calendar/e-memo-shell-view-private.c index b0a6ee6be1..9ae26c7767 100644 --- a/modules/calendar/e-memo-shell-view-private.c +++ b/modules/calendar/e-memo-shell-view-private.c @@ -243,6 +243,11 @@ e_memo_shell_view_private_constructed (EMemoShellView *memo_shell_view) G_CALLBACK (e_memo_shell_view_update_sidebar), memo_shell_view); + g_signal_connect_swapped ( + table, "selection-change", + G_CALLBACK (e_shell_view_update_actions), + memo_shell_view); + g_signal_connect_swapped ( memo_shell_sidebar, "client-added", G_CALLBACK (memo_shell_view_selector_client_added_cb), diff --git a/modules/calendar/e-memo-shell-view.c b/modules/calendar/e-memo-shell-view.c index a391d6b7a9..7a5b68159d 100644 --- a/modules/calendar/e-memo-shell-view.c +++ b/modules/calendar/e-memo-shell-view.c @@ -171,6 +171,7 @@ memo_shell_view_update_actions (EShellView *shell_view) gboolean selection_has_url; gboolean single_memo_selected; gboolean sources_are_editable; + gboolean clipboard_has_calendar; priv = E_MEMO_SHELL_VIEW_GET_PRIVATE (shell_view); @@ -187,6 +188,8 @@ memo_shell_view_update_actions (EShellView *shell_view) (state & E_MEMO_SHELL_CONTENT_SELECTION_CAN_EDIT); selection_has_url = (state & E_MEMO_SHELL_CONTENT_SELECTION_HAS_URL); + clipboard_has_calendar = + (state & E_MEMO_SHELL_CONTENT_CLIPBOARD_HAS_CALENDAR); shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); state = e_shell_sidebar_check_state (shell_sidebar); @@ -208,7 +211,7 @@ memo_shell_view_update_actions (EShellView *shell_view) gtk_action_set_sensitive (action, sensitive); action = ACTION (MEMO_CLIPBOARD_PASTE); - sensitive = sources_are_editable; + sensitive = sources_are_editable && clipboard_has_calendar; gtk_action_set_sensitive (action, sensitive); action = ACTION (MEMO_DELETE); diff --git a/modules/calendar/e-task-shell-content.c b/modules/calendar/e-task-shell-content.c index 9dfdd91e8e..2ad4b28051 100644 --- a/modules/calendar/e-task-shell-content.c +++ b/modules/calendar/e-task-shell-content.c @@ -24,6 +24,7 @@ #include #include "e-util/e-binding.h" +#include "e-util/e-selection.h" #include "e-util/gconf-bridge.h" #include "shell/e-shell-utils.h" #include "widgets/menus/gal-view-etable.h" @@ -528,6 +529,7 @@ task_shell_content_check_state (EShellContent *shell_content) ECalendarTable *task_table; ETable *table; GSList *list, *iter; + GtkClipboard *clipboard; gboolean assignable = TRUE; gboolean editable = TRUE; gboolean has_url = FALSE; @@ -573,6 +575,8 @@ task_shell_content_check_state (EShellContent *shell_content) } g_slist_free (list); + clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); + if (n_selected == 1) state |= E_TASK_SHELL_CONTENT_SELECTION_SINGLE; if (n_selected > 1) @@ -587,6 +591,8 @@ task_shell_content_check_state (EShellContent *shell_content) state |= E_TASK_SHELL_CONTENT_SELECTION_HAS_INCOMPLETE; if (has_url) state |= E_TASK_SHELL_CONTENT_SELECTION_HAS_URL; + if (e_clipboard_wait_is_calendar_available (clipboard)) + state |= E_TASK_SHELL_CONTENT_CLIPBOARD_HAS_CALENDAR; return state; } diff --git a/modules/calendar/e-task-shell-content.h b/modules/calendar/e-task-shell-content.h index f5d4fc9665..e5bdecd8c0 100644 --- a/modules/calendar/e-task-shell-content.h +++ b/modules/calendar/e-task-shell-content.h @@ -63,7 +63,8 @@ enum { E_TASK_SHELL_CONTENT_SELECTION_CAN_EDIT = 1 << 3, E_TASK_SHELL_CONTENT_SELECTION_HAS_COMPLETE = 1 << 4, E_TASK_SHELL_CONTENT_SELECTION_HAS_INCOMPLETE = 1 << 5, - E_TASK_SHELL_CONTENT_SELECTION_HAS_URL = 1 << 6 + E_TASK_SHELL_CONTENT_SELECTION_HAS_URL = 1 << 6, + E_TASK_SHELL_CONTENT_CLIPBOARD_HAS_CALENDAR = 1 << 7 }; struct _ETaskShellContent { diff --git a/modules/calendar/e-task-shell-view-private.c b/modules/calendar/e-task-shell-view-private.c index 74dd295bcb..80a68729b0 100644 --- a/modules/calendar/e-task-shell-view-private.c +++ b/modules/calendar/e-task-shell-view-private.c @@ -297,6 +297,11 @@ e_task_shell_view_private_constructed (ETaskShellView *task_shell_view) G_CALLBACK (e_task_shell_view_update_sidebar), task_shell_view); + g_signal_connect_swapped ( + table, "selection-change", + G_CALLBACK (e_shell_view_update_actions), + task_shell_view); + g_signal_connect_swapped ( task_shell_sidebar, "client-added", G_CALLBACK (task_shell_view_selector_client_added_cb), diff --git a/modules/calendar/e-task-shell-view.c b/modules/calendar/e-task-shell-view.c index 72d6c1d117..a55d120cb8 100644 --- a/modules/calendar/e-task-shell-view.c +++ b/modules/calendar/e-task-shell-view.c @@ -286,6 +286,7 @@ task_shell_view_update_actions (EShellView *shell_view) gboolean some_tasks_complete; gboolean some_tasks_incomplete; gboolean sources_are_editable; + gboolean clipboard_has_calendar; priv = E_TASK_SHELL_VIEW_GET_PRIVATE (shell_view); @@ -308,6 +309,8 @@ task_shell_view_update_actions (EShellView *shell_view) (state & E_TASK_SHELL_CONTENT_SELECTION_HAS_INCOMPLETE); selection_has_url = (state & E_TASK_SHELL_CONTENT_SELECTION_HAS_URL); + clipboard_has_calendar = + (state & E_TASK_SHELL_CONTENT_CLIPBOARD_HAS_CALENDAR); shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); state = e_shell_sidebar_check_state (shell_sidebar); @@ -335,7 +338,7 @@ task_shell_view_update_actions (EShellView *shell_view) gtk_action_set_sensitive (action, sensitive); action = ACTION (TASK_CLIPBOARD_PASTE); - sensitive = sources_are_editable; + sensitive = sources_are_editable && clipboard_has_calendar; gtk_action_set_sensitive (action, sensitive); action = ACTION (TASK_DELETE); -- cgit v1.2.3