diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2009-11-12 12:52:08 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2009-11-12 23:44:52 +0800 |
commit | c12e485e47f5ac99f0ddd7f7e90b9ab28b077c3d (patch) | |
tree | 4cbdb439735c9a1406e9294a152996e7c10cf49c /calendar/gui | |
parent | 7a2a0d05a9ba46c1d6c6f43f1a2d00c0ad93479a (diff) | |
download | gsoc2013-evolution-c12e485e47f5ac99f0ddd7f7e90b9ab28b077c3d.tar.gz gsoc2013-evolution-c12e485e47f5ac99f0ddd7f7e90b9ab28b077c3d.tar.zst gsoc2013-evolution-c12e485e47f5ac99f0ddd7f7e90b9ab28b077c3d.zip |
Simplify clipboard handling in addressbook.
Diffstat (limited to 'calendar/gui')
-rw-r--r-- | calendar/gui/Makefile.am | 3 | ||||
-rw-r--r-- | calendar/gui/e-cal-selection.c | 323 | ||||
-rw-r--r-- | calendar/gui/e-cal-selection.h | 75 | ||||
-rw-r--r-- | calendar/gui/e-calendar-table.c | 2 | ||||
-rw-r--r-- | calendar/gui/e-calendar-view.c | 2 | ||||
-rw-r--r-- | calendar/gui/e-memo-table.c | 2 |
6 files changed, 3 insertions, 404 deletions
diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am index fc9c91047a..dd1357c6c5 100644 --- a/calendar/gui/Makefile.am +++ b/calendar/gui/Makefile.am @@ -18,7 +18,6 @@ ecalendarinclude_HEADERS = \ e-cal-event.h \ e-cal-model-calendar.h \ e-cal-model.h \ - e-cal-selection.h \ e-calendar-view.h \ e-cell-date-edit-text.h \ e-date-time-list.h \ @@ -113,8 +112,6 @@ libevolution_calendar_la_SOURCES = \ e-cal-model-memos.h \ e-cal-model-tasks.c \ e-cal-model-tasks.h \ - e-cal-selection.c \ - e-cal-selection.h \ e-calendar-selector.c \ e-calendar-selector.h \ e-calendar-table.c \ diff --git a/calendar/gui/e-cal-selection.c b/calendar/gui/e-cal-selection.c deleted file mode 100644 index 27da752c98..0000000000 --- a/calendar/gui/e-cal-selection.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * e-cal-selection.c - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include "e-cal-selection.h" - -#include <string.h> - -typedef struct _RequestCalendarInfo RequestCalendarInfo; -typedef struct _WaitForDataResults WaitForDataResults; - -struct _RequestCalendarInfo { - GtkClipboardTextReceivedFunc callback; - gpointer user_data; -}; - -struct _WaitForDataResults { - GMainLoop *loop; - gpointer data; -}; - -enum { - ATOM_CALENDAR, - ATOM_X_CALENDAR, - ATOM_X_VCALENDAR, - NUM_CALENDAR_ATOMS -}; - -static GdkAtom calendar_atoms[NUM_CALENDAR_ATOMS]; - -static void -init_atoms (void) -{ - static gboolean initialized = FALSE; - - if (initialized) - return; - - calendar_atoms[ATOM_CALENDAR] = - gdk_atom_intern_static_string ("text/calendar"); - - calendar_atoms[ATOM_X_CALENDAR] = - gdk_atom_intern_static_string ("text/x-calendar"); - - calendar_atoms[ATOM_X_VCALENDAR] = - gdk_atom_intern_static_string ("text/x-vcalendar"); - - initialized = TRUE; -} - -void -e_target_list_add_calendar_targets (GtkTargetList *list, - guint info) -{ - gint ii; - - g_return_if_fail (list != NULL); - - init_atoms (); - - for (ii = 0; ii < NUM_CALENDAR_ATOMS; ii++) - gtk_target_list_add (list, calendar_atoms[ii], 0, info); -} - -gboolean -e_selection_data_set_calendar (GtkSelectionData *selection_data, - const gchar *source, - gint length) -{ - GdkAtom atom; - gint ii; - - g_return_val_if_fail (selection_data != NULL, FALSE); - - if (length < 0) - length = strlen (source); - - init_atoms (); - - atom = gtk_selection_data_get_target (selection_data); - - /* All calendar atoms are treated the same. */ - for (ii = 0; ii < NUM_CALENDAR_ATOMS; ii++) { - if (atom == calendar_atoms[ii]) { - gtk_selection_data_set ( - selection_data, atom, 8, - (guchar *) source, length); - return TRUE; - } - } - - return FALSE; -} - -gchar * -e_selection_data_get_calendar (GtkSelectionData *selection_data) -{ - GdkAtom data_type; - const guchar *data = NULL; - gint ii; - - /* XXX May need to do encoding and line ending conversions - * here. Not worrying about it for now. */ - - g_return_val_if_fail (selection_data != NULL, NULL); - - data = gtk_selection_data_get_data (selection_data); - data_type = gtk_selection_data_get_data_type (selection_data); - - /* All calendar atoms are treated the same. */ - for (ii = 0; ii < NUM_CALENDAR_ATOMS; ii++) - if (data_type == calendar_atoms[ii]) - return g_strdup ((gchar *) data); - - return NULL; -} - -gboolean -e_selection_data_targets_include_calendar (GtkSelectionData *selection_data) -{ - GdkAtom *targets; - gint n_targets; - gboolean result = FALSE; - - g_return_val_if_fail (selection_data != NULL, FALSE); - - if (gtk_selection_data_get_targets (selection_data, &targets, &n_targets)) { - result = e_targets_include_calendar (targets, n_targets); - g_free (targets); - } - - return result; -} - -gboolean -e_targets_include_calendar (GdkAtom *targets, - gint n_targets) -{ - gint ii, jj; - - g_return_val_if_fail (targets != NULL || n_targets == 0, FALSE); - - init_atoms (); - - for (ii = 0; ii < n_targets; ii++) - for (jj = 0; jj < NUM_CALENDAR_ATOMS; jj++) - if (targets[ii] == calendar_atoms[jj]) - return TRUE; - - return FALSE; -} - -static void -clipboard_get_calendar (GtkClipboard *clipboard, - GtkSelectionData *selection_data, - guint info, - gchar *source) -{ - e_selection_data_set_calendar (selection_data, source, -1); -} - -static void -clipboard_clear_calendar (GtkClipboard *clipboard, - gchar *source) -{ - g_free (source); -} - -void -e_clipboard_set_calendar (GtkClipboard *clipboard, - const gchar *source, - gint length) -{ - GtkTargetList *list; - GtkTargetEntry *targets; - gint n_targets; - - g_return_if_fail (clipboard != NULL); - g_return_if_fail (source != NULL); - - list = gtk_target_list_new (NULL, 0); - e_target_list_add_calendar_targets (list, 0); - - targets = gtk_target_table_new_from_list (list, &n_targets); - - if (length < 0) - length = strlen (source); - - gtk_clipboard_set_with_data ( - clipboard, targets, n_targets, - (GtkClipboardGetFunc) clipboard_get_calendar, - (GtkClipboardClearFunc) clipboard_clear_calendar, - g_strndup (source, length)); - - gtk_clipboard_set_can_store (clipboard, NULL, 0); - - gtk_target_table_free (targets, n_targets); - gtk_target_list_unref (list); -} - -static void -clipboard_request_calendar_cb (GtkClipboard *clipboard, - GtkSelectionData *selection_data, - RequestCalendarInfo *info) -{ - gchar *source; - - source = e_selection_data_get_calendar (selection_data); - info->callback (clipboard, source, info->user_data); - g_free (source); - - g_slice_free (RequestCalendarInfo, info); -} - -void -e_clipboard_request_calendar (GtkClipboard *clipboard, - GtkClipboardTextReceivedFunc callback, - gpointer user_data) -{ - RequestCalendarInfo *info; - - g_return_if_fail (clipboard != NULL); - g_return_if_fail (callback != NULL); - - info = g_slice_new (RequestCalendarInfo); - info->callback = callback; - info->user_data = user_data; - - gtk_clipboard_request_contents ( - clipboard, calendar_atoms[ATOM_CALENDAR], - (GtkClipboardReceivedFunc) - clipboard_request_calendar_cb, info); -} - -static void -clipboard_wait_for_calendar_cb (GtkClipboard *clipboard, - const gchar *source, - WaitForDataResults *results) -{ - results->data = g_strdup (source); - g_main_loop_quit (results->loop); -} - -gchar * -e_clipboard_wait_for_calendar (GtkClipboard *clipboard) -{ - WaitForDataResults results; - - g_return_val_if_fail (clipboard != NULL, NULL); - - results.data = NULL; - results.loop = g_main_loop_new (NULL, TRUE); - - e_clipboard_request_calendar ( - clipboard, (GtkClipboardTextReceivedFunc) - clipboard_wait_for_calendar_cb, &results); - - if (g_main_loop_is_running (results.loop)) { - GDK_THREADS_LEAVE (); - g_main_loop_run (results.loop); - GDK_THREADS_ENTER (); - } - - g_main_loop_unref (results.loop); - - return results.data; -} - -gboolean -e_clipboard_wait_is_calendar_available (GtkClipboard *clipboard) -{ - GdkAtom *targets; - gint n_targets; - gboolean result = FALSE; - - if (gtk_clipboard_wait_for_targets (clipboard, &targets, &n_targets)) { - result = e_targets_include_calendar (targets, n_targets); - g_free (targets); - } - - return result; -} - -void -e_clipboard_print_targets (GtkClipboard *clipboard) -{ - GdkAtom *targets; - gchar *target_name; - gint n_targets, ii; - - g_return_if_fail (clipboard != NULL); - - gtk_clipboard_wait_for_targets (clipboard, &targets, &n_targets); - - g_print ("Clipboard Targets:\n"); - - if (n_targets == 0) - g_print (" (none)\n"); - else for (ii = 0; ii < n_targets; ii++) { - target_name = gdk_atom_name (targets[ii]); - g_print (" %s\n", target_name); - g_free (target_name); - } - - g_free (targets); -} diff --git a/calendar/gui/e-cal-selection.h b/calendar/gui/e-cal-selection.h deleted file mode 100644 index c79f1d608d..0000000000 --- a/calendar/gui/e-cal-selection.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * e-cal-selection.h - * - * 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/> - * - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -/** - * SECTION: e-cal-selection - * @short_description: calendar selection utilities - * @include: calendar/gui/e-cal-selection.h - **/ - -#ifndef E_CAL_SELECTION_H -#define E_CAL_SELECTION_H - -#include <gtk/gtk.h> - -/* This API mimics GTK's API for dealing with text, image and URI data. */ - -G_BEGIN_DECLS - -/* Selection Functions */ - -void e_target_list_add_calendar_targets - (GtkTargetList *list, - guint info); -gboolean e_selection_data_set_calendar - (GtkSelectionData *selection_data, - const gchar *source, - gint length); -gchar * e_selection_data_get_calendar - (GtkSelectionData *selection_data); -gboolean e_selection_data_targets_include_calendar - (GtkSelectionData *selection_data); -gboolean e_targets_include_calendar - (GdkAtom *targets, - gint n_targets); - -/* Clipboard Functions */ - -void e_clipboard_set_calendar(GtkClipboard *clipboard, - const gchar *source, - gint length); -void e_clipboard_request_calendar - (GtkClipboard *clipboard, - GtkClipboardTextReceivedFunc callback, - gpointer user_data); -gchar * e_clipboard_wait_for_calendar - (GtkClipboard *clipboard); -gboolean e_clipboard_wait_is_calendar_available - (GtkClipboard *clipboard); - -/* Debugging Functions */ - -void e_clipboard_print_targets - (GtkClipboard *clipboard); - -G_END_DECLS - -#endif /* E_CAL_SELECTION_H */ diff --git a/calendar/gui/e-calendar-table.c b/calendar/gui/e-calendar-table.c index 3903c58888..4ea57c2abb 100644 --- a/calendar/gui/e-calendar-table.c +++ b/calendar/gui/e-calendar-table.c @@ -43,6 +43,7 @@ #include <table/e-cell-combo.h> #include <table/e-cell-date.h> #include <e-util/e-binding.h> +#include <e-util/e-selection.h> #include <e-util/e-dialog-utils.h> #include <e-util/e-util-private.h> #include <table/e-cell-date-edit.h> @@ -55,7 +56,6 @@ #include "dialogs/delete-error.h" #include "dialogs/task-editor.h" #include "e-cal-model-tasks.h" -#include "e-cal-selection.h" #include "e-calendar-table.h" #include "e-calendar-view.h" #include "e-cell-date-edit-text.h" diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c index 0ea84e1268..84812d60c5 100644 --- a/calendar/gui/e-calendar-view.c +++ b/calendar/gui/e-calendar-view.c @@ -33,6 +33,7 @@ #include <libedataserver/e-time-utils.h> #include <e-util/e-util.h> #include <e-util/e-error.h> +#include <e-util/e-selection.h> #include <e-util/e-datetime-format.h> #include <e-util/e-dialog-utils.h> #include <e-util/e-icon-factory.h> @@ -45,7 +46,6 @@ #include "comp-util.h" #include "ea-calendar.h" #include "e-cal-model-calendar.h" -#include "e-cal-selection.h" #include "e-calendar-view.h" #include "itip-utils.h" #include "dialogs/comp-editor-util.h" diff --git a/calendar/gui/e-memo-table.c b/calendar/gui/e-memo-table.c index c111bd668d..fc4b2c82ce 100644 --- a/calendar/gui/e-memo-table.c +++ b/calendar/gui/e-memo-table.c @@ -42,6 +42,7 @@ #include <table/e-cell-text.h> #include <table/e-cell-combo.h> #include <table/e-cell-date.h> +#include <e-util/e-selection.h> #include <e-util/e-dialog-utils.h> #include <e-util/e-util-private.h> #include <table/e-cell-date-edit.h> @@ -53,7 +54,6 @@ #include "dialogs/delete-error.h" #include "dialogs/memo-editor.h" #include "e-cal-model-memos.h" -#include "e-cal-selection.h" #include "e-memo-table.h" #include "e-calendar-view.h" #include "e-cell-date-edit-text.h" |