diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/groupwise-features/ChangeLog | 90 | ||||
-rw-r--r-- | plugins/groupwise-features/Makefile.am | 52 | ||||
-rw-r--r-- | plugins/groupwise-features/org-gnome-groupwise-features.eplug.xml | 18 | ||||
-rw-r--r-- | plugins/groupwise-features/org-gnome-proxy-errors.xml | 24 | ||||
-rw-r--r-- | plugins/groupwise-features/org-gnome-proxy-login-errors.xml | 10 | ||||
-rw-r--r-- | plugins/groupwise-features/proxy-add-dialog.glade | 779 | ||||
-rw-r--r-- | plugins/groupwise-features/proxy-listing.glade | 202 | ||||
-rw-r--r-- | plugins/groupwise-features/proxy-login-dialog.glade | 207 | ||||
-rw-r--r-- | plugins/groupwise-features/proxy-login.c | 510 | ||||
-rw-r--r-- | plugins/groupwise-features/proxy-login.h | 64 | ||||
-rw-r--r-- | plugins/groupwise-features/proxy.c | 912 | ||||
-rw-r--r-- | plugins/groupwise-features/proxy.h | 66 |
12 files changed, 2916 insertions, 18 deletions
diff --git a/plugins/groupwise-features/ChangeLog b/plugins/groupwise-features/ChangeLog index de28aa5c22..49b5474239 100644 --- a/plugins/groupwise-features/ChangeLog +++ b/plugins/groupwise-features/ChangeLog @@ -1,13 +1,83 @@ +2005-07-20 Sankar P <psankar@novell.com> + + * Consolidated the proxy and proxy-login plugins into the + groupwise-features plugins and merged the ChangeLogs and copied the + following files from their old plugins directories. + + * proxy.[ch] + * proxy-login.[ch] + * org-gnome-proxy-errors.xml + * org-gnome-proxy-login-errors.xml + * proxy-login-dialog.glade + * proxy-listing.glade + * proxy-add-dialog.glade + 2005-07-19 Vivek Jain <jvivek@novell.com> * junk-mail-settings.c: Marked strings for translation +2005-07-15 Sankar P <psankar@novell.com> + + * proxy-login.h: Removed the permissions from the structure, + since it is no longer needed. + +2005-07-15 Sankar P <psankar@novell.com> + + * proxy-login.c: Put permissions on the store instead of the + global structure as it gets unref before store_add. + +2005-07-14 Not Zed <NotZed@Ximian.com> + + * proxy-login.c (proxy_login_add_new_store): fixed the store + permission names. + +2005-07-14 Vivek Jain <jvivek@novell.com> + + * proxy.c: (proxy_commit),(proxy_abort): + NULL checks before we do anything else here (quite likely to be NULL) + **Fixes #310347 + +2005-07-13 Tor Lillqvist <tml@novell.com> + + * Makefile.am (LIBADD): Link with libeutil. Link with + libevolution-mail on Win32 only. (Have I understood correctly that + it isn't considered a good idea on Unix to link plugins at + link-time with libevolution-mail?) + + * org-gnome-proxy-login.eplug.xml: Use SOEXT. + +2005-07-13 Tor Lillqvist <tml@novell.com> + + * Makefile.am (LIBADD): Link with libeutil. + + 2005-07-13 Tor Lillqvist <tml@novell.com> * Makefile.am (NO_UNDEFINED_REQUIRED_LIBS): As the code does use functions from libevolution-mail, link with it. But OK, let's do it (at build time) only on Win32, then. +2005-07-12 Sankar P <psankar@novell.com> + + * Makefile.am : + Added CLEANFILES element and glade and error files to EXTRA_DIST. + +2005-07-12 Sankar P <psankar@novell.com> + + * Makefile.am : + Added missed header files to the SOURCES. + +2005-07-12 Sankar P <psankar@novell.com> + + * Makefile.am : + Added org-gnome-proxy-errors.xml file to the EXTRA_DIST and + added CLEANFILES. + +2005-07-12 Sankar P <psankar@novell.com> + + * Makefile.am : + Added missed header files to the SOURCES. + 2005-07-12 Vivek Jain <jvivek@novell.com> transferred ChangeLog entry here @@ -15,6 +85,26 @@ * plugins/groupwise-features/*: Remove the camel-groupwise-listener code as it runs in a different plugin. +2005-07-11 Sankar P <psankar@novell.com> + + * proxy.c : (org_gnome_proxy) + Made changes so that the proxy list will be loaded only when the + account edited is enabled. So a new connection need not be created, + when an account is edited and a connection is not present. + Fixes #309999 + +2005-07-11 Sankar P <psankar@novell.com> + + * proxy.c : + (proxy_edit_account) : Added code to hide the contacts button + while editing proxy access rights for a proxy. + Fixes #309992 + +2005-07-11 Sankar P <psankar@novell.com> + + * proxy.c : + Included <string.h> header to avoid the compiler warnings. + 2005-07-07 Frederic Crozat <fcrozat@mandriva.com> * send-options.c: Add missing header. diff --git a/plugins/groupwise-features/Makefile.am b/plugins/groupwise-features/Makefile.am index 0c0941db18..ab17af76ee 100644 --- a/plugins/groupwise-features/Makefile.am +++ b/plugins/groupwise-features/Makefile.am @@ -10,26 +10,31 @@ INCLUDES = \ $(EVOLUTION_CALENDAR_CFLAGS) \ $(EVOLUTION_ADDRESSBOOK_CFLAGS) \ $(CAMEL_GROUPWISE_CFLAGS) \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" + -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ + -DEVOLUTION_IMAGESDIR=\""$(imagesdir)"\" @EVO_PLUGIN_RULE@ plugin_DATA = org-gnome-groupwise-features.eplug org-gnome-compose-send-options.xml plugin_LTLIBRARIES = liborg-gnome-groupwise-features.la -liborg_gnome_groupwise_features_la_SOURCES = \ - share-folder-common.c \ - share-folder.c \ - share-folder.h \ - install-shared.c \ - send-options.c \ - mail-send-options.c \ - mail-send-options.h \ - status-track.c \ - addressbook-groupwise.c \ - junk-mail-settings.c \ - junk-settings.c \ - junk-settings.h +liborg_gnome_groupwise_features_la_SOURCES = \ + share-folder-common.c \ + share-folder.c \ + share-folder.h \ + install-shared.c \ + send-options.c \ + mail-send-options.c \ + mail-send-options.h \ + status-track.c \ + addressbook-groupwise.c \ + junk-mail-settings.c \ + junk-settings.c \ + junk-settings.h \ + proxy.h \ + proxy.c \ + proxy-login.h \ + proxy-login.c liborg_gnome_groupwise_features_la_LIBADD= \ $(top_builddir)/e-util/libeutil.la \ @@ -45,14 +50,27 @@ liborg_gnome_groupwise_features_la_LIBADD= \ liborg_gnome_groupwise_features_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED) -glade_DATA =properties.glade junk-settings.glade +glade_DATA = \ + properties.glade \ + junk-settings.glade \ + proxy-add-dialog.glade \ + proxy-listing.glade \ + proxy-login-dialog.glade + +error_DATA = \ + org-gnome-shared-folder.errors.xml \ + org-gnome-proxy-errors.xml \ + org-gnome-proxy-login-errors.xml -error_DATA = org-gnome-shared-folder.errors.xml errordir = $(privdatadir)/errors +BUILT_SOURCES = $(error_i18n) + EXTRA_DIST = \ $(error_DATA) \ $(glade_DATA) \ org-gnome-compose-send-options.xml \ - org-gnome-groupwise-features.eplug.xml + org-gnome-groupwise-features.eplug.xml \ + org-gnome-proxy-login-errors.xml + CLEANFILES = $(BUILT_SOURCES) diff --git a/plugins/groupwise-features/org-gnome-groupwise-features.eplug.xml b/plugins/groupwise-features/org-gnome-groupwise-features.eplug.xml index 591af966a9..1f1e2cee91 100644 --- a/plugins/groupwise-features/org-gnome-groupwise-features.eplug.xml +++ b/plugins/groupwise-features/org-gnome-groupwise-features.eplug.xml @@ -6,6 +6,9 @@ <author name="Vivek Jain" email="jvivek@novell.com" /> <author name="Chenthill Palanisamy" email="pchenthill@novell.com"/> <author name="Parthasarathi Susarla" email="sparthasarathi@novell.com"/> + <author name="Sankar P" email="psankar@novell.com"/> + <author name="Shreyas Srinivasan" email="sshreyas@novell.com"/> + <_description>A plugin for the features in Groupwise accounts.</_description> <hook class="org.gnome.evolution.mail.config:1.0"> <group id="org.gnome.evolution.mail.folderConfig" target="folder" @@ -79,7 +82,20 @@ activate="org_gnome_compose_send_options"/> </menu> </hook> - + + <hook class="org.gnome.evolution.mail.config:1.0"> + <group id="org.gnome.evolution.mail.config.accountEditor" + target="account" commit = "proxy_commit" abort="proxy_abort"> + <item type="page" path="60.proxy" factory="org_gnome_proxy"/> + </group> + </hook> + + <hook class="org.gnome.evolution.mail.popup:1.0"> + <menu id="org.gnome.evolution.mail.foldertree.popup" target="folder" + factory = "org_gnome_create_proxy_login_option"> + </menu> + </hook> + </e-plugin> </e-plugin-list> diff --git a/plugins/groupwise-features/org-gnome-proxy-errors.xml b/plugins/groupwise-features/org-gnome-proxy-errors.xml new file mode 100644 index 0000000000..013db90209 --- /dev/null +++ b/plugins/groupwise-features/org-gnome-proxy-errors.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<error-list domain="org.gnome.evolution.proxy"> +<error id="invalid-user" type="error"> +<primary>Invalid user</primary> +<secondary> +Proxy access cannot be given to user "{0}" +</secondary> +</error> + +<error id="no-user" type="error"> +<primary>Specify User</primary> +<secondary> +You have to specify a valid user name to give proxy rights. +</secondary> +</error> + +<error id="user-is-proxy" type="error"> +<primary>Specify User</primary> +<secondary> +You have already given proxy permissions to this user. +</secondary> +</error> + +</error-list> diff --git a/plugins/groupwise-features/org-gnome-proxy-login-errors.xml b/plugins/groupwise-features/org-gnome-proxy-login-errors.xml new file mode 100644 index 0000000000..75162f4f21 --- /dev/null +++ b/plugins/groupwise-features/org-gnome-proxy-login-errors.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<error-list domain="org.gnome.evolution.proxy-login"> +<error id="invalid-user" type="error"> +<primary>Invalid user</primary> +<secondary> +Proxy login as "{0}" was unsuccessful. Please check Email Id and try again; +</secondary> +</error> +</error-list> + diff --git a/plugins/groupwise-features/proxy-add-dialog.glade b/plugins/groupwise-features/proxy-add-dialog.glade new file mode 100644 index 0000000000..06c8c4823c --- /dev/null +++ b/plugins/groupwise-features/proxy-add-dialog.glade @@ -0,0 +1,779 @@ +<?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="ProxyAccessRights"> + <property name="border_width">8</property> + <property name="visible">True</property> + <property name="title" translatable="yes">Add/Edit</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_NONE</property> + <property name="modal">True</property> + <property name="resizable">False</property> + <property name="destroy_with_parent">True</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="has_separator">True</property> + + <child internal-child="vbox"> + <widget class="GtkVBox" id="dialog-vbox2"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child internal-child="action_area"> + <widget class="GtkHButtonBox" id="hbuttonbox1"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + + <child> + <widget class="GtkButton" id="proxy_help"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-help</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">-11</property> + </widget> + </child> + + <child> + <widget class="GtkButton" id="proxy_cancel"> + <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="proxy_button_ok"> + <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="vbox5"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkVBox" id="vbox6"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkFrame" id="frame3"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="label_yalign">0.5</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + + <child> + <widget class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">1</property> + <property name="yscale">1</property> + <property name="top_padding">0</property> + <property name="bottom_padding">0</property> + <property name="left_padding">12</property> + <property name="right_padding">0</property> + + <child> + <widget class="GtkTable" id="table4"> + <property name="border_width">1</property> + <property name="visible">True</property> + <property name="n_rows">1</property> + <property name="n_columns">1</property> + <property name="homogeneous">False</property> + <property name="row_spacing">0</property> + <property name="column_spacing">0</property> + + <child> + <widget class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">27</property> + + <child> + <widget class="GtkEntry" id="proxy_account_name"> + <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> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkHBox" id="proxy_name_box"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkButton" id="contacts"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <accelerator key="t" modifiers="GDK_MOD1_MASK" signal="clicked"/> + <accelerator key="T" modifiers="GDK_MOD1_MASK" signal="clicked"/> + + <child> + <widget class="GtkAlignment" id="alignment4"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <property name="top_padding">0</property> + <property name="bottom_padding">0</property> + <property name="left_padding">0</property> + <property name="right_padding">0</property> + + <child> + <widget class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">2</property> + + <child> + <widget class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="stock">gtk-jump-to</property> + <property name="icon_size">4</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label19"> + <property name="visible">True</property> + <property name="label" translatable="yes">Con_tacts</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> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </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> + </packing> + </child> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkLabel" id="label13"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Name</b></property> + <property name="use_underline">False</property> + <property name="use_markup">True</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> + </widget> + <packing> + <property name="type">label_item</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="GtkFrame" id="frame4"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="label_yalign">0.5</property> + <property name="shadow_type">GTK_SHADOW_OUT</property> + + <child> + <widget class="GtkAlignment" id="alignment3"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">1</property> + <property name="yscale">1</property> + <property name="top_padding">2</property> + <property name="bottom_padding">7</property> + <property name="left_padding">12</property> + <property name="right_padding">0</property> + + <child> + <widget class="GtkVBox" id="vbox7"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">5</property> + + <child> + <widget class="GtkTable" id="table5"> + <property name="visible">True</property> + <property name="n_rows">4</property> + <property name="n_columns">3</property> + <property name="homogeneous">False</property> + <property name="row_spacing">8</property> + <property name="column_spacing">43</property> + + <child> + <widget class="GtkLabel" id="label15"> + <property name="visible">True</property> + <property name="label" translatable="yes">Mail</property> + <property name="use_underline">False</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> + </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="label16"> + <property name="visible">True</property> + <property name="label" translatable="yes">Appointments</property> + <property name="use_underline">False</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> + </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="GtkLabel" id="label17"> + <property name="visible">True</property> + <property name="label" translatable="yes">Reminder Notes</property> + <property name="use_underline">False</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> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label18"> + <property name="visible">True</property> + <property name="label" translatable="yes">Tasks</property> + <property name="use_underline">False</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> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="mailRead"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Read</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> + <accelerator key="r" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="R" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </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="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="appRead"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Read</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> + <accelerator key="r" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="R" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </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"></property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="noteRead"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Read</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> + <accelerator key="r" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="R" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="taskRead"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Read</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> + <accelerator key="r" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="R" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="mailWrite"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Write</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> + <accelerator key="w" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="W" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </widget> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</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="GtkCheckButton" id="appWrite"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Write</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> + <accelerator key="w" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="W" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </widget> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</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="GtkCheckButton" id="noteWrite"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Write</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> + <accelerator key="w" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="W" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </widget> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="taskWrite"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Write</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> + <accelerator key="w" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="W" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </widget> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + </widget> + <packing> + <property name="padding">6</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkVBox" id="vbox8"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">7</property> + + <child> + <widget class="GtkCheckButton" id="alarms"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Subscribe to my _alarms</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> + <accelerator key="a" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="A" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="notifications"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Subscribe to my _notifications</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> + <accelerator key="n" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="N" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="modify_rules"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Modify _folders/options/rules/</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> + <accelerator key="r" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="R" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="read_private"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Read items marked _private</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> + <accelerator key="p" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + <accelerator key="P" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkLabel" id="label14"> + <property name="visible">True</property> + <property name="label" translatable="yes">Access Rights</property> + <property name="use_underline">False</property> + <property name="use_markup">True</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> + </widget> + <packing> + <property name="type">label_item</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">9</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> + </widget> + </child> +</widget> + +</glade-interface> diff --git a/plugins/groupwise-features/proxy-listing.glade b/plugins/groupwise-features/proxy-listing.glade new file mode 100644 index 0000000000..989ef55613 --- /dev/null +++ b/plugins/groupwise-features/proxy-listing.glade @@ -0,0 +1,202 @@ +<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> +<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> + +<glade-interface> +<requires lib="gnome"/> + +<widget class="GtkDialog" id="tab_proxy"> + <property name="visible">True</property> + <property name="title" translatable="yes">dialog1</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="has_separator">True</property> + + <child internal-child="vbox"> + <widget class="GtkVBox" id="proxy_vbox"> + <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_area2"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + </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="GtkNotebook" id="notebook1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="show_tabs">True</property> + <property name="show_border">True</property> + <property name="tab_pos">GTK_POS_TOP</property> + <property name="scrollable">True</property> + <property name="enable_popup">False</property> + + <child> + <widget class="GtkVBox" id="proxy_vbox"> + <property name="border_width">12</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + + <child> + <widget class="GtkHBox" id="hbox2"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <widget class="GtkTreeView" id="proxy_access_list"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">False</property> + <property name="rules_hint">False</property> + <property name="reorderable">False</property> + <property name="enable_search">True</property> + <property name="fixed_height_mode">False</property> + <property name="hover_selection">False</property> + <property name="hover_expand">False</property> + </widget> + </child> + </widget> + <packing> + <property name="padding">5</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkVBox" id="vbox5"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + + <child> + <widget class="GtkButton" id="add_proxy"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-add</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + </widget> + <packing> + <property name="padding">6</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkButton" id="edit_proxy"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-edit</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkButton" id="remove_proxy"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-remove</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + </widget> + <packing> + <property name="padding">4</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">5</property> + <property name="expand">False</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="tab_expand">False</property> + <property name="tab_fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Proxy</property> + <property name="use_underline">False</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> + </widget> + <packing> + <property name="type">tab</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> +</widget> + +</glade-interface> diff --git a/plugins/groupwise-features/proxy-login-dialog.glade b/plugins/groupwise-features/proxy-login-dialog.glade new file mode 100644 index 0000000000..ada43bc446 --- /dev/null +++ b/plugins/groupwise-features/proxy-login-dialog.glade @@ -0,0 +1,207 @@ +<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> +<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> + +<glade-interface> +<requires lib="gnome"/> + +<widget class="GtkDialog" id="proxy_login_dialog"> + <property name="visible">True</property> + <property name="title" translatable="yes">Proxy Login</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_NONE</property> + <property name="modal">True</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="has_separator">True</property> + + <child internal-child="vbox"> + <widget class="GtkVBox" id="dialog-vbox2"> + <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_area2"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + + <child> + <widget class="GtkButton" id="proxy_help"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-help</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">-11</property> + </widget> + </child> + + <child> + <widget class="GtkButton" id="proxy_cancel"> + <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="proxy_login"> + <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="GtkFrame" id="frame3"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="label_yalign">0.5</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + + <child> + <widget class="GtkVBox" id="vd1"> + <property name="border_width">4</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkHBox" id="auto_complete"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkEntry" id="account_name"> + <property name="width_request">250</property> + <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> + </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">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">5</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <widget class="GtkTreeView" id="proxy_login_treeview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">False</property> + <property name="rules_hint">False</property> + <property name="reorderable">False</property> + <property name="enable_search">True</property> + <property name="fixed_height_mode">False</property> + <property name="hover_selection">False</property> + <property name="hover_expand">False</property> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> + + <child> + <widget class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Account Name</b></property> + <property name="use_underline">False</property> + <property name="use_markup">True</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> + </widget> + <packing> + <property name="type">label_item</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">5</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> +</widget> + +</glade-interface> diff --git a/plugins/groupwise-features/proxy-login.c b/plugins/groupwise-features/proxy-login.c new file mode 100644 index 0000000000..57970ea171 --- /dev/null +++ b/plugins/groupwise-features/proxy-login.c @@ -0,0 +1,510 @@ + +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: + * Shreyas Srinivasan <sshreyas@novell.com> + * Sankar P <psankar@novell.com> + * + * Copyright 2004 Novell, Inc. (www.novell.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <glib.h> +#include <string.h> +#include <glib/gi18n.h> +#include <glade/glade.h> +#include <glib/gmain.h> +#include <gtk/gtktreemodel.h> +#include <gtk/gtkliststore.h> +#include <gtk/gtktreeselection.h> +#include <gtk/gtktreeview.h> +#include <gtk/gtkdialog.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtk.h> +#include <gtk/gtktogglebutton.h> +#include <gtk/gtkcellrenderertoggle.h> +#include <gtk/gtkcellrenderertext.h> + +#include <libedataserverui/e-passwords.h> +#include <mail/mail-component.h> +#include <mail/em-folder-tree.h> +#include <mail/mail-config.h> +#include <mail/em-folder-selector.h> +#include <mail/em-popup.h> +#include <mail/em-account-editor.h> +#include <camel/camel-url.h> +#include <camel/camel-store.h> +#include <mail/mail-ops.h> +#include <e-util/e-account.h> +#include <e-util/e-error.h> +#include <e-util/e-icon-factory.h> + +#include <e-gw-container.h> +#include <e-gw-connection.h> +#include <e-gw-message.h> +#include <libedataserverui/e-name-selector.h> +#include <proxy-login.h> + +#define GW(name) glade_xml_get_widget (priv->xml, name) + +#define ACCOUNT_PICTURE 0 +#define ACCOUNT_NAME 1 + +void org_gnome_proxy_account_login (EPopup *ep, EPopupItem *p, char *uri); + +proxyLogin *pld = NULL; +static GObjectClass *parent_class = NULL; + +struct _proxyLoginPrivate { + /* Glade XML data for the Add/Edit Proxy dialog*/ + GladeXML *xml; + /* Widgets */ + GtkWidget *main; + + /*Tree Store*/ + GtkTreeStore *store; + /*Tree View*/ + GtkTreeView *tree; + + char *help_section; +}; + +static void +proxy_login_finalize (GObject *object) +{ + proxyLogin *prd = (proxyLogin *) object; + proxyLoginPrivate *priv; + + g_return_if_fail (IS_PROXY_LOGIN (prd)); + priv = prd->priv; + g_list_foreach (prd->proxy_list, (GFunc)g_free, NULL); + g_list_free (prd->proxy_list); + prd->proxy_list = NULL; + g_object_unref (priv->xml); + g_free (priv->help_section); + + if (prd->priv) { + g_free (prd->priv); + prd->priv = NULL; + } + + if (parent_class->finalize) + (* parent_class->finalize) (object); +} + +static void +proxy_login_dispose (GObject *object) +{ + proxyLogin *prd = (proxyLogin *) object; + + g_return_if_fail (IS_PROXY_LOGIN (prd)); + + if (parent_class->dispose) + (* parent_class->dispose) (object); +} + +/* Class initialization function for the Send Options */ +static void +proxy_login_class_init (GObjectClass *object) +{ + proxyLoginClass *klass; + GObjectClass *object_class; + + klass = PROXY_LOGIN_CLASS (object); + parent_class = g_type_class_peek_parent (klass); + object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = proxy_login_finalize; + object_class->dispose = proxy_login_dispose; +} + +static void +proxy_login_init (GObject *object) +{ + proxyLogin *prd; + proxyLoginPrivate *priv; + + prd = PROXY_LOGIN (object); + priv = g_new0 (proxyLoginPrivate, 1); + prd->priv = priv; + + prd->proxy_list = NULL; + priv->xml = NULL; + priv->main = NULL; + priv->store = NULL; + priv->tree = NULL; +} + +GType +proxy_login_get_type (void) +{ + static GType type = 0; + + if (type == 0) { + static const GTypeInfo info = { + sizeof (proxyLoginClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) proxy_login_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (proxyLogin), + 0, /* n_preallocs */ + (GInstanceInitFunc) proxy_login_init, + NULL /* instance_init */ + }; + type = g_type_register_static (G_TYPE_OBJECT, + "proxyLoginType", + &info, 0); + } + + return type; +} + +proxyLogin * +proxy_login_new (void) +{ + proxyLogin *prd; + + prd = g_object_new (TYPE_PROXY_LOGIN, NULL); + + return prd; +} + +static int +proxy_get_password (EAccount *account, char **user_name, char **password) +{ + char *uri, *failed_auth, *key, *prompt; + CamelURL *url; + const char *poa_address, *use_ssl, *soap_port; + + url = camel_url_new (account->source->url, NULL); + if (url == NULL) + return NULL; + *user_name = g_strdup (url->user); + poa_address = url->host; + if (!poa_address || strlen (poa_address) ==0) + return NULL; + + soap_port = camel_url_get_param (url, "soap_port"); + if (!soap_port || strlen (soap_port) == 0) + soap_port = "7191"; + use_ssl = camel_url_get_param (url, "use_ssl"); + + key = g_strdup_printf ("groupwise://%s@%s/", url->user, poa_address); + + if (!g_str_equal (use_ssl, "never")) + uri = g_strdup_printf ("https://%s:%s/soap", poa_address, soap_port); + else + uri = g_strdup_printf ("http://%s:%s/soap", poa_address, soap_port); + + failed_auth = ""; + + prompt = g_strdup_printf (_("%sEnter password for %s (user %s)"), + failed_auth, poa_address, url->user); + + *password = e_passwords_get_password ("Groupwise", key); + + g_free (key); + g_free (prompt); + g_free (uri); + camel_url_free (url); + + return 1; +} + +static EGwConnection * +proxy_login_get_cnc (EAccount *account) +{ + EGwConnection *cnc; + CamelURL *url; + url = camel_url_new (account->source->url, NULL); + char *uri = NULL, *failed_auth = NULL, *key = NULL, *prompt = NULL, *password = NULL; + const char *use_ssl, *soap_port; + + url = camel_url_new (account->source->url, NULL); + if (url == NULL) + return NULL; + if (!url->host || strlen (url->host) ==0) + return NULL; + + soap_port = camel_url_get_param (url, "soap_port"); + if (!soap_port || strlen (soap_port) == 0) + soap_port = "7191"; + use_ssl = camel_url_get_param (url, "use_ssl"); + + key = g_strdup_printf ("groupwise://%s@%s/", url->user, url->host); + if (!g_str_equal (use_ssl, "never")) + uri = g_strdup_printf ("https://%s:%s/soap", url->host, soap_port); + else + uri = g_strdup_printf ("http://%s:%s/soap", url->host, soap_port); + + failed_auth = ""; + cnc = NULL; + + prompt = g_strdup_printf (_("%sEnter password for %s (user %s)"), + failed_auth, url->host, url->user); + + password = e_passwords_get_password ("Groupwise", key); + + cnc = e_gw_connection_new (uri, url->user, password); + if (!E_IS_GW_CONNECTION(cnc) && use_ssl && g_str_equal (use_ssl, "when-possible")) { + char *http_uri = g_strconcat ("http://", uri + 8, NULL); + cnc = e_gw_connection_new (http_uri, url->user, password); + g_free (http_uri); + } + + g_free (prompt); + g_free (key); + g_free (password); + g_free (uri); + camel_url_free (url); + + return cnc; +} + + +static void +proxy_login_cb (GtkDialog *dialog, gint state) +{ + GtkWidget *account_name_tbox; + proxyLoginPrivate *priv; + char *proxy_name; + + priv = pld->priv; + account_name_tbox = glade_xml_get_widget (priv->xml, "account_name"); + proxy_name = g_strdup ((char *) gtk_entry_get_text ((GtkEntry *) account_name_tbox)); + + switch (state) { + case GTK_RESPONSE_OK: + gtk_widget_destroy (priv->main); + proxy_soap_login (proxy_name); + g_object_unref (pld); + break; + case GTK_RESPONSE_CANCEL: + gtk_widget_destroy (priv->main); + g_object_unref (pld); + break; + case GTK_RESPONSE_HELP: + break; + } + + g_free (proxy_name); +} + +static void +proxy_soap_login (char *email) +{ + EAccountList *accounts = mail_config_get_accounts(); + EAccount *srcAccount; + EAccount *dstAccount; + EGwConnection *proxy_cnc, *cnc; + CamelURL *uri = NULL, *parent = NULL ; + char *password = NULL, *user_name = NULL; + char *proxy_source_url = NULL, *parent_source_url = NULL ; + char *name; + int i; + int permissions = 0; + + for (i=0; email[i]!='\0' && email[i]!='@' ; i++); + if (email[i]=='@') + name = g_strndup(email, i); + else { + e_error_run (NULL, "org.gnome.evolution.proxy-login:invalid-user",email ,NULL); + return; + } + + srcAccount = pld->account; + cnc = proxy_login_get_cnc(srcAccount); + proxy_get_password (srcAccount, &user_name, &password); + proxy_cnc = e_gw_connection_get_proxy_connection (cnc, user_name, password, email, &permissions); + + if (proxy_cnc) { + parent = camel_url_new (e_account_get_string(srcAccount, E_ACCOUNT_SOURCE_URL), NULL); + parent_source_url = camel_url_to_string (parent, CAMEL_URL_HIDE_PASSWORD); + uri = camel_url_copy (parent); + camel_url_set_user (uri, name); + proxy_source_url = camel_url_to_string (uri, CAMEL_URL_HIDE_PASSWORD); + dstAccount = e_account_new(); + e_account_set_string(dstAccount, E_ACCOUNT_ID_ADDRESS, email); + dstAccount->enabled = TRUE; + e_account_set_string(dstAccount, E_ACCOUNT_SOURCE_URL, proxy_source_url); + e_account_set_string (dstAccount, E_ACCOUNT_TRANSPORT_URL, proxy_source_url); + e_account_set_string (dstAccount, E_ACCOUNT_NAME, email); + e_account_set_string (dstAccount, E_ACCOUNT_ID_NAME, name); + e_account_set_string (dstAccount, E_ACCOUNT_PROXY_PARENT_UID, srcAccount->uid); + e_account_list_add(accounts, dstAccount); + e_account_list_change (accounts, srcAccount); + e_account_list_save(accounts); + g_object_set_data ((GObject *)dstAccount, "permissions", permissions); + mail_get_store(e_account_get_string(dstAccount, E_ACCOUNT_SOURCE_URL), NULL, proxy_login_add_new_store, dstAccount); + + g_free (proxy_source_url); + g_free (parent_source_url); + camel_url_free (parent); + } else { + e_error_run (NULL, "org.gnome.evolution.proxy-login:invalid-user",email ,NULL); + return; + } + + g_free (name); + g_free (user_name); + g_free (password); +} + + +static void +proxy_login_add_new_store (char *uri, CamelStore *store, void *user_data) +{ + MailComponent *component = mail_component_peek (); + EAccount *account = user_data; + int permissions = g_object_get_data ((GObject *)account, "permissions"); + + if (store == NULL) + return; + + if (!(permissions & E_GW_PROXY_MAIL_WRITE)) + store->mode &= !CAMEL_STORE_WRITE; + + store->flags |= CAMEL_STORE_PROXY; + mail_component_add_store (component, store, account->name); +} + +static void +proxy_login_tree_view_changed_cb(GtkDialog *dialog) +{ + proxyLoginPrivate *priv = pld->priv; + GtkTreeSelection* account_select; + GtkTreeIter iter; + GtkWidget *account_name_tbox; + GtkTreeModel *model; + char *account_mailid; + + account_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree)); + gtk_tree_selection_get_selected (account_select, &model, &iter); + gtk_tree_model_get (model, &iter, ACCOUNT_NAME, &account_mailid, -1); + account_mailid = g_strrstr (account_mailid, "\n") + 1; + account_name_tbox = glade_xml_get_widget (priv->xml, "account_name"); + gtk_entry_set_text((GtkEntry*) account_name_tbox,account_mailid); +} + +static void +proxy_login_setup_tree_view (void) +{ + proxyLoginPrivate *priv; + GtkTreeSelection *selection; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + + priv = pld->priv; + renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF, + "xpad", 4, + "ypad", 4, + NULL); + column = gtk_tree_view_column_new_with_attributes ("Picture", renderer, "pixbuf", ACCOUNT_PICTURE, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (priv->tree), column); + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Name", renderer, "text", ACCOUNT_NAME, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (priv->tree), column); + gtk_tree_view_set_model (priv->tree, GTK_TREE_MODEL (priv->store)); + selection = gtk_tree_view_get_selection (priv->tree); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); + g_signal_connect (G_OBJECT (selection), "changed", proxy_login_tree_view_changed_cb, NULL); +} + +static void +proxy_login_update_tree (void) +{ + GtkTreeIter iter; + int i,n; + GdkPixbuf *broken_image = NULL; + GList *proxy_list = NULL; + char *proxy_name; + char *proxy_email; + EGwConnection *cnc; + proxyLoginPrivate *priv = pld->priv; + gchar *file_name = e_icon_factory_get_icon_filename ("stock_person", 48); + broken_image = gdk_pixbuf_new_from_file (file_name, NULL); + + cnc = proxy_login_get_cnc(pld->account); + e_gw_connection_get_proxy_list (cnc, &proxy_list); + + gtk_tree_store_clear (priv->store); + if (proxy_list != NULL) { + n = g_list_length(proxy_list); + for (i=0;i<n;i=i+2) { + proxy_name = g_list_nth_data(proxy_list,i); + proxy_email = g_list_nth_data(proxy_list,i+1); + gtk_tree_store_append (priv->store, &iter, NULL); + gtk_tree_store_set (priv->store, &iter, 0, broken_image, 1, g_strconcat(proxy_name, "\n", proxy_email, NULL), -1); + } + gtk_tree_view_set_model (GTK_TREE_VIEW(priv->tree),GTK_TREE_MODEL (priv->store)); + } +} + +void +org_gnome_proxy_account_login (EPopup *ep, EPopupItem *p, char *uri) +{ + proxyLoginPrivate *priv; + + pld = proxy_login_new(); + priv = pld->priv; + priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/proxy-login-dialog.glade", NULL, NULL); + priv->main = glade_xml_get_widget (priv->xml, "proxy_login_dialog"); + pld->account = mail_config_get_account_by_source_url (uri); + priv->tree = GTK_TREE_VIEW (glade_xml_get_widget (priv->xml, "proxy_login_treeview")); + priv->store = gtk_tree_store_new (2, + GDK_TYPE_PIXBUF, + G_TYPE_STRING + ); + proxy_login_setup_tree_view (); + proxy_login_update_tree (); + g_signal_connect (GTK_DIALOG (priv->main), "response", G_CALLBACK(proxy_login_cb), NULL); + gtk_widget_show (GTK_WIDGET (priv->main)); + } + +static EPopupItem popup_items[] = { +{ E_POPUP_ITEM, "20.emc.04", N_("_Proxy Login..."), org_gnome_proxy_account_login, NULL, NULL, 0, EM_POPUP_FOLDER_STORE } +}; + +static void +popup_free (EPopup *ep, GSList *items, void *data) +{ +g_slist_free (items); +} + +void +org_gnome_create_proxy_login_option (EPlugin *ep, EMPopupTargetFolder *t) +{ + EAccount *account; + GSList *menus = NULL; + int i; + + account = mail_config_get_account_by_source_url (t->uri); + if (g_strrstr (t->uri,"groupwise://") && !account->parent_uid) { + popup_items[0].label = _(popup_items[0].label); + for (i = 0; i < sizeof (popup_items) / sizeof (popup_items[0]); i++) + menus = g_slist_prepend (menus, &popup_items[i]); + e_popup_add_items (t->target.popup, menus, NULL, popup_free, t->uri); + } + return; + +} diff --git a/plugins/groupwise-features/proxy-login.h b/plugins/groupwise-features/proxy-login.h new file mode 100644 index 0000000000..2213124082 --- /dev/null +++ b/plugins/groupwise-features/proxy-login.h @@ -0,0 +1,64 @@ + /* Evolution calendar - Timezone selector dialog + * + * Copyright (C) 2005 Novell, Inc. + * + * Authors: Shreyas Srinivasan <sshreyas@novell.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <gtk/gtkwidget.h> +#include <gtk/gtk.h> + +#define TYPE_PROXY_LOGIN (proxy_login_get_type ()) +#define PROXY_LOGIN(obj) (GTK_CHECK_CAST ((obj), TYPE_PROXY_LOGIN, proxyLogin)) +#define PROXY_LOGIN_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_PROXY_LOGIN, proxyLoginClass)) +#define IS_PROXY_LOGIN(obj) (GTK_CHECK_TYPE ((obj), TYPE_PROXY_LOGIN)) +#define IS_PROXY_LOGIN_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), TYPE_PROXY_LOGIN)) + +typedef struct _proxyLogin proxyLogin; +typedef struct _proxyLoginClass proxyLoginClass; +typedef struct _proxyLoginPrivate proxyLoginPrivate; + +struct _proxyLogin{ + GObject object; + + /*Account*/ + EAccount *account; + + /*List of proxies*/ + GList *proxy_list; + + /* Private Dialog Information*/ + proxyLoginPrivate *priv; +}; + +struct _proxyLoginClass { + GObjectClass parent_class; +}; + +GType proxy_login_get_type (void); +proxyLogin * proxy_login_new (void); +static void proxy_login_cb (GtkDialog *dialog, gint state); +static void proxy_login_add_new_store (char *uri, CamelStore *store, void *user_data); +static void proxy_login_setup_tree_view (void); +void org_gnome_proxy_account_login (EPopup *ep, EPopupItem *p, char *uri); +proxyLogin* proxy_dialog_new (void); +static void proxy_soap_login (char *email); +char *parse_email_for_name (char *email); +static void proxy_login_update_tree (void); +static void proxy_login_tree_view_changed_cb(GtkDialog *dialog); +void org_gnome_create_proxy_login_option(EPlugin *ep, EMPopupTargetFolder *t); +static int proxy_get_password (EAccount *account, char **user_name, char **password); diff --git a/plugins/groupwise-features/proxy.c b/plugins/groupwise-features/proxy.c new file mode 100644 index 0000000000..4f9d5f31ef --- /dev/null +++ b/plugins/groupwise-features/proxy.c @@ -0,0 +1,912 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- + * + * Authors: + * Shreyas Srinivasan (sshreyas@novell.com) + * Sankar P ( psankar@novell.com ) + * + * Copyright 2004 Novell, Inc. (www.novell.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdlib.h> +#include <glib/gi18n.h> +#include <glade/glade.h> +#include <glib/gmain.h> + +#include <gtk/gtktreemodel.h> +#include <gtk/gtkliststore.h> +#include <gtk/gtktreeselection.h> +#include <gtk/gtktreeview.h> +#include <gtk/gtkdialog.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtk.h> +#include <gtk/gtktogglebutton.h> +#include <gtk/gtkcellrenderertoggle.h> +#include <gtk/gtkcellrenderertext.h> + +#include <libedataserverui/e-contact-store.h> + +#include <libgnomeui/gnome-ui-init.h> +#include <libgnome/gnome-init.h> +#include <e-util/e-error.h> +#include <e-gw-container.h> +#include <e-gw-connection.h> +#include <e-gw-message.h> + +#include <mail/em-account-editor.h> +#include <mail/em-config.h> +#include <mail/mail-component.h> +#include <mail/mail-ops.h> +#include <e-util/e-account.h> +#include <e-util/e-account-list.h> +#include <e-util/e-icon-factory.h> + +#include <camel/camel-url.h> +#include <libedataserverui/e-passwords.h> +#include <libedataserverui/e-name-selector.h> +#include <proxy.h> +#include <string.h> + +#define GW(name) glade_xml_get_widget (priv->xml, name) + +#define ACCOUNT_PICTURE 0 +#define ACCOUNT_NAME 1 +#define PROXY_ADD_DIALOG 2 +#define PROXY_EDIT_DIALOG 3 + +static GObjectClass *parent_class = NULL; + +struct _proxyDialogPrivate { + /* Glade XML data for the Add/Edit Proxy dialog*/ + GladeXML *xml; + /*Glade XML data for Proxy Tab*/ + GladeXML *xml_tab; + + /* Widgets */ + GtkWidget *main; + + /*name selector dialog*/ + ENameSelector *proxy_name_selector; + + GtkTreeView *tree; + GtkTreeStore *store; + + /* Check Boxes for storing proxy priveleges*/ + GtkWidget *account_name; + GtkWidget *mail_read; + GtkWidget *mail_write; + GtkWidget *app_read; + GtkWidget *app_write; + GtkWidget *note_read; + GtkWidget *note_write; + GtkWidget *task_read; + GtkWidget *task_write; + GtkWidget *alarms; + GtkWidget *notifications; + GtkWidget *options; + GtkWidget *private; + char *help_section; +}; + +static void +proxy_dialog_dispose (GObject *object) +{ + proxyDialog *prd = (proxyDialog *) object; + + g_return_if_fail (IS_PROXY_DIALOG (prd)); + + if (parent_class->dispose) + (*parent_class->dispose) (object); +} + +static void +free_proxy_handler (proxyHandler *handler) +{ + if (handler->uniqueid) + g_free (handler->uniqueid); + + if (handler->proxy_name) + g_free (handler->proxy_name); + + if (handler->proxy_email) + g_free (handler->proxy_email); + + handler->uniqueid = NULL; + handler->proxy_name = NULL; + handler->proxy_email = NULL; +} + +static void +proxy_dialog_finalize (GObject *object) +{ + proxyDialog *prd = (proxyDialog *) object; + proxyDialogPrivate *priv; + + g_return_if_fail (IS_PROXY_DIALOG (prd)); + priv = prd->priv; + + if(priv->proxy_name_selector) + g_object_unref (priv->proxy_name_selector); + + g_free (priv->help_section); + g_object_unref (priv->xml_tab); + + if (prd->priv) { + g_free (prd->priv); + prd->priv = NULL; + } + + if (parent_class->finalize) + (* parent_class->finalize) (object); +} + +/* Class initialization function for the Proxy*/ +static void +proxy_dialog_class_init (GObjectClass *object) +{ + proxyDialogClass *klass; + GObjectClass *object_class; + + klass = PROXY_DIALOG_CLASS (object); + parent_class = g_type_class_peek_parent (klass); + object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = proxy_dialog_finalize; + object_class->dispose = proxy_dialog_dispose; +} + +static void +proxy_dialog_init (GObject *object) +{ + proxyDialog *prd; + proxyDialogPrivate *priv; + + prd = PROXY_DIALOG (object); + priv = g_new0 (proxyDialogPrivate, 1); + + prd->priv = priv; + + priv->xml = NULL; + priv->xml_tab = NULL; + priv->main = NULL; + priv->tree = NULL; + priv->store = NULL; + priv->proxy_name_selector = NULL; + priv->account_name = NULL; + priv->mail_read = NULL; + priv->mail_write = NULL; + priv->app_read = NULL; + priv->app_write = NULL; + priv->note_read = NULL; + priv->note_write = NULL; + priv->task_read = NULL; + priv->task_write = NULL; + priv->alarms = NULL; + priv->notifications = NULL; + priv->options = NULL; + priv->private = NULL; + priv->help_section = NULL; +} + +GType +proxy_dialog_get_type (void) +{ + static GType type = 0; + + if (type == 0) { + static const GTypeInfo info = { + sizeof (proxyDialogClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) proxy_dialog_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (proxyDialog), + 0, /* n_preallocs */ + (GInstanceInitFunc) proxy_dialog_init, + NULL /* instance_init */ + }; + + type = g_type_register_static (G_TYPE_OBJECT, + "proxyDialogType", + &info, 0); + } + + return type; +} + +proxyDialog * +proxy_dialog_new (void) +{ + proxyDialog *prd; + + prd = g_object_new (TYPE_PROXY_DIALOG, NULL); + + return prd; +} + +static int +proxy_get_permissions_from_dialog (EAccount *account) +{ + int permissions; + proxyDialogPrivate *priv; + proxyDialog *prd = NULL; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + permissions = 0; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->mail_read))) + permissions |= E_GW_PROXY_MAIL_READ; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->mail_write))) + permissions |= E_GW_PROXY_MAIL_WRITE; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->app_read))) + permissions |= E_GW_PROXY_APPOINTMENT_READ; + + if (gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (priv->app_write))) + permissions |= E_GW_PROXY_APPOINTMENT_WRITE; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->task_read))) + permissions |= E_GW_PROXY_TASK_READ; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->task_write))) + permissions |= E_GW_PROXY_TASK_WRITE; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->note_read))) + permissions |= E_GW_PROXY_NOTES_READ; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->note_write))) + permissions |= E_GW_PROXY_NOTES_WRITE; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->alarms))) + permissions |= E_GW_PROXY_GET_ALARMS; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->notifications))) + permissions |= E_GW_PROXY_GET_NOTIFICATIONS; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->options))) + permissions |= E_GW_PROXY_MODIFY_FOLDERS; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->private))) + permissions |= E_GW_PROXY_READ_PRIVATE; + + return permissions; +} + +static int +proxy_dialog_store_widgets_data (EAccount *account, gint32 dialog) +{ + GtkTreeIter iter; + GtkTreeSelection* account_select; + GtkTreeModel *model; + proxyHandler *new_proxy = NULL; + proxyDialogPrivate *priv; + char *account_mailid; + proxyDialog *prd = NULL; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + + switch (dialog) + { + case PROXY_ADD_DIALOG: + { + ENameSelectorEntry *name_selector_entry; + EDestinationStore *destination_store; + GList *destinations, *tmp; + char *name, *email; + GList *existing_list; + name_selector_entry = e_name_selector_peek_section_entry (priv->proxy_name_selector, "Add User"); + destination_store = e_name_selector_entry_peek_destination_store (E_NAME_SELECTOR_ENTRY ( + name_selector_entry)); + destinations = e_destination_store_list_destinations (destination_store); + tmp = destinations; + + if (!tmp) { + e_error_run (NULL, "org.gnome.evolution.proxy:no-user",NULL ,NULL); + return -1; + } + + for (; tmp != NULL; tmp = g_list_next (tmp)) { + email = NULL; + email = (char *)e_destination_get_email (tmp->data); + + if (g_strrstr (email, "@") == NULL ) { + e_error_run (NULL, "org.gnome.evolution.proxy:invalid-user",email ,NULL); + return -1; + } + + /*check whether already exists*/ + existing_list = g_object_get_data ( (GObject*)account, "proxy_list"); + + for (;existing_list; existing_list = g_list_next(existing_list)) { + new_proxy = (proxyHandler *) existing_list->data; + if ( !g_ascii_strcasecmp (new_proxy->proxy_email, email) ) { + + e_error_run (NULL, "org.gnome.evolution.proxy:user-is-proxy",email ,NULL); + return -1; + } + } + } + tmp = destinations; + + for (; tmp != NULL; tmp = g_list_next (tmp)) { + name = NULL; email = NULL; + email = (char *) e_destination_get_email (tmp->data); + name = (char *) e_destination_get_name (tmp->data); + new_proxy = (proxyHandler *) g_malloc (sizeof (proxyHandler)); + + if (name) + new_proxy->proxy_name = g_strdup (name); + else + new_proxy->proxy_name = g_strdup (email); + + new_proxy->proxy_email = g_strdup (email); + new_proxy->uniqueid = NULL; + new_proxy->flags = E_GW_PROXY_NEW; + new_proxy->permissions = proxy_get_permissions_from_dialog (account); + g_object_set_data((GObject *) account,"proxy_list",g_list_append (g_object_get_data ((GObject*) account,"proxy_list"), new_proxy)); + } + } + break; + case PROXY_EDIT_DIALOG: + account_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree)); + gtk_tree_selection_get_selected (account_select, &model, &iter); + gtk_tree_model_get (model, &iter, ACCOUNT_NAME, &account_mailid, -1); + account_mailid = g_strrstr (account_mailid, "\n") + 1; + new_proxy = proxy_get_item_from_list (account, account_mailid); + + if (!new_proxy->flags & E_GW_PROXY_NEW) + new_proxy->flags = E_GW_PROXY_EDITED; + + new_proxy->permissions = proxy_get_permissions_from_dialog (account); + break; + default: + return -1; + } + + return 0; +} + + +static gboolean +proxy_dialog_initialize_widgets (EAccount *account) +{ + proxyDialogPrivate *priv; + proxyDialog *prd = NULL; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + priv->account_name = GW ("proxy_account_name"); + priv->mail_read = GW ("mailRead"); + priv->mail_write = GW ("mailWrite"); + priv->app_read = GW ("appRead"); + priv->app_write = GW ("appWrite"); + priv->note_read = GW ("noteRead"); + priv->note_write = GW ("noteWrite"); + priv->task_read = GW ("taskRead"); + priv->task_write = GW ("taskWrite"); + priv->alarms = GW ("alarms"); + priv->notifications = GW ("notifications"); + priv->options = GW ("modify_rules"); + priv->private = GW ("read_private"); + + return (priv->account_name + && priv->mail_read + && priv->mail_write + && priv->app_read + && priv->app_write + && priv->note_read + && priv->note_write + && priv->task_read + && priv->task_write + && priv->alarms + && priv->notifications + && priv->options + && priv->private); +} + +static EGwConnection * +proxy_get_cnc (EAccount *account) +{ + EGwConnection *cnc; + char *uri, *failed_auth, *key, *prompt, *password = NULL; + CamelURL *url; + const char *poa_address, *use_ssl, *soap_port; + gboolean remember; + + url = camel_url_new (account->source->url, NULL); + if (url == NULL) + return NULL; + poa_address = url->host; + if (!poa_address || strlen (poa_address) ==0) + return NULL; + + soap_port = camel_url_get_param (url, "soap_port"); + if (!soap_port || strlen (soap_port) == 0) + soap_port = "7191"; + use_ssl = camel_url_get_param (url, "use_ssl"); + + key = g_strdup_printf ("groupwise://%s@%s/", url->user, poa_address); + + if (!g_str_equal (use_ssl, "never")) + uri = g_strdup_printf ("https://%s:%s/soap", poa_address, soap_port); + else + uri = g_strdup_printf ("http://%s:%s/soap", poa_address, soap_port); + + failed_auth = ""; + cnc = NULL; + + prompt = g_strdup_printf (_("%sEnter password for %s (user %s)"), + failed_auth, poa_address, url->user); + + password = e_passwords_get_password ("Groupwise", key); + if (!password) + password = e_passwords_ask_password (prompt, "Groupwise", key, prompt, + E_PASSWORDS_REMEMBER_FOREVER|E_PASSWORDS_SECRET, &remember, NULL); + g_free (prompt); + + cnc = e_gw_connection_new (uri, url->user, password); + if (!E_IS_GW_CONNECTION(cnc) && use_ssl && g_str_equal (use_ssl, "when-possible")) { + char *http_uri = g_strconcat ("http://", uri + 8, NULL); + cnc = e_gw_connection_new (http_uri, url->user, password); + g_free (http_uri); + } + + camel_url_free (url); + return cnc; +} + +void +proxy_abort (GtkWidget *button, EConfigHookItemFactoryData *data) +{ + EMConfigTargetAccount *target_account; + EAccount *account; + proxyDialog *prd = NULL; + GList *proxy_list; + + target_account = (EMConfigTargetAccount *)data->config->target; + account = target_account->account; + prd = g_object_get_data ((GObject *)account, "prd"); + proxy_list = (GList *) g_object_get_data ((GObject *) account, "proxy_dialog"); + + if (prd == NULL || proxy_list == NULL) + return; + + g_list_foreach (proxy_list, (GFunc) free_proxy_handler, NULL); + g_list_free (proxy_list); + + g_object_unref (prd); +} +void +proxy_commit (GtkWidget *button, EConfigHookItemFactoryData *data) +{ + EAccount *account; + EMConfigTargetAccount *target_account; + proxyDialogPrivate *priv; + GList *l, *proxy_list; + proxyHandler *aclInstance; + proxyDialog *prd = NULL; + + target_account = (EMConfigTargetAccount *)data->config->target; + account = target_account->account; + prd = g_object_get_data ((GObject *)account, "prd"); + l = g_object_get_data ( (GObject *)account, "proxy_list") ; + + if (prd == NULL || l == NULL) + return; + + priv = prd->priv; + for (;l; l = g_list_next (l)) { + aclInstance = (proxyHandler *) l->data; + + /* Handle case where the structure is new and deleted*/ + if ( !((aclInstance->flags & E_GW_PROXY_NEW) && (aclInstance->flags & E_GW_PROXY_DELETED))) { + + if ( !E_IS_GW_CONNECTION(prd->cnc)) /* Add check in case the connection request fails*/ + prd->cnc = proxy_get_cnc (account); + + if (aclInstance->flags & E_GW_PROXY_NEW ) + e_gw_connection_add_proxy (prd->cnc, aclInstance); + + if (aclInstance->flags & E_GW_PROXY_DELETED) + e_gw_connection_remove_proxy (prd->cnc, aclInstance); + + if (aclInstance->flags & E_GW_PROXY_EDITED) + e_gw_connection_modify_proxy (prd->cnc, aclInstance); + } + } + + proxy_list = (GList *) g_object_get_data ((GObject *) account, "proxy_dialog"); + g_list_foreach (proxy_list, (GFunc) free_proxy_handler, NULL); + g_list_free (proxy_list); + + g_object_unref (prd); +} + +static void +proxy_setup_meta_tree_view (EAccount *account) +{ + proxyDialog *prd = NULL; + proxyDialogPrivate *priv; + GtkTreeSelection *selection; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF, + "xpad", 4, + "ypad", 4, + NULL); + column = gtk_tree_view_column_new_with_attributes ("Picture", renderer, "pixbuf", ACCOUNT_PICTURE, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (priv->tree), column); + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Name", renderer, "text", ACCOUNT_NAME, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (priv->tree), column); + + gtk_tree_view_set_model (priv->tree, GTK_TREE_MODEL (priv->store)); + selection = gtk_tree_view_get_selection (priv->tree); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); +} + +static void +proxy_update_tree_view (EAccount *account) +{ + proxyDialog *prd = NULL; + GtkTreeIter iter; + GdkPixbuf *broken_image = NULL; + GList *l; + proxyHandler *aclInstance; + gchar *file_name = e_icon_factory_get_icon_filename ("stock_person", E_ICON_SIZE_DIALOG); + proxyDialogPrivate *priv; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + broken_image = gdk_pixbuf_new_from_file (file_name, NULL); + + gtk_tree_store_clear (priv->store); + l = g_object_get_data ( (GObject *)account, "proxy_list") ; + + for (;l; l = g_list_next(l)) { + aclInstance = (proxyHandler *) l->data; + + if(! (aclInstance->flags & E_GW_PROXY_DELETED )) { + gtk_tree_store_append (priv->store, &iter, NULL); + gtk_tree_store_set (priv->store, &iter, 0, broken_image, 1, g_strconcat(aclInstance->proxy_name,"\n",aclInstance->proxy_email, NULL), -1); + } + } + + /*Fixme : Desensitize buttons if the list is Null*/ + gtk_tree_view_set_model (GTK_TREE_VIEW(priv->tree), GTK_TREE_MODEL (priv->store)); +} + +GtkWidget* +org_gnome_proxy (EPlugin *epl, EConfigHookItemFactoryData *data) +{ + EMConfigTargetAccount *target_account; + EAccount *account; + GtkWidget *tab_dialog = NULL; + GList *proxy_list = NULL; + GtkButton *addProxy, *removeProxy, *editProxy; + proxyDialog *prd; + proxyDialogPrivate *priv; + + target_account = (EMConfigTargetAccount *)data->config->target; + account = target_account->account; + + if (account->enabled) { + prd = proxy_dialog_new (); + g_object_set_data ((GObject *) account, "prd", prd); + priv = prd->priv; + + if(!g_strrstr (e_account_get_string(account, E_ACCOUNT_SOURCE_URL), "groupwise://")) + return NULL; + + priv->xml_tab = glade_xml_new (EVOLUTION_GLADEDIR "/proxy-listing.glade", "proxy_vbox", NULL); + tab_dialog = GTK_WIDGET (glade_xml_get_widget (priv->xml_tab, "proxy_vbox")); + priv->tree = GTK_TREE_VIEW (glade_xml_get_widget (priv->xml_tab, "proxy_access_list")); + priv->store = gtk_tree_store_new (2, + GDK_TYPE_PIXBUF, + G_TYPE_STRING + ); + proxy_setup_meta_tree_view (account); + + addProxy = (GtkButton *) glade_xml_get_widget (priv->xml_tab, "add_proxy"); + removeProxy = (GtkButton *) glade_xml_get_widget (priv->xml_tab, "remove_proxy"); + editProxy = (GtkButton *) glade_xml_get_widget (priv->xml_tab, "edit_proxy"); + + g_signal_connect (addProxy, "clicked", G_CALLBACK(proxy_add_account), account); + g_signal_connect (removeProxy, "clicked", G_CALLBACK(proxy_remove_account), account); + g_signal_connect (editProxy, "clicked", G_CALLBACK(proxy_edit_account), account); + + prd->cnc = proxy_get_cnc(account); + + if (e_gw_connection_get_proxy_access_list(prd->cnc, &proxy_list)!= E_GW_CONNECTION_STATUS_OK) + return NULL; + + g_object_set_data ((GObject *) account, "proxy_list", proxy_list); + proxy_update_tree_view (account); + gtk_notebook_append_page ((GtkNotebook *)(data->parent), (GtkWidget *)tab_dialog, gtk_label_new("Proxy")); + gtk_widget_show_all (tab_dialog); + } else { + GtkWidget *err_tab; + GtkWidget *label; + + err_tab = gtk_vbox_new (TRUE, 10); + label = gtk_label_new (_("The Proxy tab will be available only when the account is enabled.")); + gtk_box_pack_start ((GtkBox *)err_tab, label, TRUE, TRUE, 10); + + gtk_notebook_append_page ((GtkNotebook *)(data->parent), (GtkWidget *)err_tab, gtk_label_new("Proxy")); + gtk_widget_show_all (err_tab); + + } + return NULL; +} + +static void +proxy_cancel(GtkWidget *button, EAccount *account) +{ + proxyDialog *prd = NULL; + proxyDialogPrivate *priv; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + gtk_widget_destroy (priv->main); + g_object_unref (priv->xml); +} + + +static void +proxy_add_ok (GtkWidget *button, EAccount *account) +{ + proxyDialog *prd = NULL; + proxyDialogPrivate *priv; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + + if ( proxy_dialog_store_widgets_data (account, PROXY_ADD_DIALOG) < 0) + return; + + proxy_update_tree_view (account); + gtk_widget_destroy (priv->main); + g_object_unref (priv->xml); +} + +static void +proxy_edit_ok (GtkWidget *button, EAccount *account) +{ + proxyDialog *prd = NULL; + proxyDialogPrivate *priv; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + + if ( proxy_dialog_store_widgets_data (account, PROXY_EDIT_DIALOG) < 0) + return; + + proxy_update_tree_view (account); + gtk_widget_destroy (priv->main); + g_object_unref (priv->xml); +} + +static proxyHandler * +proxy_get_item_from_list (EAccount *account, char *account_name) +{ + GList *l = g_object_get_data ((GObject *)account, "proxy_list"); + proxyHandler *iter; + + for (;l; l = g_list_next(l)) { + iter = (proxyHandler *) l->data; + + if ( g_str_equal (iter->proxy_email,account_name)) + return iter; + } + + return NULL; +} + +static void +proxy_remove_account (GtkWidget *button, EAccount *account) +{ + GtkTreeIter iter; + GtkTreeModel *model; + proxyDialogPrivate *priv; + proxyHandler *deleted; + GtkTreeSelection* account_select; + char *account_mailid; + proxyDialog *prd = NULL; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + account_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree)); + + if (gtk_tree_selection_get_selected (account_select, &model, &iter)) { + gtk_tree_model_get (model, &iter, ACCOUNT_NAME, &account_mailid, -1); + account_mailid = g_strrstr (account_mailid, "\n") + 1; + deleted = proxy_get_item_from_list (account, account_mailid); + + if (deleted != NULL) + deleted->flags |= E_GW_PROXY_DELETED; + + proxy_update_tree_view (account); + } +} + +static void +addressbook_dialog_response (ENameSelectorDialog *name_selector_dialog, gint response, gpointer user_data) +{ + gtk_widget_hide (GTK_WIDGET (name_selector_dialog)); +} + +static void +addressbook_entry_changed (GtkWidget *entry, gpointer user_data) +{ +} + +static void +address_button_clicked (GtkButton *button, EAccount *account) +{ + proxyDialog *prd; + proxyDialogPrivate *priv; + ENameSelectorDialog *name_selector_dialog; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + name_selector_dialog = e_name_selector_peek_dialog (priv->proxy_name_selector); + gtk_widget_show (GTK_WIDGET (name_selector_dialog)); +} + +static void +proxy_add_account (GtkWidget *button, EAccount *account) +{ + GtkButton *contacts, *cancel; + proxyDialogPrivate *priv; + GtkButton *okButton; + ENameSelectorDialog *name_selector_dialog; + ENameSelectorModel *name_selector_model; + ENameSelectorEntry *name_selector_entry; + GtkWidget *proxy_name, *name_box; + proxyDialog *prd = NULL; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/proxy-add-dialog.glade", NULL, NULL); + proxy_dialog_initialize_widgets (account); + priv->main = glade_xml_get_widget (priv->xml, "ProxyAccessRights"); + okButton = (GtkButton *) glade_xml_get_widget (priv->xml,"proxy_button_ok"); + contacts = (GtkButton *) glade_xml_get_widget (priv->xml,"contacts"); + cancel = (GtkButton *) glade_xml_get_widget (priv->xml,"proxy_cancel"); + + priv->proxy_name_selector = e_name_selector_new (); + name_selector_dialog = e_name_selector_peek_dialog (priv->proxy_name_selector); + + g_signal_connect ((GtkWidget *)okButton, "clicked", G_CALLBACK (proxy_add_ok), account); + g_signal_connect ((GtkWidget *)cancel, "clicked", G_CALLBACK (proxy_cancel), account); + g_signal_connect ((GtkWidget *)contacts, "clicked", G_CALLBACK (address_button_clicked), account); + g_signal_connect (name_selector_dialog, "response", G_CALLBACK (addressbook_dialog_response), account); + gtk_widget_show (GTK_WIDGET (priv->main)); + + name_selector_model = e_name_selector_peek_model (priv->proxy_name_selector); + e_name_selector_model_add_section (name_selector_model, "Add User", "Add User", NULL); + + name_selector_entry = e_name_selector_peek_section_entry (priv->proxy_name_selector, "Add User"); + g_signal_connect (name_selector_entry, "changed", + G_CALLBACK (addressbook_entry_changed), prd); + + proxy_name = glade_xml_get_widget (priv->xml, "proxy_account_name"); + name_box = glade_xml_get_widget (priv->xml, "proxy_name_box"); + gtk_widget_hide (proxy_name); + gtk_container_add ((GtkContainer *)name_box, (GtkWidget *)name_selector_entry); + gtk_widget_show ((GtkWidget *) name_selector_entry); + gtk_widget_grab_focus ((GtkWidget *) name_selector_entry); +} + +static void +proxy_load_edit_dialog (EAccount *account, proxyHandler *edited) +{ + proxyDialogPrivate *priv; + proxyDialog *prd = NULL; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + gtk_entry_set_text ((GtkEntry *) priv->account_name, edited->proxy_email); + gtk_widget_set_sensitive (priv->account_name, FALSE); + + if (edited->permissions & E_GW_PROXY_MAIL_READ) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->mail_read), TRUE); + + if (edited->permissions & E_GW_PROXY_MAIL_WRITE) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->mail_write), TRUE); + + if (edited->permissions & E_GW_PROXY_APPOINTMENT_READ) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->app_read), TRUE); + + if (edited->permissions & E_GW_PROXY_APPOINTMENT_WRITE) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->app_write), TRUE); + + if (edited->permissions & E_GW_PROXY_NOTES_READ) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->note_read), TRUE); + + if (edited->permissions & E_GW_PROXY_NOTES_WRITE) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->note_write), TRUE); + + if (edited->permissions & E_GW_PROXY_TASK_READ) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->task_read), TRUE); + + if (edited->permissions & E_GW_PROXY_TASK_WRITE) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->task_write), TRUE); + + if (edited->permissions & E_GW_PROXY_GET_ALARMS) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->alarms), TRUE); + + if (edited->permissions & E_GW_PROXY_GET_NOTIFICATIONS) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->notifications), TRUE); + + if (edited->permissions & E_GW_PROXY_MODIFY_FOLDERS) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->options), TRUE); + + if (edited->permissions & E_GW_PROXY_READ_PRIVATE) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (priv->private), TRUE); +} + +static void +proxy_edit_account (GtkWidget *button, EAccount *account) +{ + GtkTreeIter iter; + GtkTreeModel *model; + proxyDialogPrivate *priv; + GtkTreeSelection* account_select; + proxyHandler *edited; + GtkButton *okButton, *proxyCancel; + char *account_mailid; + GtkWidget *contacts; + proxyDialog *prd = NULL; + + prd = g_object_get_data ((GObject *)account, "prd"); + priv = prd->priv; + + /*FIXME: If multiple properties dialogs are launched then the widgets lose data*/ + + account_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree)); + + if (gtk_tree_selection_get_selected (account_select, &model, &iter)) { + gtk_tree_model_get (model, &iter, ACCOUNT_NAME, &account_mailid, -1); + account_mailid = g_strrstr (account_mailid, "\n") + 1; + edited = proxy_get_item_from_list (account, account_mailid); + if (edited) { + priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/proxy-add-dialog.glade", NULL, NULL); + priv->main = glade_xml_get_widget (priv->xml, "ProxyAccessRights"); + proxy_dialog_initialize_widgets (account); + okButton = (GtkButton *) glade_xml_get_widget (priv->xml,"proxy_button_ok"); + proxyCancel = (GtkButton *) glade_xml_get_widget (priv->xml,"proxy_cancel"); + contacts = glade_xml_get_widget (priv->xml, "contacts"); + + g_signal_connect ((GtkWidget *)okButton, "clicked", G_CALLBACK (proxy_edit_ok), account); + g_signal_connect ((GtkWidget *)proxyCancel, "clicked", G_CALLBACK (proxy_cancel), account); + proxy_load_edit_dialog (account, edited); + gtk_widget_hide (contacts); + gtk_widget_show (GTK_WIDGET (priv->main)); + } + } +} diff --git a/plugins/groupwise-features/proxy.h b/plugins/groupwise-features/proxy.h new file mode 100644 index 0000000000..38e2f744b8 --- /dev/null +++ b/plugins/groupwise-features/proxy.h @@ -0,0 +1,66 @@ + /* Evolution calendar - Timezone selector dialog + * + * Copyright (C) 2005 Novell, Inc. + * + * Authors: + * Shreyas Srinivasan <sshreyas@novell.com> + * Sankar P <psankar@novell.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <gtk/gtkwidget.h> +#include <e-util/e-account.h> +#include <gtk/gtk.h> + +#define TYPE_PROXY_DIALOG (proxy_dialog_get_type ()) +#define PROXY_DIALOG(obj) (GTK_CHECK_CAST ((obj), TYPE_PROXY_DIALOG, proxyDialog)) +#define PROXY_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_PROXY_DIALOG, proxyDialogClass)) +#define IS_PROXY_DIALOG(obj) (GTK_CHECK_TYPE ((obj), TYPE_PROXY_DIALOG)) +#define IS_PROXY_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), TYPE_PROXY_DIALOG)) + +typedef struct _proxyDialog proxyDialog; +typedef struct _proxyDialogClass proxyDialogClass; +typedef struct _proxyDialogPrivate proxyDialogPrivate; + +struct _proxyDialog{ + GObject object; + + /*Connection */ + EGwConnection *cnc; + + /* Private Dialog Information*/ + proxyDialogPrivate *priv; +}; + +struct _proxyDialogClass { + GObjectClass parent_class; +}; + + +GType proxy_dialog_get_type (void); +proxyDialog *proxy_dialog_new (void); +void proxy_commit(GtkWidget *button, EConfigHookItemFactoryData *data); +GtkWidget * org_gnome_proxy (EPlugin *epl, EConfigHookItemFactoryData *data); +static void proxy_add_account (GtkWidget *button, EAccount *account); +static void proxy_remove_account (GtkWidget *button, EAccount *account); +static void proxy_update_tree_view (EAccount *account); +static void proxy_cancel(GtkWidget *button, EAccount *account); +static void proxy_edit_account (GtkWidget *button, EAccount *account); +void proxy_abort (GtkWidget *button, EConfigHookItemFactoryData *data); +void proxy_commit (GtkWidget *button, EConfigHookItemFactoryData *data); +static void proxy_setup_meta_tree_view (EAccount *account); +static proxyHandler *proxy_get_item_from_list (EAccount *account, char *account_name); +static void proxy_load_edit_dialog (EAccount *account, proxyHandler *edited); |