From 02cbfd837abaf8ec1218cc97f7fed70cbd1fdf7e Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Thu, 16 Feb 2012 10:57:40 +0000 Subject: Make Capplet work again with new CamelSettings and other stuffs. Also add EPlugin support to capplet so that exchange and other accoutns can be configured via this. now. --- capplet/settings/mail-capplet-shell.c.orig | 395 +++++++++++++++++++++++++++++ 1 file changed, 395 insertions(+) create mode 100644 capplet/settings/mail-capplet-shell.c.orig (limited to 'capplet/settings/mail-capplet-shell.c.orig') diff --git a/capplet/settings/mail-capplet-shell.c.orig b/capplet/settings/mail-capplet-shell.c.orig new file mode 100644 index 0000000000..3d3e015e94 --- /dev/null +++ b/capplet/settings/mail-capplet-shell.c.orig @@ -0,0 +1,395 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ + +/* + * 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 + * + * + * Authors: + * Srinivasa Ragavan + * Srinivasa Ragavan + * + * Copyright (C) 2010 Intel Corporation. (www.intel.com) + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include "mail-capplet-shell.h" +#include "mail-view.h" +#include + +#include + +#include +#include +#include +#include + +#include + +enum { + CTRL_W_PRESSED, + CTRL_Q_PRESSED, + LAST_SIGNAL +}; + +/* Re usable colors */ + +GdkColor *pcolor_sel; +gchar *scolor_sel; +GdkColor *pcolor_fg_sel; +gchar *scolor_fg_sel; +GdkColor *pcolor_bg_norm; +gchar *scolor_bg_norm; +GdkColor *pcolor_norm; +gchar *scolor_norm; +GdkColor *pcolor_fg_norm; +gchar *scolor_fg_norm; + +static guint mail_capplet_shell_signals[LAST_SIGNAL]; + +struct _MailCappletShellPrivate { + + EMailBackend *backend; + GtkWidget *box; + + GtkWidget * top_bar; + GtkWidget *message_pane; + GtkWidget *bottom_bar; + + /* Top Bar */ + GtkWidget *action_bar; + GtkWidget *quit; + + gboolean main_loop; + + MailViewChild *settings_view; +}; + +static void mail_capplet_shell_quit (MailCappletShell *shell); + +G_DEFINE_TYPE (MailCappletShell, mail_capplet_shell, GTK_TYPE_WINDOW) + +static void setup_abooks (void); + +static void +mail_capplet_shell_init (MailCappletShell *shell) +{ + shell->priv = g_new0 (MailCappletShellPrivate, 1); + shell->priv->settings_view = NULL; +} + +static void +mail_capplet_shell_finalize (GObject *object) +{ + G_OBJECT_CLASS (mail_capplet_shell_parent_class)->finalize (object); +} + +static void +ms_ctrl_w_pressed (MailCappletShell *shell) +{ + mail_view_close_view ((MailView *) shell->view); +} + +static void +ms_ctrl_q_pressed (MailCappletShell *shell) +{ + mail_capplet_shell_quit (shell); +} + +static void +mail_capplet_shell_class_init (MailCappletShellClass *klass) +{ + GObjectClass * object_class = G_OBJECT_CLASS (klass); + GtkBindingSet *binding_set; + + mail_capplet_shell_parent_class = g_type_class_peek_parent (klass); + object_class->finalize = mail_capplet_shell_finalize; + klass->ctrl_w_pressed = ms_ctrl_w_pressed; + klass->ctrl_q_pressed = ms_ctrl_q_pressed; + + mail_capplet_shell_signals[CTRL_W_PRESSED] = + g_signal_new ("ctrl_w_pressed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (MailCappletShellClass, ctrl_w_pressed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + mail_capplet_shell_signals[CTRL_Q_PRESSED] = + g_signal_new ("ctrl_q_pressed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (MailCappletShellClass, ctrl_q_pressed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + binding_set = gtk_binding_set_by_class (klass); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_W, GDK_CONTROL_MASK, "ctrl_w_pressed", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_w, GDK_CONTROL_MASK, "ctrl_w_pressed", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Q, GDK_CONTROL_MASK, "ctrl_q_pressed", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Q, GDK_CONTROL_MASK, "ctrl_q_pressed", 0); + +}; + +static void +ms_init_style (GtkStyle *style) +{ + pcolor_sel = &style->base[GTK_STATE_SELECTED]; + scolor_sel = gdk_color_to_string (pcolor_sel); + + pcolor_norm = &style->bg[GTK_STATE_NORMAL]; + scolor_norm = gdk_color_to_string (pcolor_norm); + + pcolor_bg_norm = &style->base[GTK_STATE_NORMAL]; + scolor_bg_norm = gdk_color_to_string (pcolor_bg_norm); + + pcolor_fg_sel =&style->fg[GTK_STATE_SELECTED]; + scolor_fg_sel = gdk_color_to_string (pcolor_fg_sel); + + pcolor_fg_norm =&style->fg[GTK_STATE_NORMAL]; + scolor_fg_norm = gdk_color_to_string (pcolor_fg_norm); +} + +static void +mail_capplet_shell_quit (MailCappletShell *shell) +{ + MailCappletShellPrivate *priv = shell->priv; + + if (priv->main_loop) + gtk_main_quit (); + else + gtk_widget_destroy ((GtkWidget *) shell); +} + +static void +ms_delete_event (MailCappletShell *shell, + GdkEvent *event G_GNUC_UNUSED, + gpointer data G_GNUC_UNUSED) +{ + mail_capplet_shell_quit (shell); +} + +static void +ms_show_post_druid (MailViewChild *mfv G_GNUC_UNUSED, + MailCappletShell *shell) +{ + gtk_widget_destroy (GTK_WIDGET (shell)); +} + +#define PACK_IN_TOOL(wid,icon) { GtkWidget *tbox; tbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start ((GtkBox *)tbox, gtk_image_new_from_icon_name(icon, GTK_ICON_SIZE_BUTTON), FALSE, FALSE, 0); wid = (GtkWidget *)gtk_tool_button_new (tbox, NULL); } + +static void +mail_capplet_shell_construct (MailCappletShell *shell, + gint socket_id, + gboolean just_druid, + gboolean main_loop) +{ + MailCappletShellPrivate *priv = shell->priv; + GtkStyle *style = gtk_widget_get_default_style (); + EShell *eshell; + EMailSession *session; + + gtk_window_set_icon_name ((GtkWindow *)shell, "evolution"); + gtk_window_set_title ((GtkWindow *)shell, _("Evolution account assistant")); + ms_init_style (style); + g_signal_connect ((GObject *)shell, "delete-event", G_CALLBACK (ms_delete_event), NULL); + gtk_window_set_type_hint ((GtkWindow *) shell, GDK_WINDOW_TYPE_HINT_NORMAL); + if (g_getenv("ANJAL_NO_MAX") == NULL && FALSE) { + GdkScreen *scr = gtk_widget_get_screen ((GtkWidget *) shell); + gtk_window_set_default_size ((GtkWindow *) shell, gdk_screen_get_width (scr), gdk_screen_get_height (scr)); + gtk_window_set_decorated ((GtkWindow *) shell, FALSE); + } else { + gtk_window_set_default_size ((GtkWindow *) shell, 1024, 500); + } + + priv->main_loop = main_loop; + priv->box = (GtkWidget *) gtk_vbox_new (FALSE, 0); + gtk_widget_show ((GtkWidget *) priv->box); + + if (!socket_id) { + gtk_container_add ((GtkContainer *) shell, priv->box); + } else { + GtkWidget *plug = gtk_plug_new (socket_id); + + gtk_container_add ((GtkContainer *) plug, priv->box); + g_signal_connect (plug, "destroy", G_CALLBACK (gtk_main_quit), NULL); + gtk_widget_show (plug); + gtk_widget_hide ((GtkWidget *) shell); + + } + + if (camel_init (e_get_user_data_dir (), TRUE) != 0) + exit (0); + + camel_provider_init (); + + eshell = e_shell_get_default (); + + if (eshell == NULL) { + GError *error = NULL; + + eshell = g_initable_new ( + E_TYPE_SHELL, NULL, &error, + "application-id", "org.gnome.Evolution", + "flags", 0, + "geometry", NULL, + "module-directory", EVOLUTION_MODULEDIR, + "meego-mode", FALSE, + "express-mode", FALSE, + "small-screen-mode", FALSE, + "online", FALSE, + NULL); + + if (error != NULL) + g_error ("%s", error->message); + + e_shell_load_modules (eshell); + } + + shell->priv->backend = E_MAIL_BACKEND (e_shell_get_backend_by_name (eshell, "mail")); + session = e_mail_backend_get_session (shell->priv->backend); + + shell->view = mail_view_new (); + shell->view->backend = shell->priv->backend; + gtk_widget_show ((GtkWidget *) shell->view); + gtk_box_pack_end ((GtkBox *) priv->box, (GtkWidget *) shell->view, TRUE, TRUE, 2); + + mail_config_init (session); + mail_msg_init (); + + if (just_druid) { + MailViewChild *mc; + + gtk_notebook_set_show_tabs ((GtkNotebook *) shell->view, FALSE); + mc = mail_view_add_page ((MailView *) shell->view, MAIL_VIEW_ACCOUNT, NULL); + g_signal_connect (mc, "view-close", G_CALLBACK(ms_show_post_druid), shell); + setup_abooks (); + } else + shell->priv->settings_view = mail_view_add_page ((MailView *) shell->view, MAIL_VIEW_SETTINGS, NULL); + +} + +GtkWidget * +mail_capplet_shell_new (gint socket_id, + gboolean just_druid, + gboolean main_loop) +{ + MailCappletShell *shell = g_object_new (MAIL_CAPPLET_SHELL_TYPE, NULL); + mail_capplet_shell_construct (shell, socket_id, just_druid, main_loop); + + return GTK_WIDGET (shell); +} + +#define LOCAL_BASE_URI "local:" +#define PERSONAL_RELATIVE_URI "system" + +static void +setup_abooks (void) +{ + GSList *groups; + ESourceGroup *group; + ESourceList *list = NULL; + ESourceGroup *on_this_computer = NULL; + ESource *personal_source = NULL; + GError *error = NULL; + + e_book_client_get_sources (&list, &error); + + if (error != NULL) { + g_warning ( + "%s: Unable to get books: %s", + G_STRFUNC, error->message); + g_error_free (error); + return; + } + + groups = e_source_list_peek_groups (list); + if (groups) { + /* groups are already there, we need to search for things... */ + GSList *g; + gchar *base_dir, *base_uri; + + base_dir = g_build_filename ( + e_get_user_data_dir (), "addressbook", "local", NULL); + base_uri = g_filename_to_uri (base_dir, NULL, NULL); + + for (g = groups; g; g = g->next) { + group = E_SOURCE_GROUP (g->data); + + if (strcmp (base_uri, e_source_group_peek_base_uri (group)) == 0) + e_source_group_set_base_uri (group, LOCAL_BASE_URI); + + if (!on_this_computer && !strcmp (LOCAL_BASE_URI, e_source_group_peek_base_uri (group))) { + on_this_computer = g_object_ref (group); + break; + } + } + + g_free (base_dir); + g_free (base_uri); + } + + if (on_this_computer) { + /* make sure "Personal" shows up as a source under + * this group */ + GSList *sources = e_source_group_peek_sources (on_this_computer); + GSList *s; + for (s = sources; s; s = s->next) { + ESource *source = E_SOURCE (s->data); + const gchar *relative_uri; + + relative_uri = e_source_peek_relative_uri (source); + if (relative_uri == NULL) + continue; + if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { + personal_source = g_object_ref (source); + break; + } + } + } + else { + /* create the local source group */ + group = e_source_group_new (_("On This Computer"), LOCAL_BASE_URI); + e_source_list_add_group (list, group, -1); + + on_this_computer = group; + } + + if (!personal_source) { + /* Create the default Person addressbook */ + ESource *source = e_source_new (_("Personal"), PERSONAL_RELATIVE_URI); + e_source_group_add_source (on_this_computer, source, -1); + + e_source_set_property (source, "completion", "true"); + + personal_source = source; + } + + if (on_this_computer) + g_object_unref (on_this_computer); + if (personal_source) + g_object_unref (personal_source); + + e_source_list_sync (list, NULL); + g_object_unref (list); +} + -- cgit v1.2.3