This commit is contained in:
parent
4b65a1b026
commit
7c8e6927c4
15
bgo-332729-invalid-write-econfig.patch
Normal file
15
bgo-332729-invalid-write-econfig.patch
Normal file
@ -0,0 +1,15 @@
|
||||
Index: e-util/e-config.c
|
||||
===================================================================
|
||||
--- e-util/e-config.c (revision 36811)
|
||||
+++ e-util/e-config.c (working copy)
|
||||
@@ -122,6 +122,10 @@ ep_finalise(GObject *o)
|
||||
}
|
||||
|
||||
while ( (wn = (struct _widget_node *)e_dlist_remhead(&p->widgets)) ) {
|
||||
+ /* disconnect the gtk_widget_destroyed function from the widget */
|
||||
+ if (wn->widget)
|
||||
+ g_signal_handlers_disconnect_matched (wn->widget, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, &wn->widget);
|
||||
+
|
||||
g_free(wn);
|
||||
}
|
||||
|
91
bgo-562228-evo-mailbox-field.patch
Normal file
91
bgo-562228-evo-mailbox-field.patch
Normal file
@ -0,0 +1,91 @@
|
||||
--- plugins/exchange-operations/exchange-account-setup.c 2008/12/02 05:51:59 36824
|
||||
+++ plugins/exchange-operations/exchange-account-setup.c 2008/12/02 12:23:33 36825
|
||||
@@ -613,6 +613,30 @@
|
||||
update_mailbox_param_in_url (target->account, E_ACCOUNT_TRANSPORT_URL, mailbox);
|
||||
}
|
||||
|
||||
+static void
|
||||
+want_mailbox_toggled (GtkWidget *toggle, EConfig *config)
|
||||
+{
|
||||
+ GtkWidget *entry;
|
||||
+
|
||||
+ g_return_if_fail (toggle != NULL);
|
||||
+ g_return_if_fail (config != NULL);
|
||||
+
|
||||
+ entry = g_object_get_data (G_OBJECT (toggle), "mailbox-entry");
|
||||
+ if (entry) {
|
||||
+ gboolean is_active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle));
|
||||
+ EMConfigTargetAccount *target;
|
||||
+ const char *mailbox;
|
||||
+
|
||||
+ gtk_widget_set_sensitive (entry, is_active);
|
||||
+
|
||||
+ target = (EMConfigTargetAccount *)config->target;
|
||||
+ mailbox = gtk_entry_get_text (GTK_ENTRY (entry));
|
||||
+
|
||||
+ update_mailbox_param_in_url (target->account, E_ACCOUNT_SOURCE_URL, is_active ? mailbox : NULL);
|
||||
+ update_mailbox_param_in_url (target->account, E_ACCOUNT_TRANSPORT_URL, is_active ? mailbox : NULL);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static char *
|
||||
construct_owa_url (CamelURL *url)
|
||||
{
|
||||
@@ -645,8 +669,8 @@
|
||||
{
|
||||
EMConfigTargetAccount *target_account;
|
||||
const char *source_url;
|
||||
- char *owa_url = NULL, *mailbox_name;
|
||||
- GtkWidget *owa_entry, *mailbox_entry;
|
||||
+ char *owa_url = NULL, *mailbox_name, *username;
|
||||
+ GtkWidget *owa_entry, *mailbox_entry, *want_mailbox_check;
|
||||
CamelURL *url;
|
||||
int row;
|
||||
GtkWidget *hbox, *label, *button;
|
||||
@@ -679,6 +703,7 @@
|
||||
|
||||
owa_url = g_strdup (camel_url_get_param(url, "owa_url"));
|
||||
mailbox_name = g_strdup (camel_url_get_param (url, "mailbox"));
|
||||
+ username = g_strdup (url->user);
|
||||
|
||||
/* if the host is null, then user+other info is dropped silently, force it to be kept */
|
||||
if (url->host == NULL) {
|
||||
@@ -740,6 +765,19 @@
|
||||
owa_editor_entry_changed (owa_entry, data->config);
|
||||
|
||||
row++;
|
||||
+ want_mailbox_check = gtk_check_button_new_with_mnemonic (_("S_pecify the mailbox name"));
|
||||
+ gtk_widget_show (want_mailbox_check);
|
||||
+ gtk_table_attach (GTK_TABLE (data->parent), want_mailbox_check, 1, 2, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
|
||||
+ if (!username || !*username || !mailbox_name || !*mailbox_name ||
|
||||
+ g_ascii_strcasecmp (username, mailbox_name) == 0 ||
|
||||
+ (strchr (username, '/') && g_ascii_strcasecmp (strchr (username, '/') + 1, mailbox_name) == 0)) {
|
||||
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (want_mailbox_check), FALSE);
|
||||
+ } else {
|
||||
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (want_mailbox_check), TRUE);
|
||||
+ }
|
||||
+ g_signal_connect (want_mailbox_check, "toggled", G_CALLBACK (want_mailbox_toggled), data->config);
|
||||
+
|
||||
+ row++;
|
||||
label = gtk_label_new_with_mnemonic (_("_Mailbox:"));
|
||||
gtk_widget_show (label);
|
||||
|
||||
@@ -750,14 +788,18 @@
|
||||
|
||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), mailbox_entry);
|
||||
|
||||
+ gtk_widget_set_sensitive (mailbox_entry, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (want_mailbox_check)));
|
||||
+
|
||||
g_signal_connect (mailbox_entry, "changed", G_CALLBACK (mailbox_editor_entry_changed), data->config);
|
||||
g_object_set_data (G_OBJECT (button), "mailbox-entry", mailbox_entry);
|
||||
+ g_object_set_data (G_OBJECT (want_mailbox_check), "mailbox-entry", mailbox_entry);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (data->parent), label, 0, 1, row, row+1, 0, 0, 0, 0);
|
||||
gtk_table_attach (GTK_TABLE (data->parent), mailbox_entry, 1, 2, row, row+1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
|
||||
|
||||
g_free (owa_url);
|
||||
g_free (mailbox_name);
|
||||
+ g_free (username);
|
||||
|
||||
return hbox;
|
||||
}
|
33
bnc-435452-lose-attendees-busy-search.patch
Normal file
33
bnc-435452-lose-attendees-busy-search.patch
Normal file
@ -0,0 +1,33 @@
|
||||
--- calendar/gui/e-meeting-list-view.c
|
||||
+++ calendar/gui/e-meeting-list-view.c
|
||||
@@ -471,6 +471,21 @@ status_edited_cb (GtkCellRenderer *renderer, const gchar *path, const gchar *tex
|
||||
}
|
||||
|
||||
static void
|
||||
+ense_update (GtkWidget *w, gpointer data1, gpointer user_data)
|
||||
+{
|
||||
+ gtk_cell_editable_editing_done ((GtkCellEditable *)w);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+editing_started_cb (GtkCellRenderer *renderer,
|
||||
+ GtkCellEditable *editable,
|
||||
+ gchar *path,
|
||||
+ gpointer user_data)
|
||||
+{
|
||||
+ g_signal_connect (editable, "updated", G_CALLBACK(ense_update), NULL);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
build_table (EMeetingListView *lview)
|
||||
{
|
||||
GtkCellRenderer *renderer;
|
||||
@@ -501,6 +516,8 @@ build_table (EMeetingListView *lview)
|
||||
g_object_set_data (G_OBJECT (col), "mtg-store-col", GINT_TO_POINTER (E_MEETING_STORE_ATTENDEE_COL));
|
||||
g_signal_connect (renderer, "cell_edited", G_CALLBACK (attendee_edited_cb), view);
|
||||
g_signal_connect (renderer, "editing-canceled", G_CALLBACK (attendee_editing_canceled_cb), view);
|
||||
+ g_signal_connect (renderer, "editing-started", G_CALLBACK (editing_started_cb), view);
|
||||
+
|
||||
g_hash_table_insert (edit_table, GINT_TO_POINTER (E_MEETING_STORE_ATTENDEE_COL), renderer);
|
||||
|
||||
renderer = e_cell_renderer_combo_new ();
|
96
bnc-439733-bogofilter-junk-training.patch
Normal file
96
bnc-439733-bogofilter-junk-training.patch
Normal file
@ -0,0 +1,96 @@
|
||||
--- plugins/bogo-junk-plugin/Makefile.am
|
||||
+++ plugins/bogo-junk-plugin/Makefile.am
|
||||
@@ -1,5 +1,6 @@
|
||||
INCLUDES = \
|
||||
-I$(top_srcdir) \
|
||||
+ -DWELCOME_MESSAGE=\""$(privdatadir)/default/C/mail/local/Inbox"\" \
|
||||
$(EVOLUTION_MAIL_CFLAGS)
|
||||
|
||||
@EVO_PLUGIN_RULE@
|
||||
--- plugins/bogo-junk-plugin/bf-junk-filter.c
|
||||
+++ plugins/bogo-junk-plugin/bf-junk-filter.c
|
||||
@@ -40,6 +40,8 @@
|
||||
#include "mail/em-config.h"
|
||||
#include <mail/em-junk-hook.h>
|
||||
#include <camel/camel-data-wrapper.h>
|
||||
+#include <camel/camel-mime-message.h>
|
||||
+#include <camel/camel-mime-parser.h>
|
||||
#include <camel/camel-stream-fs.h>
|
||||
#include <camel/camel-debug.h>
|
||||
#include <gconf/gconf-client.h>
|
||||
@@ -69,6 +71,7 @@ void *em_junk_bf_validate_binary (EPlugin *ep, EMJunkHookTarget *target);
|
||||
void em_junk_bf_report_junk (EPlugin *ep, EMJunkHookTarget *target);
|
||||
void em_junk_bf_report_non_junk (EPlugin *ep, EMJunkHookTarget *target);
|
||||
void em_junk_bf_commit_reports (EPlugin *ep, EMJunkHookTarget *target);
|
||||
+static gint pipe_to_bogofilter (CamelMimeMessage *msg, gchar **argv, GError **error);
|
||||
|
||||
/* eplugin stuff */
|
||||
int e_plugin_lib_enable (EPluginLib *ep, int enable);
|
||||
@@ -78,6 +81,37 @@ int e_plugin_lib_enable (EPluginLib *ep, int enable);
|
||||
|
||||
static gboolean em_junk_bf_unicode = TRUE;
|
||||
|
||||
+static void
|
||||
+init_db ()
|
||||
+{
|
||||
+ CamelStream *stream = camel_stream_fs_new_with_name (WELCOME_MESSAGE, O_RDONLY, 0);
|
||||
+ CamelMimeParser *parser = camel_mime_parser_new ();
|
||||
+ CamelMimeMessage *msg = camel_mime_message_new ();
|
||||
+ gchar *argv[] = {
|
||||
+ em_junk_bf_binary,
|
||||
+ "-n",
|
||||
+ NULL,
|
||||
+ NULL
|
||||
+ };
|
||||
+
|
||||
+ camel_mime_parser_init_with_stream (parser, stream);
|
||||
+ camel_mime_parser_scan_from (parser, FALSE);
|
||||
+ camel_object_unref (stream);
|
||||
+
|
||||
+ camel_mime_part_construct_from_parser ((CamelMimePart *) msg, parser);
|
||||
+ camel_object_unref (parser);
|
||||
+
|
||||
+ d(fprintf (stderr, "Initing the bogofilter DB with Welcome message\n"));
|
||||
+
|
||||
+ if (em_junk_bf_unicode) {
|
||||
+ argv[2] = "--unicode=yes";
|
||||
+ }
|
||||
+
|
||||
+ pipe_to_bogofilter (msg, argv, NULL);
|
||||
+ camel_object_unref (msg);
|
||||
+
|
||||
+}
|
||||
+
|
||||
static gint
|
||||
pipe_to_bogofilter (CamelMimeMessage *msg, gchar **argv, GError **error)
|
||||
{
|
||||
@@ -88,7 +122,9 @@ pipe_to_bogofilter (CamelMimeMessage *msg, gchar **argv, GError **error)
|
||||
gint status;
|
||||
gint waitres;
|
||||
gint res;
|
||||
+ static gboolean only_once = FALSE;
|
||||
|
||||
+retry:
|
||||
if (camel_debug_start ("junk")) {
|
||||
int i;
|
||||
|
||||
@@ -153,8 +189,17 @@ pipe_to_bogofilter (CamelMimeMessage *msg, gchar **argv, GError **error)
|
||||
res = BOGOFILTER_ERROR;
|
||||
}
|
||||
|
||||
- if (res < 0 || res > 2)
|
||||
+ if (res < 0 || res > 2) {
|
||||
+ if (!only_once) {
|
||||
+ /* Create wordlist.db */
|
||||
+ only_once = TRUE;
|
||||
+ init_db();
|
||||
+
|
||||
+ goto retry;
|
||||
+ }
|
||||
g_set_error (error, EM_JUNK_ERROR, res, _("Pipe to Bogofilter failed, error code: %d."), res);
|
||||
+
|
||||
+ }
|
||||
|
||||
return res;
|
||||
}
|
||||
|
62
bnc-449888-handle-no-workspace.patch
Normal file
62
bnc-449888-handle-no-workspace.patch
Normal file
@ -0,0 +1,62 @@
|
||||
diff --git a/plugins/sharepoint-account-setup/SharepointAccount.cs b/plugins/sharepoint-account-setup/SharepointAccount.cs
|
||||
index 61959ac..a9fad5f 100644
|
||||
--- a/plugins/sharepoint-account-setup/SharepointAccount.cs
|
||||
+++ b/plugins/sharepoint-account-setup/SharepointAccount.cs
|
||||
@@ -85,6 +85,44 @@ namespace Sharepoint
|
||||
}
|
||||
}
|
||||
|
||||
+ private static FileInfo [] GetWorkSpaces ()
|
||||
+ {
|
||||
+ int tries = 0;
|
||||
+
|
||||
+ TryAgain:
|
||||
+ try
|
||||
+ {
|
||||
+ tries = tries + 1;
|
||||
+ FileInfo [] workspaces = deskIceDaemon.EnumerateWorkspaces ();
|
||||
+
|
||||
+ return workspaces;
|
||||
+ }
|
||||
+ catch (Exception ex)
|
||||
+ {
|
||||
+ if (tries > 5)
|
||||
+ {
|
||||
+ Console.WriteLine ("Three tries exceeded");
|
||||
+ Console.WriteLine ("Could not create the account");
|
||||
+ Console.WriteLine (ex.Message);
|
||||
+ return null;
|
||||
+ }
|
||||
+
|
||||
+ NoWorkspacesException nwex = new NoWorkspacesException ();
|
||||
+ if (ex.Message.Contains (nwex.Message)) {
|
||||
+ Console.WriteLine ("No workspaces found");
|
||||
+ Console.WriteLine ("Sleeping for 4 seconds");
|
||||
+ System.Threading.Thread.Sleep (1000 * 4);
|
||||
+
|
||||
+ goto TryAgain;
|
||||
+ } else {
|
||||
+ Console.WriteLine ("Error while getting workspace. Please try again after a minute");
|
||||
+ Console.WriteLine (ex.Message);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return null;
|
||||
+ }
|
||||
+
|
||||
private static void SetupFolders ()
|
||||
{
|
||||
Console.WriteLine ("Getting folders ");
|
||||
@@ -97,7 +135,11 @@ namespace Sharepoint
|
||||
return;
|
||||
}
|
||||
|
||||
- FileInfo [] workspaces = deskIceDaemon.EnumerateWorkspaces ();
|
||||
+ FileInfo [] workspaces = GetWorkSpaces ();
|
||||
+
|
||||
+ if (workspaces == null)
|
||||
+ return;
|
||||
+
|
||||
foreach (FileInfo workspace in workspaces)
|
||||
{
|
||||
Folder[] folders = null;
|
@ -1,3 +1,25 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Dec 4 12:13:42 CET 2008 - abharath@suse.de
|
||||
|
||||
- Patches added
|
||||
+ bgo#332729 - bgo-332729-invalid-write-econfig.patch - invalid
|
||||
write with outspring from e-config.c
|
||||
+ bgo#562228 - bgo-562228-evo-mailbox-field.patch - Login to
|
||||
exchange fails if "mailbox" is filled manually in
|
||||
the config wizard.
|
||||
+ bnc#435452 - bnc-435452-lose-attendees-busy-search.patch -
|
||||
Adding People to Meeting Loses Attendee if Add or
|
||||
Busy Search Selected.
|
||||
+ bnc#439733 - bnc-439733-bogofilter-junk-training.patch -
|
||||
Checking for junk before training.
|
||||
+ bnc#449888 - bnc-449888-handle-no-workspace.patch - Evolution
|
||||
should handle 'no workspace found' exception.
|
||||
+ sp-meetingworkspace-ui.patch - Implement an UI for creating
|
||||
meeting workspace. FATE id: 304465
|
||||
|
||||
- sp-tasks-setup.diff: Uncomment this patch now as dice dependency
|
||||
patches have been checked in.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Nov 24 10:00:30 IST 2008 - msuman@suse.de
|
||||
|
||||
|
@ -58,7 +58,7 @@ Group: Productivity/Networking/Email/Clients
|
||||
# This should be updated upon major version changes; it should match BASE_VERSION as defined in configure.in.
|
||||
%define evolution_base_version 2.24
|
||||
Version: 2.24.1.1
|
||||
Release: 4
|
||||
Release: 5
|
||||
Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite
|
||||
Source0: %{name}-%{version}.tar.bz2
|
||||
Source1: summerdance-about2.png
|
||||
@ -116,6 +116,18 @@ Patch34: bnc-446286-message-tracking-status.patch
|
||||
Patch35: bnc-210959-evo-accept-ics.patch
|
||||
# PATCH-FIX-UPSTREAM sp-tasks-setup.diff pchenthill@suse.de -- Patch needs to upstreamed.
|
||||
Patch36: sp-tasks-setup.diff
|
||||
# PATCH-FIX-UPSTREAM bgo-332729-invalid-write-econfig.patch bgo332729 -- Fix has been submitted upstream.
|
||||
Patch37: bgo-332729-invalid-write-econfig.patch
|
||||
# PATCH-FIX-UPSTREAM bgo-562228-evo-mailbox-field.patch bgo562228 -- Fix has been submitted upstream.
|
||||
Patch38: bgo-562228-evo-mailbox-field.patch
|
||||
# PATCH-FIX-UPSTREAM bnc-435452-lose-attendees-busy-search.patch bnc435452 sragavan@novell.com -- Patch yet to be pushed upstream.
|
||||
Patch39: bnc-435452-lose-attendees-busy-search.patch
|
||||
# PATCH-FIX-UPSTREAM bnc-439733-bogofilter-junk-training.patch bnc439733 sragavan@novell.com -- Patch yet to be pushed upstream.
|
||||
Patch40: bnc-439733-bogofilter-junk-training.patch
|
||||
# PATCH-FIX-UPSTREAM sp-meetingworkspace-ui.patch pchenthill@suse.de -- Patch needs to upstreamed.
|
||||
Patch41: sp-meetingworkspace-ui.patch
|
||||
# PATCH-FIX-UPSTREAM bnc-449888-handle-no-workspace.patch bnc449888 pchenthill@suse.de -- Patch needs to upstreamed.
|
||||
Patch42: bnc-449888-handle-no-workspace.patch
|
||||
# PATCH-FIX-UPSTREAM evo-core-mapi-changes.diff msuman@suse.de -- Fix is upstream since 2.25.3
|
||||
Patch100: evo-core-mapi-changes.diff
|
||||
Url: http://gnome.org/projects/evolution/
|
||||
@ -373,7 +385,13 @@ Authors:
|
||||
%patch33
|
||||
%patch34
|
||||
%patch35
|
||||
#%patch36 -p1
|
||||
%patch36 -p1
|
||||
%patch37
|
||||
%patch38
|
||||
%patch39
|
||||
%patch40
|
||||
%patch41 -p1
|
||||
%patch42 -p1
|
||||
%patch100 -p1
|
||||
|
||||
%build
|
||||
@ -488,7 +506,25 @@ fi
|
||||
%{_libdir}/evolution/*/conduits
|
||||
|
||||
%changelog
|
||||
* Sun Nov 23 2008 msuman@suse.de
|
||||
* Thu Dec 04 2008 abharath@suse.de
|
||||
- Patches added
|
||||
+ bgo#332729 - bgo-332729-invalid-write-econfig.patch - invalid
|
||||
write with outspring from e-config.c
|
||||
+ bgo#562228 - bgo-562228-evo-mailbox-field.patch - Login to
|
||||
exchange fails if "mailbox" is filled manually in
|
||||
the config wizard.
|
||||
+ bnc#435452 - bnc-435452-lose-attendees-busy-search.patch -
|
||||
Adding People to Meeting Loses Attendee if Add or
|
||||
Busy Search Selected.
|
||||
+ bnc#439733 - bnc-439733-bogofilter-junk-training.patch -
|
||||
Checking for junk before training.
|
||||
+ bnc#449888 - bnc-449888-handle-no-workspace.patch - Evolution
|
||||
should handle 'no workspace found' exception.
|
||||
+ sp-meetingworkspace-ui.patch - Implement an UI for creating
|
||||
meeting workspace. FATE id: 304465
|
||||
- sp-tasks-setup.diff: Uncomment this patch now as dice dependency
|
||||
patches have been checked in.
|
||||
* Mon Nov 24 2008 msuman@suse.de
|
||||
- sp-tasks-setup.diff: Comment this patch for now as it breaks the
|
||||
build.
|
||||
- Restore the alphabetical order of the BuildRequires list
|
||||
|
983
sp-meetingworkspace-ui.patch
Normal file
983
sp-meetingworkspace-ui.patch
Normal file
@ -0,0 +1,983 @@
|
||||
diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c
|
||||
index 16bdb97..5818165 100644
|
||||
--- a/calendar/gui/dialogs/comp-editor.c
|
||||
+++ b/calendar/gui/dialogs/comp-editor.c
|
||||
@@ -63,6 +63,7 @@
|
||||
#include "../e-cal-popup.h"
|
||||
#include "../calendar-config-keys.h"
|
||||
#include "cal-attachment-select-file.h"
|
||||
+#include "../e-cal-event.h"
|
||||
|
||||
#include "e-attachment-bar.h"
|
||||
#include "misc/e-expander.h"
|
||||
@@ -104,7 +105,7 @@ struct _CompEditorPrivate {
|
||||
|
||||
/* Manages menus and toolbars */
|
||||
GtkUIManager *manager;
|
||||
-
|
||||
+ GtkWidget *vbox;
|
||||
gchar *summary;
|
||||
|
||||
guint32 attachment_bar_visible : 1;
|
||||
@@ -2179,29 +2180,28 @@ setup_widgets (CompEditor *editor)
|
||||
CompEditorPrivate *priv;
|
||||
GtkWidget *expander_hbox;
|
||||
GtkWidget *widget;
|
||||
- GtkWidget *vbox;
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
/* Useful vbox */
|
||||
- vbox = gtk_vbox_new (FALSE, 0);
|
||||
- gtk_container_add (GTK_CONTAINER (editor), vbox);
|
||||
- gtk_widget_show (vbox);
|
||||
+ priv->vbox = gtk_vbox_new (FALSE, 0);
|
||||
+ gtk_container_add (GTK_CONTAINER (editor), priv->vbox);
|
||||
+ gtk_widget_show (priv->vbox);
|
||||
|
||||
/* Main Menu */
|
||||
widget = comp_editor_get_managed_widget (editor, "/main-menu");
|
||||
- gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
|
||||
+ gtk_box_pack_start (GTK_BOX (priv->vbox), widget, FALSE, FALSE, 0);
|
||||
gtk_widget_show (widget);
|
||||
|
||||
/* Main Toolbar */
|
||||
widget = comp_editor_get_managed_widget (editor, "/main-toolbar");
|
||||
- gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
|
||||
+ gtk_box_pack_start (GTK_BOX (priv->vbox), widget, FALSE, FALSE, 0);
|
||||
gtk_widget_show (widget);
|
||||
|
||||
/* Notebook */
|
||||
widget = gtk_notebook_new ();
|
||||
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (widget), FALSE);
|
||||
- gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
|
||||
+ gtk_box_pack_start (GTK_BOX (priv->vbox), widget, TRUE, TRUE, 0);
|
||||
gtk_widget_show (widget);
|
||||
priv->notebook = GTK_NOTEBOOK (widget);
|
||||
|
||||
@@ -2254,7 +2254,7 @@ setup_widgets (CompEditor *editor)
|
||||
atk_object_set_description (gtk_widget_get_accessible (priv->attachment_expander), _("Press space key to toggle attachment bar"));
|
||||
gtk_container_add (GTK_CONTAINER (priv->attachment_expander), priv->attachment_scrolled_window);
|
||||
|
||||
- gtk_box_pack_start (GTK_BOX (vbox), priv->attachment_expander, FALSE, FALSE, 4);
|
||||
+ gtk_box_pack_start (GTK_BOX (priv->vbox), priv->attachment_expander, FALSE, FALSE, 4);
|
||||
gtk_widget_show (priv->attachment_expander);
|
||||
e_expander_set_expanded (E_EXPANDER (priv->attachment_expander), FALSE);
|
||||
g_signal_connect_after (priv->attachment_expander, "activate",
|
||||
@@ -2495,6 +2495,22 @@ comp_editor_get_ui_manager (CompEditor *editor)
|
||||
return editor->priv->manager;
|
||||
}
|
||||
|
||||
+GtkWidget *
|
||||
+comp_editor_get_vbox (CompEditor *editor)
|
||||
+{
|
||||
+ g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL);
|
||||
+
|
||||
+ return editor->priv->vbox;
|
||||
+}
|
||||
+
|
||||
+GtkNotebook *
|
||||
+comp_editor_get_notebook (CompEditor *editor)
|
||||
+{
|
||||
+ g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL);
|
||||
+
|
||||
+ return editor->priv->notebook;
|
||||
+}
|
||||
+
|
||||
GtkAction *
|
||||
comp_editor_get_action (CompEditor *editor,
|
||||
const gchar *action_name)
|
||||
@@ -2670,9 +2686,15 @@ comp_editor_append_page (CompEditor *editor,
|
||||
|
||||
priv->pages = g_list_append (priv->pages, page);
|
||||
|
||||
- if (add)
|
||||
+ if (add){
|
||||
gtk_notebook_append_page (priv->notebook, page_widget, label_widget);
|
||||
|
||||
+ ECalEvent *ec_event = e_cal_event_peek ();
|
||||
+ ECalEventTargetCompEditor *target;
|
||||
+ target = e_cal_event_target_comp_editor (ec_event, editor);
|
||||
+ e_event_emit ((EEvent *) ec_event, "editor.append", (EEventTarget *) target);
|
||||
+ }
|
||||
+
|
||||
/* Listen for things happening on the page */
|
||||
g_signal_connect_swapped (
|
||||
page, "dates_changed",
|
||||
diff --git a/calendar/gui/dialogs/event-editor.c b/calendar/gui/dialogs/event-editor.c
|
||||
index 5f7f14c..e7a681a 100644
|
||||
--- a/calendar/gui/dialogs/event-editor.c
|
||||
+++ b/calendar/gui/dialogs/event-editor.c
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <e-util/e-util-private.h>
|
||||
#include <evolution-shell-component-utils.h>
|
||||
|
||||
+#include "../e-cal-event.h"
|
||||
#include "event-page.h"
|
||||
#include "recurrence-page.h"
|
||||
#include "schedule-page.h"
|
||||
@@ -65,7 +66,7 @@ static const gchar *ui =
|
||||
"<ui>"
|
||||
" <menubar action='main-menu'>"
|
||||
" <menu action='view-menu'>"
|
||||
-" <menuitem action='view-type'/>"
|
||||
+" <menuitem action='view-type'/>"
|
||||
" <menuitem action='view-status'/>"
|
||||
" <menuitem action='view-role'/>"
|
||||
" <menuitem action='view-rsvp'/>"
|
||||
@@ -102,6 +103,17 @@ static gboolean event_editor_send_comp (CompEditor *editor, ECalComponentItipMet
|
||||
|
||||
G_DEFINE_TYPE (EventEditor, event_editor, TYPE_COMP_EDITOR)
|
||||
|
||||
+
|
||||
+CompEditorPage*
|
||||
+event_editor_get_event_page (CompEditor *editor)
|
||||
+{
|
||||
+ EventEditorPrivate *priv;
|
||||
+
|
||||
+ priv = EVENT_EDITOR_GET_PRIVATE (editor);
|
||||
+
|
||||
+ return priv->event_page;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
create_schedule_page (CompEditor *editor)
|
||||
{
|
||||
@@ -290,6 +302,7 @@ event_editor_constructor (GType type,
|
||||
gtk_action_group_set_visible (action_group, is_meeting);
|
||||
|
||||
priv->event_page = event_page_new (priv->model, editor);
|
||||
+
|
||||
g_object_ref_sink (priv->event_page);
|
||||
comp_editor_append_page (
|
||||
editor, COMP_EDITOR_PAGE (priv->event_page),
|
||||
@@ -330,6 +343,11 @@ event_editor_constructor (GType type,
|
||||
event_page_set_meeting (priv->event_page, TRUE);
|
||||
priv->meeting_shown=TRUE;
|
||||
}
|
||||
+
|
||||
+ ECalEvent *ec_event = e_cal_event_peek ();
|
||||
+ ECalEventTargetCompEditor *target;
|
||||
+ target = e_cal_event_target_comp_editor (ec_event, editor);
|
||||
+ e_event_emit ((EEvent *) ec_event, "editor.inited", (EEventTarget *) target);
|
||||
|
||||
return object;
|
||||
}
|
||||
@@ -492,7 +510,6 @@ event_editor_init (EventEditor *ee)
|
||||
}
|
||||
|
||||
/* Hide send options. */
|
||||
- action = comp_editor_get_action (editor, "send-options");
|
||||
gtk_action_set_visible (action, FALSE);
|
||||
|
||||
g_signal_connect (
|
||||
diff --git a/calendar/gui/dialogs/event-editor.h b/calendar/gui/dialogs/event-editor.h
|
||||
index c050b92..7e804d1 100644
|
||||
--- a/calendar/gui/dialogs/event-editor.h
|
||||
+++ b/calendar/gui/dialogs/event-editor.h
|
||||
@@ -68,6 +68,7 @@ GType event_editor_get_type (void);
|
||||
CompEditor * event_editor_new (ECal *client,
|
||||
CompEditorFlags flags);
|
||||
void event_editor_show_meeting (EventEditor *ee);
|
||||
+CompEditorPage* event_editor_get_event_page (CompEditor *editor);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c
|
||||
index 4a36f8c..ae33090 100644
|
||||
--- a/calendar/gui/dialogs/event-page.c
|
||||
+++ b/calendar/gui/dialogs/event-page.c
|
||||
@@ -700,6 +700,26 @@ create_image_event_box (const char *image_text, const char *tip_text)
|
||||
return box;
|
||||
}
|
||||
|
||||
+GtkWidget *
|
||||
+event_page_get_toplevel_widget (CompEditorPage *page)
|
||||
+{
|
||||
+ EventPagePrivate *priv;
|
||||
+
|
||||
+ priv = EVENT_PAGE_GET_PRIVATE (page);
|
||||
+
|
||||
+ return priv->main;
|
||||
+}
|
||||
+
|
||||
+GtkWidget *
|
||||
+get_event_page_widget (EventPage *epage)
|
||||
+{
|
||||
+ EventPagePrivate *priv;
|
||||
+
|
||||
+ priv = EVENT_PAGE_GET_PRIVATE (epage);
|
||||
+
|
||||
+ return priv->hour_selector;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
sensitize_widgets (EventPage *epage)
|
||||
{
|
||||
diff --git a/calendar/gui/dialogs/event-page.h b/calendar/gui/dialogs/event-page.h
|
||||
index 7c868f1..6c47ae5 100644
|
||||
--- a/calendar/gui/dialogs/event-page.h
|
||||
+++ b/calendar/gui/dialogs/event-page.h
|
||||
@@ -109,6 +109,8 @@ ENameSelector * event_page_get_name_selector (EventPage *epage);
|
||||
void event_page_add_attendee (EventPage *epage,
|
||||
EMeetingAttendee *attendee);
|
||||
|
||||
+GtkWidget * get_event_page_widget (EventPage *epage);
|
||||
+
|
||||
G_END_DECLS
|
||||
|
||||
#endif
|
||||
diff --git a/calendar/gui/e-cal-event.c b/calendar/gui/e-cal-event.c
|
||||
index 6e295ab..a30ce49 100644
|
||||
--- a/calendar/gui/e-cal-event.c
|
||||
+++ b/calendar/gui/e-cal-event.c
|
||||
@@ -103,6 +103,16 @@ e_cal_event_target_new_component (ECalEvent *ece, struct _CalendarComponent *com
|
||||
return t;
|
||||
}
|
||||
|
||||
+ECalEventTargetCompEditor *
|
||||
+e_cal_event_target_comp_editor (ECalEvent *ec_event, struct _CompEditor *editor)
|
||||
+{
|
||||
+ ECalEventTargetCompEditor *t = e_event_target_new (&ec_event->event, E_CAL_EVENT_TARGET_COMP_EDITOR, sizeof (*t));
|
||||
+
|
||||
+ t->editor = g_object_ref (editor);
|
||||
+
|
||||
+ return t;
|
||||
+}
|
||||
+
|
||||
/* ********************************************************************** */
|
||||
|
||||
static void *eceh_parent_class;
|
||||
@@ -112,11 +122,18 @@ static const EEventHookTargetMask eceh_component_masks[] = {
|
||||
{ NULL },
|
||||
};
|
||||
|
||||
+static const EEventHookTargetMask eceh_compeditor_masks[] = {
|
||||
+ { "inited", E_CAL_EVENT_COMPEDITOR_INITED },
|
||||
+ { NULL },
|
||||
+};
|
||||
+
|
||||
static const EEventHookTargetMap eceh_targets[] = {
|
||||
{ "component", E_CAL_EVENT_TARGET_COMPONENT, eceh_component_masks },
|
||||
+ { "compeditor", E_CAL_EVENT_TARGET_COMP_EDITOR, eceh_compeditor_masks },
|
||||
{ NULL },
|
||||
};
|
||||
|
||||
+
|
||||
static void
|
||||
eceh_finalize (GObject *o)
|
||||
{
|
||||
diff --git a/calendar/gui/e-cal-event.h b/calendar/gui/e-cal-event.h
|
||||
index 4fbaa39..f131cb9 100644
|
||||
--- a/calendar/gui/e-cal-event.h
|
||||
+++ b/calendar/gui/e-cal-event.h
|
||||
@@ -38,6 +38,7 @@ typedef struct _ECalEventClass ECalEventClass;
|
||||
|
||||
enum _e_cal_event_target_t {
|
||||
E_CAL_EVENT_TARGET_COMPONENT,
|
||||
+ E_CAL_EVENT_TARGET_COMP_EDITOR,
|
||||
};
|
||||
|
||||
/* Flags that describe TARGET_COMPONENT */
|
||||
@@ -45,6 +46,11 @@ enum {
|
||||
E_CAL_EVENT_COMPONENT_MIGRATION = 1 << 0,
|
||||
};
|
||||
|
||||
+
|
||||
+enum {
|
||||
+ E_CAL_EVENT_COMPEDITOR_INITED = 1 << 0,
|
||||
+};
|
||||
+
|
||||
typedef struct _ECalEventTargetComponent ECalEventTargetComponent;
|
||||
|
||||
struct _ECalEventTargetComponent {
|
||||
@@ -53,6 +59,14 @@ struct _ECalEventTargetComponent {
|
||||
struct _CalendarComponent *component;
|
||||
};
|
||||
|
||||
+
|
||||
+typedef struct _ECalEventTargetCompEditor ECalEventTargetCompEditor;
|
||||
+
|
||||
+struct _ECalEventTargetCompEditor {
|
||||
+ EEventTarget target;
|
||||
+ struct _CompEditor *editor;
|
||||
+};
|
||||
+
|
||||
struct _ECalEvent {
|
||||
EEvent event;
|
||||
|
||||
@@ -66,6 +80,7 @@ struct _ECalEventClass {
|
||||
GType e_cal_event_get_type (void);
|
||||
ECalEvent* e_cal_event_peek (void);
|
||||
ECalEventTargetComponent* e_cal_event_target_new_component (ECalEvent *ece, struct _CalendarComponent *component, guint32 flags);
|
||||
+ECalEventTargetCompEditor * e_cal_event_target_comp_editor (ECalEvent *ec_event, struct _CompEditor *editor);
|
||||
|
||||
/* ********************************************************************** */
|
||||
|
||||
diff --git a/configure.in b/configure.in
|
||||
index 13a5b2d..d147adf 100644
|
||||
--- a/configure.in 2008-12-04 07:44:04.865124000 +0100
|
||||
+++ b/configure.in 2008-12-04 07:49:16.324346000 +0100
|
||||
new file mode 100644
|
||||
index 0000000..f101059
|
||||
@@ -918,3 +918,7 @@ if test "x${enable_mono}" = "xyes"; then
|
||||
AC_SUBST(ICE_DESKTOP_LIBS)
|
||||
MONO_BASED_PLUGINS="$MONO_BASED_PLUGINS sharepoint-account-setup"
|
||||
+ SHAREPOINT_FEATURES=sharepoint-features
|
||||
+ PKG_CHECK_MODULES(DBUS, dbus-glib-1)
|
||||
+ AC_SUBST(DBUS_CFLAGS)
|
||||
+ AC_SUBST(DBUS_LIBS)
|
||||
fi
|
||||
@@ -1752,7 +1756,7 @@ AC_ARG_ENABLE([plugins],
|
||||
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="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $EXCHANGE_PLUGIN $MONO_PLUGIN $MONO_BASED_PLUGINS"
|
||||
+plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $SHAREPOINT_FEATURES $EXCHANGE_PLUGIN $MONO_PLUGIN $MONO_BASED_PLUGINS"
|
||||
all_plugins_base="$plugins_base_always sa-junk-plugin bogo-junk-plugin exchange-operations mono"
|
||||
|
||||
plugins_standard_always="bbdb subject-thread save-calendar select-one-source copy-tool mail-to-task mark-calendar-offline audio-inline mailing-list-actions default-mailer import-ics-attachments prefer-plain mail-notification attachment-reminder face backup-restore email-custom-header templates pst-import"
|
||||
@@ -2098,6 +2102,7 @@ plugins/face/Makefile
|
||||
plugins/external-editor/Makefile
|
||||
plugins/webdav-account-setup/Makefile
|
||||
plugins/sharepoint-account-setup/Makefile
|
||||
+plugins/sharepoint-features/Makefile
|
||||
smime/Makefile
|
||||
smime/lib/Makefile
|
||||
smime/gui/Makefile
|
||||
diff --git a/plugins/sharepoint-features/Makefile.am b/plugins/sharepoint-features/Makefile.am
|
||||
--- /dev/null
|
||||
+++ b/plugins/sharepoint-features/Makefile.am
|
||||
@@ -0,0 +1,40 @@
|
||||
+INCLUDES = \
|
||||
+ -I$(top_srcdir) \
|
||||
+ -I$(top_builddir)/shell \
|
||||
+ -I$(top_srcdir)/widgets \
|
||||
+ -I$(top_srcdir)/widgets/misc \
|
||||
+ -I$(top_builddir)/calendar/gui \
|
||||
+ -I$(top_builddir)/calendar/gui/dialogs \
|
||||
+ $(EVOLUTION_CALENDAR_CFLAGS) \
|
||||
+ -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
|
||||
+ -DCONNECTOR_GLADEDIR=\""$(gladedir)"\" \
|
||||
+ $(SOURCE_SEL_CFLAGS)
|
||||
+
|
||||
+
|
||||
+@EVO_PLUGIN_RULE@
|
||||
+
|
||||
+plugin_DATA = \
|
||||
+ org-gnome-sharepoint-features.eplug
|
||||
+
|
||||
+plugin_LTLIBRARIES = liborg-gnome-sharepoint-features.la
|
||||
+
|
||||
+liborg_gnome_sharepoint_features_la_SOURCES = \
|
||||
+ meeting-workspace.c
|
||||
+
|
||||
+liborg_gnome_sharepoint_features_la_LIBADD = \
|
||||
+ $(top_builddir)/e-util/libeutil.la \
|
||||
+ $(top_builddir)/calendar/gui/libevolution-calendar.la \
|
||||
+ $(top_builddir)/widgets/misc/libemiscwidgets.la \
|
||||
+ $(NO_UNDEFINED_REQUIRED_LIBS) \
|
||||
+ $(EVOLUTION_CALENDAR_LIBS)
|
||||
+liborg_gnome_sharepoint_features_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
|
||||
+
|
||||
+glade_DATA = meetingworkspaces.glade
|
||||
+
|
||||
+EXTRA_DIST = \
|
||||
+ org-gnome-sharepoint-features.eplug.xml \
|
||||
+ $(glade_DATA)
|
||||
+
|
||||
+BUILT_SOURCES = org-gnome-sharepoint-features.eplug
|
||||
+
|
||||
+CLEANFILES = $(BUILT_SOURCES)
|
||||
diff --git a/plugins/sharepoint-features/meetingworkspaces.glade b/plugins/sharepoint-features/meetingworkspaces.glade
|
||||
new file mode 100644
|
||||
index 0000000..d2c1106
|
||||
--- /dev/null
|
||||
+++ b/plugins/sharepoint-features/meetingworkspaces.glade
|
||||
@@ -0,0 +1,324 @@
|
||||
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
|
||||
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
|
||||
+
|
||||
+<glade-interface>
|
||||
+
|
||||
+<widget class="GtkDialog" id="meeting-workspace-dialog">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="title" translatable="yes">Meeting Workspace</property>
|
||||
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
+ <property name="window_position">GTK_WIN_POS_NONE</property>
|
||||
+ <property name="modal">False</property>
|
||||
+ <property name="resizable">True</property>
|
||||
+ <property name="destroy_with_parent">False</property>
|
||||
+ <property name="decorated">True</property>
|
||||
+ <property name="skip_taskbar_hint">False</property>
|
||||
+ <property name="skip_pager_hint">False</property>
|
||||
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
|
||||
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
|
||||
+ <property name="focus_on_map">True</property>
|
||||
+ <property name="urgency_hint">False</property>
|
||||
+ <property name="has_separator">True</property>
|
||||
+
|
||||
+ <child internal-child="vbox">
|
||||
+ <widget class="GtkVBox" id="dialog-vbox1">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="homogeneous">False</property>
|
||||
+ <property name="spacing">0</property>
|
||||
+
|
||||
+ <child internal-child="action_area">
|
||||
+ <widget class="GtkHButtonBox" id="dialog-action_area1">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkButton" id="cancelbutton1">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="can_default">True</property>
|
||||
+ <property name="can_focus">True</property>
|
||||
+ <property name="label">gtk-cancel</property>
|
||||
+ <property name="use_stock">True</property>
|
||||
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <property name="response_id">-6</property>
|
||||
+ </widget>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkButton" id="okbutton1">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="can_default">True</property>
|
||||
+ <property name="can_focus">True</property>
|
||||
+ <property name="label">gtk-ok</property>
|
||||
+ <property name="use_stock">True</property>
|
||||
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <property name="response_id">-5</property>
|
||||
+ </widget>
|
||||
+ </child>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">False</property>
|
||||
+ <property name="fill">True</property>
|
||||
+ <property name="pack_type">GTK_PACK_END</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkVBox" id="vbox3">
|
||||
+ <property name="border_width">12</property>
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="homogeneous">False</property>
|
||||
+ <property name="spacing">12</property>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkRadioButton" id="create-radio">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="can_focus">True</property>
|
||||
+ <property name="label" translatable="yes">C_reate meeting workspace</property>
|
||||
+ <property name="use_underline">True</property>
|
||||
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <property name="active">False</property>
|
||||
+ <property name="inconsistent">False</property>
|
||||
+ <property name="draw_indicator">True</property>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">False</property>
|
||||
+ <property name="fill">False</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkTable" id="table1">
|
||||
+ <property name="border_width">12</property>
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="n_rows">2</property>
|
||||
+ <property name="n_columns">2</property>
|
||||
+ <property name="homogeneous">False</property>
|
||||
+ <property name="row_spacing">12</property>
|
||||
+ <property name="column_spacing">12</property>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkLabel" id="title-label">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="label" translatable="yes">T_itle:</property>
|
||||
+ <property name="use_underline">True</property>
|
||||
+ <property name="use_markup">False</property>
|
||||
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
+ <property name="wrap">False</property>
|
||||
+ <property name="selectable">False</property>
|
||||
+ <property name="xalign">0</property>
|
||||
+ <property name="yalign">0.5</property>
|
||||
+ <property name="xpad">0</property>
|
||||
+ <property name="ypad">0</property>
|
||||
+ <property name="mnemonic_widget">title-entry</property>
|
||||
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
+ <property name="width_chars">-1</property>
|
||||
+ <property name="single_line_mode">False</property>
|
||||
+ <property name="angle">0</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="title-entry" type="label-for"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="left_attach">0</property>
|
||||
+ <property name="right_attach">1</property>
|
||||
+ <property name="top_attach">0</property>
|
||||
+ <property name="bottom_attach">1</property>
|
||||
+ <property name="x_options">fill</property>
|
||||
+ <property name="y_options"></property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkLabel" id="template-label">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="label" translatable="yes">T_emplate:</property>
|
||||
+ <property name="use_underline">True</property>
|
||||
+ <property name="use_markup">False</property>
|
||||
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
+ <property name="wrap">False</property>
|
||||
+ <property name="selectable">False</property>
|
||||
+ <property name="xalign">0</property>
|
||||
+ <property name="yalign">0.5</property>
|
||||
+ <property name="xpad">0</property>
|
||||
+ <property name="ypad">0</property>
|
||||
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
+ <property name="width_chars">-1</property>
|
||||
+ <property name="single_line_mode">False</property>
|
||||
+ <property name="angle">0</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="template-combo" type="label-for"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="left_attach">0</property>
|
||||
+ <property name="right_attach">1</property>
|
||||
+ <property name="top_attach">1</property>
|
||||
+ <property name="bottom_attach">2</property>
|
||||
+ <property name="x_options">fill</property>
|
||||
+ <property name="y_options"></property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkEntry" id="title-entry">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="can_focus">True</property>
|
||||
+ <property name="editable">True</property>
|
||||
+ <property name="visibility">True</property>
|
||||
+ <property name="max_length">0</property>
|
||||
+ <property name="text" translatable="yes"></property>
|
||||
+ <property name="has_frame">True</property>
|
||||
+ <property name="invisible_char">●</property>
|
||||
+ <property name="activates_default">False</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="title-label" type="labelled-by"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="left_attach">1</property>
|
||||
+ <property name="right_attach">2</property>
|
||||
+ <property name="top_attach">0</property>
|
||||
+ <property name="bottom_attach">1</property>
|
||||
+ <property name="y_options"></property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkComboBoxEntry" id="template-combo">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="items" translatable="yes">Basic Meeting Workspace
|
||||
+Blank Meeting Workspace
|
||||
+Decision Meeting Workspace
|
||||
+Social Meeting Workspace
|
||||
+Multipage Meeting Workspace</property>
|
||||
+ <property name="add_tearoffs">False</property>
|
||||
+ <property name="has_frame">True</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="template-label" type="labelled-by"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="left_attach">1</property>
|
||||
+ <property name="right_attach">2</property>
|
||||
+ <property name="top_attach">1</property>
|
||||
+ <property name="bottom_attach">2</property>
|
||||
+ <property name="x_options">fill</property>
|
||||
+ <property name="y_options">fill</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">True</property>
|
||||
+ <property name="fill">True</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkRadioButton" id="link-radio">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="can_focus">True</property>
|
||||
+ <property name="label" translatable="yes">_Link to existing workspace</property>
|
||||
+ <property name="use_underline">True</property>
|
||||
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <property name="active">False</property>
|
||||
+ <property name="inconsistent">False</property>
|
||||
+ <property name="draw_indicator">True</property>
|
||||
+ <property name="group">create-radio</property>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">False</property>
|
||||
+ <property name="fill">False</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkHBox" id="hbox2">
|
||||
+ <property name="border_width">12</property>
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="homogeneous">False</property>
|
||||
+ <property name="spacing">12</property>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkLabel" id="workspaces-label">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="label" translatable="yes">Wo_rkspaces:</property>
|
||||
+ <property name="use_underline">True</property>
|
||||
+ <property name="use_markup">False</property>
|
||||
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
+ <property name="wrap">False</property>
|
||||
+ <property name="selectable">False</property>
|
||||
+ <property name="xalign">0.5</property>
|
||||
+ <property name="yalign">0.5</property>
|
||||
+ <property name="xpad">0</property>
|
||||
+ <property name="ypad">0</property>
|
||||
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
+ <property name="width_chars">-1</property>
|
||||
+ <property name="single_line_mode">False</property>
|
||||
+ <property name="angle">0</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="workspaces-combo" type="label-for"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">False</property>
|
||||
+ <property name="fill">False</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkComboBoxEntry" id="workspaces-combo">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="add_tearoffs">False</property>
|
||||
+ <property name="has_frame">True</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="workspaces-label" type="labelled-by"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">True</property>
|
||||
+ <property name="fill">True</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">True</property>
|
||||
+ <property name="fill">True</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">True</property>
|
||||
+ <property name="fill">True</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkStatusbar" id="statusbar">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="has_resize_grip">True</property>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">False</property>
|
||||
+ <property name="fill">False</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+ </widget>
|
||||
+ </child>
|
||||
+</widget>
|
||||
+
|
||||
+</glade-interface>
|
||||
diff --git a/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml b/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml
|
||||
new file mode 100644
|
||||
index 0000000..d59db73
|
||||
--- /dev/null
|
||||
+++ b/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml
|
||||
@@ -0,0 +1,20 @@
|
||||
+<e-plugin-list>
|
||||
+ <e-plugin
|
||||
+ type="shlib"
|
||||
+ id="org.gnome.evolution.calendar-meeting-workspace"
|
||||
+ _name="Create or Link to meeting workspaces"
|
||||
+ location="@PLUGINDIR@/liborg-gnome-sharepoint-features@SOEXT@">
|
||||
+
|
||||
+ <_description>Plugin to create or link to a meeting workspace</_description>
|
||||
+
|
||||
+ <author name="Chenthill" email="pchenthill@novell.com"/>
|
||||
+
|
||||
+ <hook class="org.gnome.evolution.calendar.events:1.0">
|
||||
+ <event
|
||||
+ id="editor.inited"
|
||||
+ handle="org_gnome_meeting_workspace"
|
||||
+ target="compeditor"
|
||||
+ />
|
||||
+ </hook>
|
||||
+ </e-plugin>
|
||||
+</e-plugin-list>
|
||||
diff --git a/plugins/sharepoint-features/meeting-workspace.c b/plugins/sharepoint-features/meeting-workspace.c
|
||||
new file mode 100644
|
||||
index 0000000..791a87b
|
||||
--- /dev/null
|
||||
+++ b/plugins/sharepoint-features/meeting-workspace.c
|
||||
@@ -0,0 +1,230 @@
|
||||
+#ifdef HAVE_CONFIG_H
|
||||
+#include <config.h>
|
||||
+#endif
|
||||
+
|
||||
+#include <gtk/gtk.h>
|
||||
+#include <e-util/e-plugin.h>
|
||||
+#include <glib/gi18n.h>
|
||||
+#include <e-util/e-plugin-ui.h>
|
||||
+#include <e-util/e-util-private.h>
|
||||
+#include <e-cal-event.h>
|
||||
+#include <calendar/gui/dialogs/event-editor.h>
|
||||
+#include <dbus/dbus-glib.h>
|
||||
+#include <dbus/dbus-glib-lowlevel.h>
|
||||
+#include <glade/glade.h>
|
||||
+
|
||||
+static void action_meeting_workspace (GtkAction *action, EventEditor *editor);
|
||||
+void org_gnome_meeting_workspace (EPlugin *ep, ECalEventTargetCompEditor *target);
|
||||
+
|
||||
+static const gchar *ui =
|
||||
+"<ui>"
|
||||
+" <toolbar name='main-toolbar'>"
|
||||
+" <toolitem action='meeting-workspace'/>"
|
||||
+" </toolbar>"
|
||||
+"</ui>";
|
||||
+
|
||||
+static GtkActionEntry meeting_entries[] = {
|
||||
+ { "meeting-workspace",
|
||||
+ "stock_people",
|
||||
+ N_("Meeting Workspace"),
|
||||
+ NULL,
|
||||
+ N_("Create or Link to Meeting Workspaces"),
|
||||
+ G_CALLBACK (action_meeting_workspace) }
|
||||
+};
|
||||
+
|
||||
+typedef struct {
|
||||
+ GtkWidget *dialog;
|
||||
+ GtkWidget *title_entry;
|
||||
+ GtkWidget *template_label;
|
||||
+ GtkWidget *template_combo;
|
||||
+ GtkWidget *create_radio;
|
||||
+ GtkWidget *link_radio;
|
||||
+ GtkWidget *workspace_label;
|
||||
+ GtkWidget *workspace_combo;
|
||||
+ GtkWidget *statusbar;
|
||||
+ gboolean got_workspaces;
|
||||
+ guint contextid;
|
||||
+
|
||||
+ EventEditor *editor;
|
||||
+} MeetingWorkspaceWidget;
|
||||
+
|
||||
+static DBusGProxy *
|
||||
+get_dice_dbus_proxy ()
|
||||
+{
|
||||
+ GError *err = NULL;
|
||||
+ DBusGConnection *conn = dbus_g_bus_get (DBUS_BUS_SESSION, &err);
|
||||
+ if (!conn) {
|
||||
+ g_printerr ("Failed to connect: %s\n", err->message);
|
||||
+ g_error_free (err);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return dbus_g_proxy_new_for_name (conn, "Novell.ICEDesktop.Daemon", "/Novell/ICEDesktop/Daemon",
|
||||
+ "Novell.ICEDesktop.Daemon");
|
||||
+}
|
||||
+
|
||||
+static MeetingWorkspaceWidget *
|
||||
+setup_widgets (void)
|
||||
+{
|
||||
+ char *gladefile;
|
||||
+ GladeXML *xml;
|
||||
+ MeetingWorkspaceWidget *mws;
|
||||
+
|
||||
+ gladefile = g_build_filename (EVOLUTION_GLADEDIR, "meetingworkspaces.glade", NULL);
|
||||
+ xml = glade_xml_new (gladefile, NULL, NULL);
|
||||
+#define GW(name) glade_xml_get_widget (xml, name)
|
||||
+
|
||||
+ mws = g_new0 (MeetingWorkspaceWidget, 1);
|
||||
+ mws->dialog = GW("meeting-workspace-dialog");
|
||||
+ mws->title_entry = GW("title-entry");
|
||||
+ mws->template_label = GW("template-label");
|
||||
+ mws->template_combo = GW("template-combo");
|
||||
+ mws->create_radio = GW("create-radio");
|
||||
+ mws->link_radio = GW("link-radio");
|
||||
+ mws->workspace_label = GW("workspaces-label");
|
||||
+ mws->workspace_combo = GW("workspaces-combo");
|
||||
+ mws->statusbar = GW("statusbar");
|
||||
+
|
||||
+ return mws;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+create_toggled_cb (GtkToggleButton *create_radio, gpointer user_data)
|
||||
+{
|
||||
+ gboolean active;
|
||||
+ MeetingWorkspaceWidget *mws = user_data;
|
||||
+
|
||||
+ active = gtk_toggle_button_get_active (create_radio);
|
||||
+
|
||||
+ gtk_entry_set_editable ((GtkEntry *)mws->title_entry, active);
|
||||
+ gtk_widget_set_sensitive (mws->template_combo, active);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+link_toggled_cb (GtkToggleButton *link_radio, gpointer user_data)
|
||||
+{
|
||||
+ gboolean active;
|
||||
+ MeetingWorkspaceWidget *mws = user_data;
|
||||
+
|
||||
+ active = gtk_toggle_button_get_active (link_radio);
|
||||
+ gtk_widget_set_sensitive (mws->workspace_combo, active);
|
||||
+
|
||||
+ if (active && !mws->got_workspaces) {
|
||||
+ gtk_statusbar_push ((GtkStatusbar *)mws->statusbar, mws->contextid,
|
||||
+ _("Loading Meeting workspaces..."));
|
||||
+
|
||||
+ // Get the meeting workspaces and set them
|
||||
+
|
||||
+ mws->got_workspaces = TRUE;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+release_memory (MeetingWorkspaceWidget *mws)
|
||||
+{
|
||||
+
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+dialog_response_cb (GtkDialog *dialog, int response_id, gpointer user_data)
|
||||
+{
|
||||
+ MeetingWorkspaceWidget *mws = user_data;
|
||||
+
|
||||
+ if (response_id == GTK_RESPONSE_OK) {
|
||||
+ gboolean active;
|
||||
+ const char *workspace_url = NULL;
|
||||
+ ECalComponent *comp;
|
||||
+
|
||||
+ active = gtk_toggle_button_get_active ((GtkToggleButton *) mws->link_radio);
|
||||
+
|
||||
+ if (active) {
|
||||
+ // Get the workspace from combo box selection
|
||||
+ } else {
|
||||
+ // Create the meeting workspace
|
||||
+ const char *title;
|
||||
+
|
||||
+ title = gtk_entry_get_text ((GtkEntry *) mws->title_entry);
|
||||
+
|
||||
+ if (!title || !*title) {
|
||||
+ gtk_statusbar_push ((GtkStatusbar *) mws->statusbar, mws->contextid,
|
||||
+ _("Please set a title and press OK."));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ gtk_statusbar_push ((GtkStatusbar *) mws->statusbar, mws->contextid,
|
||||
+ _("Creating Meeting Workspace. Please wait..."));
|
||||
+ // Create Meeting Workspace
|
||||
+ }
|
||||
+
|
||||
+ // Set the workspace url to component
|
||||
+ comp = comp_editor_get_comp ((CompEditor *) mws->editor);
|
||||
+ }
|
||||
+
|
||||
+ gtk_widget_destroy (mws->dialog);
|
||||
+ release_memory (mws);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+init_widgets (MeetingWorkspaceWidget *mws)
|
||||
+{
|
||||
+ g_signal_connect((mws->create_radio), "toggled",
|
||||
+ G_CALLBACK (create_toggled_cb), mws);
|
||||
+
|
||||
+ g_signal_connect((mws->link_radio), "toggled",
|
||||
+ G_CALLBACK (link_toggled_cb), mws);
|
||||
+
|
||||
+ g_signal_connect((mws->dialog), "response",
|
||||
+ G_CALLBACK (dialog_response_cb), mws);
|
||||
+
|
||||
+ gtk_widget_set_sensitive (mws->workspace_combo, FALSE);
|
||||
+
|
||||
+ gtk_combo_box_set_active ((GtkComboBox *) mws->template_combo, 0);
|
||||
+
|
||||
+ mws->contextid = gtk_statusbar_get_context_id ((GtkStatusbar *)mws->statusbar, "Meeting workspace status");
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+action_meeting_workspace (GtkAction *action, EventEditor *editor)
|
||||
+{
|
||||
+ MeetingWorkspaceWidget *mws;
|
||||
+
|
||||
+ mws = setup_widgets ();
|
||||
+ init_widgets (mws);
|
||||
+ mws->editor = editor;
|
||||
+
|
||||
+ gtk_dialog_run ((GtkDialog *) mws->dialog);
|
||||
+ g_print ("Clicked meeting workspace \n");
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+org_gnome_meeting_workspace (EPlugin *ep, ECalEventTargetCompEditor *target)
|
||||
+{
|
||||
+ GtkActionGroup *action_group;
|
||||
+ GtkUIManager *manager;
|
||||
+ GError *error = NULL;
|
||||
+ CompEditor *editor = target->editor;
|
||||
+ CompEditorFlags flags;
|
||||
+ ECal *client;
|
||||
+ const char *uri;
|
||||
+
|
||||
+ client = comp_editor_get_client (editor);
|
||||
+ uri = e_cal_get_uri (client);
|
||||
+ flags = comp_editor_get_flags (editor);
|
||||
+
|
||||
+ if (!g_str_has_prefix (uri, "sharepoint://"))
|
||||
+ return;
|
||||
+
|
||||
+ if (!(flags & COMP_EDITOR_MEETING && flags & COMP_EDITOR_NEW_ITEM))
|
||||
+ return;
|
||||
+
|
||||
+ action_group = comp_editor_get_action_group (editor, "coordinated");
|
||||
+ gtk_action_group_add_actions (action_group, meeting_entries,
|
||||
+ G_N_ELEMENTS (meeting_entries), editor);
|
||||
+
|
||||
+ manager = comp_editor_get_ui_manager (editor);
|
||||
+ gtk_ui_manager_add_ui_from_string (manager, ui, -1, &error);
|
||||
+ if (error != NULL) {
|
||||
+ g_critical ("%s: %s", G_STRFUNC, error->message);
|
||||
+ g_error_free (error);
|
||||
+ }
|
||||
+}
|
Loading…
Reference in New Issue
Block a user