diff options
Diffstat (limited to 'plugins/exchange-operations')
29 files changed, 1574 insertions, 3805 deletions
diff --git a/plugins/exchange-operations/Makefile.am b/plugins/exchange-operations/Makefile.am index 933da521a1..1e7cdd1deb 100644 --- a/plugins/exchange-operations/Makefile.am +++ b/plugins/exchange-operations/Makefile.am @@ -5,19 +5,12 @@ AM_CPPFLAGS = -I . \ -I$(top_builddir)/composer \ -I$(top_builddir)/mail \ $(CAMEL_EXCHANGE_CFLAGS) \ - $(EVOLUTION_MAIL_CFLAGS) \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ - -DCONNECTOR_GLADEDIR=\""$(gladedir)"\" + $(EVOLUTION_MAIL_CFLAGS) @EVO_PLUGIN_RULE@ -plugin_DATA = org-gnome-exchange-operations.eplug \ - org-gnome-folder-permissions.xml \ - org-gnome-folder-subscription.xml \ - org-gnome-exchange-tasks-subscription.xml \ - org-gnome-exchange-cal-subscription.xml \ - org-gnome-exchange-ab-subscription.xml +plugin_DATA = org-gnome-exchange-operations.eplug plugin_LTLIBRARIES = liborg-gnome-exchange-operations.la @@ -52,36 +45,20 @@ liborg_gnome_exchange_operations_la_SOURCES = \ liborg_gnome_exchange_operations_la_LIBADD = \ $(top_builddir)/e-util/libeutil.la \ $(top_builddir)/widgets/misc/libemiscwidgets.la \ + $(top_builddir)/shell/libeshell.la \ $(top_builddir)/calendar/gui/libevolution-calendar.la \ $(top_builddir)/mail/libevolution-mail.la \ - $(top_builddir)/addressbook/gui/component/libevolution-addressbook.la \ $(CAMEL_EXCHANGE_LIBS) \ $(EVOLUTION_MAIL_LIBS) liborg_gnome_exchange_operations_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED) -glade_DATA = \ - exchange-change-password.glade \ - exchange-delegates.glade \ - exchange-folder-tree.glade \ - exchange-permissions-dialog.glade \ - e-foreign-folder-dialog.glade \ - exchange-passwd-expiry.glade \ - exchange-oof.glade \ - exchange-send-options.glade - error_DATA = org-gnome-exchange-operations.error errordir = $(privdatadir)/errors EXTRA_DIST = \ org-gnome-exchange-operations.eplug.xml \ - org-gnome-exchange-operations.error.xml \ - org-gnome-folder-permissions.xml \ - org-gnome-folder-subscription.xml \ - org-gnome-exchange-tasks-subscription.xml \ - org-gnome-exchange-cal-subscription.xml \ - org-gnome-exchange-ab-subscription.xml \ - $(glade_DATA) + org-gnome-exchange-operations.error.xml BUILT_SOURCES = $(error_DATA) org-gnome-exchange-operations.eplug diff --git a/plugins/exchange-operations/e-foreign-folder-dialog.glade b/plugins/exchange-operations/e-foreign-folder-dialog.glade deleted file mode 100644 index 7390e561ce..0000000000 --- a/plugins/exchange-operations/e-foreign-folder-dialog.glade +++ /dev/null @@ -1,220 +0,0 @@ -<?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="dialog"> - <property name="visible">True</property> - <property name="title" translatable="yes">Open Other User's Folder</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="urgency_hint">False</property> - <property name="has_separator">True</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="dialog-vbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">8</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="dialog-action_area1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="button3"> - <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="button1"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="has_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="GtkTable" id="table1"> - <property name="visible">True</property> - <property name="n_rows">3</property> - <property name="n_columns">2</property> - <property name="homogeneous">False</property> - <property name="row_spacing">3</property> - <property name="column_spacing">3</property> - - <child> - <widget class="GtkLabel" id="label1"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Account:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</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="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="label3"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Folder Name:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</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="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="GtkHBox" id="user-picker-placeholder"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <placeholder/> - </child> - </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="GtkButton" id="button-user"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_User:</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</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="GtkComboBoxEntry" id="folder-name-combo"> - <property name="visible">True</property> - <property name="items" translatable="yes">a -b</property> - <property name="add_tearoffs">False</property> - <property name="has_frame">True</property> - <property name="focus_on_click">True</property> - </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">fill</property> - </packing> - </child> - - <child> - <widget class="GtkComboBox" id="server-combobox"> - <property name="visible">True</property> - <property name="items" translatable="yes">a -b</property> - <property name="add_tearoffs">False</property> - <property name="focus_on_click">True</property> - </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">fill</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">2</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -</glade-interface> diff --git a/plugins/exchange-operations/exchange-account-setup.c b/plugins/exchange-operations/exchange-account-setup.c index 5943d5f3df..f1b64d3afc 100644 --- a/plugins/exchange-operations/exchange-account-setup.c +++ b/plugins/exchange-operations/exchange-account-setup.c @@ -32,7 +32,6 @@ #include <sys/stat.h> #include <gtk/gtk.h> #include <glib/gi18n.h> -#include <glade/glade.h> #include <gconf/gconf-client.h> #include <camel/camel-provider.h> #include <camel/camel-url.h> diff --git a/plugins/exchange-operations/exchange-change-password.c b/plugins/exchange-operations/exchange-change-password.c index 82382f6f9f..68e93ab9e5 100644 --- a/plugins/exchange-operations/exchange-change-password.c +++ b/plugins/exchange-operations/exchange-change-password.c @@ -29,38 +29,32 @@ #include <exchange-account.h> #include <e2k-utils.h> -#include <glade/glade-xml.h> #include <gtk/gtk.h> -#define FILENAME EVOLUTION_GLADEDIR "/exchange-change-password.glade" -#define ROOTNODE "pass_dialog" -#define STARTNODE "pass_vbox" - static void entry_changed (GtkEntry *entry, gpointer user_data) { - GladeXML *xml = user_data; GtkEntry *new_entry, *confirm_entry; - GtkWidget *ok_button; + GtkDialog *pass_dialog; const gchar *text; - new_entry = GTK_ENTRY (glade_xml_get_widget (xml, "new_pass_entry")); - confirm_entry = GTK_ENTRY (glade_xml_get_widget (xml, "confirm_pass_entry")); - ok_button = glade_xml_get_widget (xml, "okbutton1"); + new_entry = GTK_ENTRY (entry); + confirm_entry = GTK_ENTRY (user_data); + pass_dialog = GTK_DIALOG (g_object_get_data (G_OBJECT (new_entry), "pass_dialog")); text = gtk_entry_get_text (new_entry); if (!text || !*text) { - gtk_widget_set_sensitive (ok_button, FALSE); + gtk_dialog_set_response_sensitive (pass_dialog, GTK_RESPONSE_OK, FALSE); return; } text = gtk_entry_get_text (confirm_entry); if (!text || !*text) { - gtk_widget_set_sensitive (ok_button, FALSE); + gtk_dialog_set_response_sensitive (pass_dialog, GTK_RESPONSE_OK, FALSE); return; } - gtk_widget_set_sensitive (ok_button, TRUE); + gtk_dialog_set_response_sensitive (pass_dialog, GTK_RESPONSE_OK, TRUE); } /** @@ -74,52 +68,119 @@ entry_changed (GtkEntry *entry, gpointer user_data) gchar * exchange_get_new_password (const gchar *existing_password, gboolean voluntary) { - GladeXML *xml; - GtkWidget *top_widget; - GtkEntry *cur_entry, *new_entry, *confirm_entry; GtkResponseType response; - GtkLabel *top_label; gchar *new_pass; + GtkWidget *pass_dialog; + GtkWidget *dialog_vbox1; + GtkWidget *pass_label; + GtkWidget *table1; + GtkWidget *current_pass_label; + GtkWidget *new_pass_label; + GtkWidget *confirm_pass_label; + GtkWidget *current_pass_entry; + GtkWidget *new_pass_entry; + GtkWidget *confirm_pass_entry; + + pass_dialog = gtk_dialog_new_with_buttons ( + _("Change Password"), + NULL, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, + NULL); + + dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (pass_dialog)); + gtk_widget_show (dialog_vbox1); + + pass_label = gtk_label_new (_("Your current password has expired. Please change your password now.")); + gtk_widget_show (pass_label); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), pass_label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (pass_label), GTK_JUSTIFY_CENTER); + gtk_label_set_line_wrap (GTK_LABEL (pass_label), TRUE); + gtk_misc_set_alignment (GTK_MISC (pass_label), 0.52, 0.5); + gtk_misc_set_padding (GTK_MISC (pass_label), 0, 6); + + table1 = gtk_table_new (3, 2, FALSE); + gtk_widget_show (table1); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), table1, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (table1), 6); + gtk_table_set_row_spacings (GTK_TABLE (table1), 6); + gtk_table_set_col_spacings (GTK_TABLE (table1), 6); + + current_pass_label = gtk_label_new_with_mnemonic (_("Current _Password:")); + gtk_widget_show (current_pass_label); + gtk_table_attach (GTK_TABLE (table1), current_pass_label, 0, 1, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (current_pass_label), 0, 0.5); + + new_pass_label = gtk_label_new_with_mnemonic (_("_New Password:")); + gtk_widget_show (new_pass_label); + gtk_table_attach (GTK_TABLE (table1), new_pass_label, 0, 1, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (new_pass_label), 0, 0.5); + + confirm_pass_label = gtk_label_new_with_mnemonic (_("_Confirm Password:")); + gtk_widget_show (confirm_pass_label); + gtk_table_attach (GTK_TABLE (table1), confirm_pass_label, 0, 1, 2, 3, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (confirm_pass_label), 0, 0.5); + + new_pass_entry = gtk_entry_new (); + gtk_widget_show (new_pass_entry); + gtk_table_attach (GTK_TABLE (table1), new_pass_entry, 1, 2, 1, 2, + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_entry_set_visibility (GTK_ENTRY (new_pass_entry), FALSE); + + confirm_pass_entry = gtk_entry_new (); + gtk_widget_show (confirm_pass_entry); + gtk_table_attach (GTK_TABLE (table1), confirm_pass_entry, 1, 2, 2, 3, + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_entry_set_visibility (GTK_ENTRY (confirm_pass_entry), FALSE); + + current_pass_entry = gtk_entry_new (); + gtk_widget_show (current_pass_entry); + gtk_table_attach (GTK_TABLE (table1), current_pass_entry, 1, 2, 0, 1, + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), + (GtkAttachOptions) (0), 0, 12); + gtk_entry_set_visibility (GTK_ENTRY (current_pass_entry), FALSE); + + g_object_set_data (G_OBJECT (new_pass_entry), "pass_dialog", pass_dialog); + g_object_set_data (G_OBJECT (confirm_pass_entry), "pass_dialog", pass_dialog); + g_signal_connect (new_pass_entry, "changed", G_CALLBACK (entry_changed), confirm_pass_entry); + g_signal_connect (confirm_pass_entry, "changed", G_CALLBACK (entry_changed), new_pass_entry); + entry_changed (GTK_ENTRY (new_pass_entry), confirm_pass_entry); - xml = glade_xml_new (FILENAME, ROOTNODE, NULL); - top_widget = glade_xml_get_widget (xml, ROOTNODE); - - cur_entry = GTK_ENTRY (glade_xml_get_widget (xml, "current_pass_entry")); - new_entry = GTK_ENTRY (glade_xml_get_widget (xml, "new_pass_entry")); - g_signal_connect (new_entry, "changed", - G_CALLBACK (entry_changed), xml); - confirm_entry = GTK_ENTRY (glade_xml_get_widget (xml, "confirm_pass_entry")); - g_signal_connect (confirm_entry, "changed", - G_CALLBACK (entry_changed), xml); - entry_changed (NULL, xml); - - top_label = GTK_LABEL (glade_xml_get_widget (xml, "pass_label")); if (voluntary) - gtk_widget_hide (GTK_WIDGET (top_label)); + gtk_widget_hide (GTK_WIDGET (pass_label)); run_dialog_again: - response = gtk_dialog_run (GTK_DIALOG (top_widget)); + response = gtk_dialog_run (GTK_DIALOG (pass_dialog)); if (response == GTK_RESPONSE_OK) { const gchar *cur_pass, *new_pass1, *new_pass2; - cur_pass = gtk_entry_get_text (cur_entry); - new_pass1 = gtk_entry_get_text (new_entry); - new_pass2 = gtk_entry_get_text (confirm_entry); + cur_pass = gtk_entry_get_text (GTK_ENTRY (current_pass_entry)); + new_pass1 = gtk_entry_get_text (GTK_ENTRY (new_pass_entry)); + new_pass2 = gtk_entry_get_text (GTK_ENTRY (confirm_pass_entry)); if (existing_password) { if (strcmp (cur_pass, existing_password) != 0) { /* User entered a wrong existing * password. Prompt him again. */ - gtk_label_set_text (top_label, _("The current password does not match the existing password for your account. Please enter the correct password")); - gtk_widget_show (GTK_WIDGET (top_label)); + gtk_label_set_text (GTK_LABEL (pass_label), _("The current password does not match the existing password for your account. Please enter the correct password")); + gtk_widget_show (pass_label); goto run_dialog_again; } } if (strcmp (new_pass1, new_pass2) != 0) { - gtk_label_set_text (top_label, _("The two passwords do not match. Please re-enter the passwords.")); - gtk_widget_show (GTK_WIDGET (top_label)); + gtk_label_set_text (GTK_LABEL (pass_label), _("The two passwords do not match. Please re-enter the passwords.")); + gtk_widget_show (pass_label); goto run_dialog_again; } @@ -127,8 +188,7 @@ run_dialog_again: } else new_pass = NULL; - gtk_widget_destroy (top_widget); - g_object_unref (xml); + gtk_widget_destroy (pass_dialog); return new_pass; } diff --git a/plugins/exchange-operations/exchange-change-password.glade b/plugins/exchange-operations/exchange-change-password.glade deleted file mode 100644 index ecff9028a4..0000000000 --- a/plugins/exchange-operations/exchange-change-password.glade +++ /dev/null @@ -1,243 +0,0 @@ -<?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="pass_dialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Change Password</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">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="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
-
- <child>
- <widget class="GtkButton" id="cancelbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="pass_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Your current password has expired. Please change your password now.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0.52</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">6</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="current_pass_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Current Password:</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>
- </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="new_pass_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">New Password:</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>
- </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="confirm_pass_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Confirm Password:</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>
- </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="GtkEntry" id="new_pass_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">False</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="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="confirm_pass_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">False</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="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="current_pass_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">False</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="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_padding">12</property>
- <property name="y_options"></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/exchange-operations/exchange-config-listener.c b/plugins/exchange-operations/exchange-config-listener.c index 2c16d2f9ab..dc6582ba71 100644 --- a/plugins/exchange-operations/exchange-config-listener.c +++ b/plugins/exchange-operations/exchange-config-listener.c @@ -23,6 +23,9 @@ #include <config.h> #endif +#include <gtk/gtk.h> +#include <gdk/gdkkeysyms.h> + #include "exchange-config-listener.h" #include "exchange-operations.h" #include "exchange-change-password.h" @@ -41,14 +44,10 @@ #include <libedataserver/e-source-list.h> #include <libedataserver/e-source-group.h> #include <libedataserverui/e-passwords.h> -#include <glade/glade-xml.h> #include <stdlib.h> #include <string.h> -#define FILENAME CONNECTOR_GLADEDIR "/exchange-passwd-expiry.glade" -#define ROOTNODE "passwd_exp_dialog" - struct _ExchangeConfigListenerPrivate { GConfClient *gconf; guint idle_id; @@ -649,23 +648,52 @@ change_passwd_cb (GtkWidget *button, ExchangeAccount *account) static void display_passwd_expiry_message (gint max_passwd_age, ExchangeAccount *account) { - GladeXML *xml; - GtkWidget *top_widget, *change_passwd_button; GtkResponseType response; - GtkLabel *warning_msg_label; + GtkWidget *passwd_exp_dialog; + GtkWidget *dialog_vbox1; + GtkWidget *dialog_action_area1; + GtkWidget *change_passwd_button; + GtkWidget *warning_msg_label; + GtkWidget *ok_button; + AtkObject *atko; gchar *passwd_expiry_msg = g_strdup_printf (_("Your password will expire in the next %d days"), max_passwd_age); - xml = glade_xml_new (FILENAME, ROOTNODE, NULL); - g_return_if_fail (xml != NULL); - top_widget = glade_xml_get_widget (xml, ROOTNODE); - g_return_if_fail (top_widget != NULL); - warning_msg_label = GTK_LABEL (glade_xml_get_widget (xml, - "passwd_exp_label")); - gtk_label_set_text (warning_msg_label, passwd_expiry_msg); - change_passwd_button = glade_xml_get_widget (xml, - "change_passwd_button"); + passwd_exp_dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (passwd_exp_dialog), _("Password Expiry Warning...")); + gtk_window_set_position (GTK_WINDOW (passwd_exp_dialog), GTK_WIN_POS_CENTER_ON_PARENT); + gtk_window_set_type_hint (GTK_WINDOW (passwd_exp_dialog), GDK_WINDOW_TYPE_HINT_DIALOG); + + dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (passwd_exp_dialog)); + gtk_widget_show (dialog_vbox1); + + warning_msg_label = gtk_label_new (passwd_expiry_msg); + gtk_widget_show (warning_msg_label); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), warning_msg_label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (warning_msg_label), GTK_JUSTIFY_CENTER); + gtk_misc_set_padding (GTK_MISC (warning_msg_label), 0, 20); + + dialog_action_area1 = gtk_dialog_get_action_area (GTK_DIALOG (passwd_exp_dialog)); + gtk_widget_show (dialog_action_area1); + gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END); + + change_passwd_button = gtk_button_new_with_mnemonic (_("_Change Password")); + gtk_widget_show (change_passwd_button); + gtk_dialog_add_action_widget (GTK_DIALOG (passwd_exp_dialog), change_passwd_button, 0); + GTK_WIDGET_SET_FLAGS (change_passwd_button, GTK_CAN_DEFAULT); + + ok_button = gtk_button_new_from_stock ("gtk-ok"); + gtk_widget_show (ok_button); + gtk_dialog_add_action_widget (GTK_DIALOG (passwd_exp_dialog), ok_button, GTK_RESPONSE_OK); + GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT); + + atko = gtk_widget_get_accessible (ok_button); + atk_object_set_name (atko, "ok_button"); + + gtk_widget_grab_focus (change_passwd_button); + gtk_widget_grab_default (change_passwd_button); + gtk_widget_set_sensitive (change_passwd_button, TRUE); #ifdef HAVE_KRB5 g_signal_connect (change_passwd_button, @@ -673,13 +701,113 @@ display_passwd_expiry_message (gint max_passwd_age, ExchangeAccount *account) G_CALLBACK (change_passwd_cb), account); #endif - response = gtk_dialog_run (GTK_DIALOG (top_widget)); + response = gtk_dialog_run (GTK_DIALOG (passwd_exp_dialog)); - gtk_widget_destroy (top_widget); - g_object_unref (xml); + gtk_widget_destroy (passwd_exp_dialog); g_free (passwd_expiry_msg); } +static gint +run_oof_dialog (void) +{ + GtkWidget *oof_dialog; + GtkWidget *dialog_vbox1; + GtkWidget *hbox9; + GtkWidget *image3; + GtkWidget *label7; + GtkWidget *dialog_action_area1; + GtkWidget *button3; + GtkWidget *alignment3; + GtkWidget *hbox6; + GtkWidget *image7; + GtkWidget *label10; + GtkWidget *button4; + GtkWidget *alignment4; + GtkWidget *hbox7; + GtkWidget *image8; + GtkWidget *label11; + gchar *tmp_str; + gint res; + + oof_dialog = gtk_dialog_new (); + gtk_container_set_border_width (GTK_CONTAINER (oof_dialog), 6); + gtk_window_set_title (GTK_WINDOW (oof_dialog), _("Out of Office Assistant")); + gtk_window_set_position (GTK_WINDOW (oof_dialog), GTK_WIN_POS_CENTER_ON_PARENT); + gtk_window_set_resizable (GTK_WINDOW (oof_dialog), FALSE); + gtk_window_set_type_hint (GTK_WINDOW (oof_dialog), GDK_WINDOW_TYPE_HINT_DIALOG); + + dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (oof_dialog)); + gtk_widget_show (dialog_vbox1); + + hbox9 = gtk_hbox_new (FALSE, 6); + gtk_widget_show (hbox9); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox9, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox9), 6); + + image3 = gtk_image_new_from_stock ("gtk-dialog-question", GTK_ICON_SIZE_DIALOG); + gtk_widget_show (image3); + gtk_box_pack_start (GTK_BOX (hbox9), image3, FALSE, TRUE, 0); + + tmp_str = g_strconcat ("<b>", _("Currently, your status is \"Out of the Office\"."), "</b>\n\n", _("Would you like to change your status to \"In the Office\"?"), NULL); + label7 = gtk_label_new (tmp_str); + g_free (tmp_str); + gtk_widget_show (label7); + gtk_box_pack_start (GTK_BOX (hbox9), label7, TRUE, TRUE, 0); + gtk_label_set_use_markup (GTK_LABEL (label7), TRUE); + gtk_misc_set_alignment (GTK_MISC (label7), 0, 0.5); + + dialog_action_area1 = gtk_dialog_get_action_area (GTK_DIALOG (oof_dialog)); + gtk_widget_show (dialog_action_area1); + gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END); + + button3 = gtk_button_new (); + gtk_widget_show (button3); + gtk_dialog_add_action_widget (GTK_DIALOG (oof_dialog), button3, GTK_RESPONSE_NO); + GTK_WIDGET_SET_FLAGS (button3, GTK_CAN_DEFAULT); + + alignment3 = gtk_alignment_new (0.5, 0.5, 0, 0); + gtk_widget_show (alignment3); + gtk_container_add (GTK_CONTAINER (button3), alignment3); + + hbox6 = gtk_hbox_new (FALSE, 2); + gtk_widget_show (hbox6); + gtk_container_add (GTK_CONTAINER (alignment3), hbox6); + + image7 = gtk_image_new_from_stock ("gtk-no", GTK_ICON_SIZE_BUTTON); + gtk_widget_show (image7); + gtk_box_pack_start (GTK_BOX (hbox6), image7, FALSE, FALSE, 0); + + label10 = gtk_label_new_with_mnemonic (_("_No, Don't Change Status")); + gtk_widget_show (label10); + gtk_box_pack_start (GTK_BOX (hbox6), label10, FALSE, FALSE, 0); + + button4 = gtk_button_new (); + gtk_widget_show (button4); + gtk_dialog_add_action_widget (GTK_DIALOG (oof_dialog), button4, GTK_RESPONSE_YES); + GTK_WIDGET_SET_FLAGS (button4, GTK_CAN_DEFAULT); + + alignment4 = gtk_alignment_new (0.5, 0.5, 0, 0); + gtk_widget_show (alignment4); + gtk_container_add (GTK_CONTAINER (button4), alignment4); + + hbox7 = gtk_hbox_new (FALSE, 2); + gtk_widget_show (hbox7); + gtk_container_add (GTK_CONTAINER (alignment4), hbox7); + + image8 = gtk_image_new_from_stock ("gtk-yes", GTK_ICON_SIZE_BUTTON); + gtk_widget_show (image8); + gtk_box_pack_start (GTK_BOX (hbox7), image8, FALSE, FALSE, 0); + + label11 = gtk_label_new_with_mnemonic (_("_Yes, Change Status")); + gtk_widget_show (label11); + gtk_box_pack_start (GTK_BOX (hbox7), label11, FALSE, FALSE, 0); + + res = gtk_dialog_run (GTK_DIALOG (oof_dialog)); + gtk_widget_destroy (oof_dialog); + + return res; +} + ExchangeAccountResult exchange_config_listener_authenticate (ExchangeConfigListener *ex_conf_listener, ExchangeAccount *account) { @@ -787,9 +915,6 @@ exchange_config_listener_authenticate (ExchangeConfigListener *ex_conf_listener, } if (result == EXCHANGE_ACCOUNT_CONNECT_SUCCESS) { gint max_pwd_age_days; - GladeXML *xml; - GtkWidget *dialog; - GtkResponseType response; gboolean oof; /* check for password expiry warning */ @@ -802,25 +927,7 @@ exchange_config_listener_authenticate (ExchangeConfigListener *ex_conf_listener, if (exchange_oof_get (account, &oof, NULL)) { if (oof) { /* OOF state is set, check if user wants to set it back to in-office */ - xml = glade_xml_new (CONNECTOR_GLADEDIR "/exchange-oof.glade", - "oof_dialog", NULL); - if (!xml) { - e_error_run (NULL, "org-gnome-exchange-operations:state-update-error", NULL); - return result; - } - - dialog = glade_xml_get_widget (xml, "oof_dialog"); - if (!dialog) { - e_error_run (NULL, "org-gnome-exchange-operations:state-update-error", NULL); - g_object_unref (xml); - return result; - } - - response = gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); - g_object_unref (xml); - - if (response == GTK_RESPONSE_YES) + if (run_oof_dialog () == GTK_RESPONSE_YES) if (!exchange_oof_set (account, FALSE, NULL)) e_error_run (NULL, "org-gnome-exchange-operations:state-update-error", NULL); } diff --git a/plugins/exchange-operations/exchange-delegates-user.c b/plugins/exchange-operations/exchange-delegates-user.c index 555b0ee73b..faf80619cb 100644 --- a/plugins/exchange-operations/exchange-delegates-user.c +++ b/plugins/exchange-operations/exchange-delegates-user.c @@ -29,8 +29,8 @@ #include "exchange-delegates-user.h" #include <mail/mail-ops.h> -#include <mail/mail-component.h> #include <mail/mail-send-recv.h> +#include <mail/e-mail-local.h> #include <camel/camel-multipart.h> #include <camel/camel-mime-utils.h> #include <camel/camel-stream-mem.h> @@ -44,7 +44,6 @@ #include <e-util/e-dialog-utils.h> #include <e-util/e-dialog-widgets.h> -#include <glade/glade.h> #include <string.h> @@ -75,10 +74,6 @@ static const gchar *folder_names_for_display[] = { N_("Calendar"), N_("Tasks"), N_("Inbox"), N_("Contacts") }; -static const gchar *widget_names[] = { - "calendar_perms_combobox", "task_perms_combobox", "inbox_perms_combobox", "contact_perms_combobox", -}; - enum { EDITED, LAST_SIGNAL @@ -206,69 +201,186 @@ exchange_delegates_user_edit (ExchangeAccount *account, ExchangeDelegatesUser *user, GtkWidget *parent_window) { - GladeXML *xml; - GtkWidget *dialog, *table, *label, *combobox, *check, *check_delegate; gchar *title; gint button, i; E2kPermissionsRole role; gboolean modified; + GtkWidget *delegate_permissions; + GtkWidget *dialog_vbox1; + GtkWidget *vbox3; + GtkWidget *delegate_label; + GtkWidget *folders_table; + GtkWidget *calendar_label; + GtkWidget *task_label; + GtkWidget *inbox_label; + GtkWidget *contact_label; + GtkWidget *calendar_perms_combobox; + GtkWidget *task_perms_combobox; + GtkWidget *inbox_perms_combobox; + GtkWidget *contact_perms_combobox; + GtkWidget *delegate_mail; + GtkWidget *see_private_checkbox; + GtkWidget *combobox, *comboboxes[EXCHANGE_DELEGATES_LAST]; g_return_val_if_fail (EXCHANGE_IS_DELEGATES_USER (user), FALSE); g_return_val_if_fail (E2K_IS_SID (user->sid), FALSE); - /* Grab the Glade widgets */ - xml = glade_xml_new ( - CONNECTOR_GLADEDIR "/exchange-delegates.glade", - "delegate_permissions", PACKAGE); - g_return_val_if_fail (xml, FALSE); - - title = g_strdup (_("Delegate Permissions")); - - dialog = glade_xml_get_widget (xml, "delegate_permissions"); - gtk_window_set_title (GTK_WINDOW (dialog), title); - gtk_window_set_transient_for (GTK_WINDOW (dialog), parent_window); - g_free (title); - - table = glade_xml_get_widget (xml, "toplevel_table"); - gtk_widget_reparent (table, GTK_DIALOG (dialog)->vbox); - gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 6); + delegate_permissions = gtk_dialog_new_with_buttons ( + _("Delegate Permissions"), + NULL, + GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, + NULL); + + if (parent_window) + gtk_window_set_transient_for (GTK_WINDOW (delegate_permissions), parent_window); + + dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (delegate_permissions)); + gtk_widget_show (dialog_vbox1); + + vbox3 = gtk_vbox_new (FALSE, 12); + gtk_widget_show (vbox3); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox3, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbox3), 12); + + delegate_label = gtk_label_new (_("Permissions for")); + gtk_widget_show (delegate_label); + gtk_box_pack_start (GTK_BOX (vbox3), delegate_label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (delegate_label), GTK_JUSTIFY_CENTER); + + folders_table = gtk_table_new (4, 2, FALSE); + gtk_widget_show (folders_table); + gtk_box_pack_start (GTK_BOX (vbox3), folders_table, FALSE, FALSE, 0); + gtk_table_set_row_spacings (GTK_TABLE (folders_table), 6); + gtk_table_set_col_spacings (GTK_TABLE (folders_table), 6); + + /* Translators: This is used for permissions for <user> for the folder Calendar. */ + calendar_label = gtk_label_new_with_mnemonic (_("C_alendar:")); + gtk_widget_show (calendar_label); + gtk_table_attach (GTK_TABLE (folders_table), calendar_label, 0, 1, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_justify (GTK_LABEL (calendar_label), GTK_JUSTIFY_CENTER); + gtk_misc_set_alignment (GTK_MISC (calendar_label), 0, 0.5); + + /* Translators: This is used for permissions for <user> for the folder Tasks. */ + task_label = gtk_label_new_with_mnemonic (_("_Tasks:")); + gtk_widget_show (task_label); + gtk_table_attach (GTK_TABLE (folders_table), task_label, 0, 1, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_justify (GTK_LABEL (task_label), GTK_JUSTIFY_CENTER); + gtk_misc_set_alignment (GTK_MISC (task_label), 0, 0.5); + + /* Translators: This is used for permissions for <user> for the folder Inbox. */ + inbox_label = gtk_label_new_with_mnemonic (_("_Inbox:")); + gtk_widget_show (inbox_label); + gtk_table_attach (GTK_TABLE (folders_table), inbox_label, 0, 1, 2, 3, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_justify (GTK_LABEL (inbox_label), GTK_JUSTIFY_CENTER); + gtk_misc_set_alignment (GTK_MISC (inbox_label), 0, 0.5); + + /* Translators: This is used for permissions for <user> for the folder Contacts. */ + contact_label = gtk_label_new_with_mnemonic (_("Co_ntacts:")); + gtk_widget_show (contact_label); + gtk_table_attach (GTK_TABLE (folders_table), contact_label, 0, 1, 3, 4, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_justify (GTK_LABEL (contact_label), GTK_JUSTIFY_CENTER); + gtk_misc_set_alignment (GTK_MISC (contact_label), 0, 0.5); + + calendar_perms_combobox = gtk_combo_box_new_text (); + gtk_widget_show (calendar_perms_combobox); + gtk_table_attach (GTK_TABLE (folders_table), calendar_perms_combobox, 1, 2, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + gtk_combo_box_append_text (GTK_COMBO_BOX (calendar_perms_combobox), _("None")); + gtk_combo_box_append_text (GTK_COMBO_BOX (calendar_perms_combobox), _("Reviewer (read-only)")); + gtk_combo_box_append_text (GTK_COMBO_BOX (calendar_perms_combobox), _("Author (read, create)")); + gtk_combo_box_append_text (GTK_COMBO_BOX (calendar_perms_combobox), _("Editor (read, create, edit)")); + + task_perms_combobox = gtk_combo_box_new_text (); + gtk_widget_show (task_perms_combobox); + gtk_table_attach (GTK_TABLE (folders_table), task_perms_combobox, 1, 2, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + gtk_combo_box_append_text (GTK_COMBO_BOX (task_perms_combobox), _("None")); + gtk_combo_box_append_text (GTK_COMBO_BOX (task_perms_combobox), _("Reviewer (read-only)")); + gtk_combo_box_append_text (GTK_COMBO_BOX (task_perms_combobox), _("Author (read, create)")); + gtk_combo_box_append_text (GTK_COMBO_BOX (task_perms_combobox), _("Editor (read, create, edit)")); + + inbox_perms_combobox = gtk_combo_box_new_text (); + gtk_widget_show (inbox_perms_combobox); + gtk_table_attach (GTK_TABLE (folders_table), inbox_perms_combobox, 1, 2, 2, 3, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + gtk_combo_box_append_text (GTK_COMBO_BOX (inbox_perms_combobox), _("None")); + gtk_combo_box_append_text (GTK_COMBO_BOX (inbox_perms_combobox), _("Reviewer (read-only)")); + gtk_combo_box_append_text (GTK_COMBO_BOX (inbox_perms_combobox), _("Author (read, create)")); + gtk_combo_box_append_text (GTK_COMBO_BOX (inbox_perms_combobox), _("Editor (read, create, edit)")); + + contact_perms_combobox = gtk_combo_box_new_text (); + gtk_widget_show (contact_perms_combobox); + gtk_table_attach (GTK_TABLE (folders_table), contact_perms_combobox, 1, 2, 3, 4, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + gtk_combo_box_append_text (GTK_COMBO_BOX (contact_perms_combobox), _("None")); + gtk_combo_box_append_text (GTK_COMBO_BOX (contact_perms_combobox), _("Reviewer (read-only)")); + gtk_combo_box_append_text (GTK_COMBO_BOX (contact_perms_combobox), _("Author (read, create)")); + gtk_combo_box_append_text (GTK_COMBO_BOX (contact_perms_combobox), _("Editor (read, create, edit)")); + + delegate_mail = gtk_check_button_new_with_mnemonic (_("_Summarize permissions")); + gtk_widget_show (delegate_mail); + gtk_box_pack_start (GTK_BOX (vbox3), delegate_mail, FALSE, FALSE, 0); + + see_private_checkbox = gtk_check_button_new_with_mnemonic (_("_Delegate can see private items")); + gtk_widget_show (see_private_checkbox); + gtk_box_pack_start (GTK_BOX (vbox3), see_private_checkbox, FALSE, FALSE, 0); + + gtk_box_set_spacing (GTK_BOX (dialog_vbox1), 6); title = g_strdup_printf (_("Permissions for %s"), user->display_name); - label = glade_xml_get_widget (xml, "delegate_label"); - gtk_label_set_text (GTK_LABEL (label), title); + gtk_label_set_text (GTK_LABEL (delegate_label), title); g_free (title); + comboboxes[0] = calendar_perms_combobox; + comboboxes[1] = task_perms_combobox; + comboboxes[2] = inbox_perms_combobox; + comboboxes[3] = contact_perms_combobox; + /* Set up the permissions */ for (i = 0; i < EXCHANGE_DELEGATES_LAST; i++) { - combobox = glade_xml_get_widget (xml, widget_names[i]); + combobox = comboboxes[i]; set_perms (combobox, user->role[i]); } - check = glade_xml_get_widget (xml, "see_private_checkbox"); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (see_private_checkbox), user->see_private); /* Run the dialog, while watching its parent. */ g_object_weak_ref (G_OBJECT (parent_window), - parent_window_destroyed, dialog); + parent_window_destroyed, delegate_permissions); g_object_add_weak_pointer (G_OBJECT (parent_window), (gpointer*)&parent_window); - button = gtk_dialog_run (GTK_DIALOG (dialog)); + button = gtk_dialog_run (GTK_DIALOG (delegate_permissions)); if (parent_window) { g_object_remove_weak_pointer (G_OBJECT (parent_window), (gpointer *)&parent_window); g_object_weak_unref (G_OBJECT (parent_window), - parent_window_destroyed, dialog); + parent_window_destroyed, delegate_permissions); } if (button != GTK_RESPONSE_OK) { - gtk_widget_destroy (dialog); + gtk_widget_destroy (delegate_permissions); return FALSE; } /* And update */ modified = FALSE; for (i = 0; i < EXCHANGE_DELEGATES_LAST; i++) { - combobox = glade_xml_get_widget (xml, widget_names[i]); + combobox = comboboxes[i]; role = e_dialog_combo_box_get (combobox, exchange_perm_map); if (is_delegate_role (user->role[i]) && @@ -281,8 +393,7 @@ exchange_delegates_user_edit (ExchangeAccount *account, /* The following piece of code is used to construct a mail message to be sent to a Delegate summarizing all the permissions set for him on the user's various folders. */ - check_delegate = glade_xml_get_widget (xml, "delegate_mail"); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_delegate)) == TRUE) { + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (delegate_mail)) == TRUE) { if (button == GTK_RESPONSE_OK) { EAccount *eaccount; @@ -333,7 +444,7 @@ exchange_delegates_user_edit (ExchangeAccount *account, camel_stream_printf (stream, "<html><body><p>%s<br><br>%s</p><table border = 0 width=\"40%%\">", msg_part1, msg_part2); for (i = 0; i < EXCHANGE_DELEGATES_LAST; i++) { - combobox = glade_xml_get_widget (xml, widget_names[i]); + combobox = comboboxes[i]; role = e_dialog_combo_box_get (combobox, exchange_perm_map); role_name = g_strdup (map_to_full_role_name(role)); g_string_append_printf ( @@ -344,7 +455,7 @@ exchange_delegates_user_edit (ExchangeAccount *account, camel_stream_printf (stream, "%s</table>", role_name_final->str); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)) == TRUE) { + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (see_private_checkbox)) == TRUE) { /* To translators: This message is included if the delegatee has been given access to the private items. */ @@ -419,7 +530,7 @@ exchange_delegates_user_edit (ExchangeAccount *account, } /* Send the permissions summarizing mail */ - out_folder = mail_component_get_folder (NULL, MAIL_COMPONENT_FOLDER_OUTBOX); + out_folder = e_mail_local_get_folder (E_MAIL_FOLDER_OUTBOX); info = camel_message_info_new (NULL); camel_message_info_set_flags (info, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN); mail_append_mail (out_folder, delegate_mail, info, em_utils_delegates_done, NULL); @@ -428,15 +539,13 @@ exchange_delegates_user_edit (ExchangeAccount *account, } - check = glade_xml_get_widget (xml, "see_private_checkbox"); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)) != + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (see_private_checkbox)) != user->see_private) { user->see_private = !user->see_private; modified = TRUE; } - g_object_unref (xml); - gtk_widget_destroy (dialog); + gtk_widget_destroy (delegate_permissions); if (modified) g_signal_emit (user, signals[EDITED], 0); diff --git a/plugins/exchange-operations/exchange-delegates.c b/plugins/exchange-operations/exchange-delegates.c index dda48dfeb2..89da03ef9c 100644 --- a/plugins/exchange-operations/exchange-delegates.c +++ b/plugins/exchange-operations/exchange-delegates.c @@ -44,7 +44,6 @@ #include <e-util/e-dialog-utils.h> #include <e-util/e-error.h> -#include <glade/glade-xml.h> typedef struct { const gchar *uri; @@ -56,7 +55,6 @@ typedef struct { ExchangeAccount *account; gchar *self_dn; - GladeXML *xml; GtkWidget *dialog, *parent; GtkListStore *model; @@ -580,7 +578,7 @@ remove_button_clicked_cb (GtkWidget *widget, gpointer data) GTK_BUTTONS_YES_NO, _("Remove the delegate %s?"), user->display_name); - gtk_window_set_transient_for (GTK_WINDOW (dialog), widget); + gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (gtk_widget_get_toplevel (widget))); btn = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); @@ -879,9 +877,6 @@ delegates_destroy (ExchangeDelegates *delegates) if (delegates->freebusy_folder.uri) g_free ((gchar *)delegates->freebusy_folder.uri); - if (delegates->xml) - g_object_unref (delegates->xml); - g_free (delegates); } @@ -907,8 +902,16 @@ parent_destroyed (gpointer user_data, GObject *ex_parent) void exchange_delegates (ExchangeAccount *account, GtkWidget *parent) { + GtkWidget *dialog_vbox1; + GtkWidget *vbox2; + GtkWidget *label3; + GtkWidget *delegate_hbox; + GtkWidget *delegates_table; + GtkWidget *vbuttonbox1; + GtkWidget *add_button; + GtkWidget *edit_button; + GtkWidget *remove_button; ExchangeDelegates *delegates; - GtkWidget *button; ExchangeDelegatesUser *user; GtkTreeViewColumn *column; GtkTreeIter iter; @@ -920,33 +923,75 @@ exchange_delegates (ExchangeAccount *account, GtkWidget *parent) delegates = g_new0 (ExchangeDelegates, 1); delegates->account = g_object_ref (account); - delegates->xml = glade_xml_new (CONNECTOR_GLADEDIR "/exchange-delegates.glade", NULL, NULL); - g_return_if_fail (delegates->xml != NULL); - - delegates->dialog = glade_xml_get_widget (delegates->xml, "delegates"); - g_return_if_fail (delegates->dialog != NULL); + delegates->dialog = gtk_dialog_new_with_buttons ( + _("Delegates"), + NULL, + GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, + NULL); + + dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (delegates->dialog)); + gtk_widget_show (dialog_vbox1); + + vbox2 = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox2, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 6); + + label3 = gtk_label_new (_("These users will be able to send mail on your behalf\nand access your folders with the permissions you give them.")); + gtk_widget_show (label3); + gtk_box_pack_start (GTK_BOX (vbox2), label3, FALSE, FALSE, 0); + + delegate_hbox = gtk_hbox_new (FALSE, 6); + gtk_widget_show (delegate_hbox); + gtk_box_pack_start (GTK_BOX (vbox2), delegate_hbox, TRUE, TRUE, 0); + + delegates_table = gtk_tree_view_new (); + gtk_widget_show (delegates_table); + gtk_box_pack_start (GTK_BOX (delegate_hbox), delegates_table, TRUE, TRUE, 0); + gtk_tree_view_set_enable_search (GTK_TREE_VIEW (delegates_table), FALSE); + + vbuttonbox1 = gtk_vbutton_box_new (); + gtk_widget_show (vbuttonbox1); + gtk_box_pack_end (GTK_BOX (delegate_hbox), vbuttonbox1, FALSE, TRUE, 0); + gtk_button_box_set_layout (GTK_BUTTON_BOX (vbuttonbox1), GTK_BUTTONBOX_START); + gtk_box_set_spacing (GTK_BOX (vbuttonbox1), 6); + + add_button = gtk_button_new_from_stock ("gtk-add"); + gtk_widget_show (add_button); + gtk_container_add (GTK_CONTAINER (vbuttonbox1), add_button); + GTK_WIDGET_SET_FLAGS (add_button, GTK_CAN_DEFAULT); + + edit_button = gtk_button_new_with_mnemonic (_("_Edit")); + gtk_widget_show (edit_button); + gtk_container_add (GTK_CONTAINER (vbuttonbox1), edit_button); + GTK_WIDGET_SET_FLAGS (edit_button, GTK_CAN_DEFAULT); + + remove_button = gtk_button_new_from_stock ("gtk-remove"); + gtk_widget_show (remove_button); + gtk_container_add (GTK_CONTAINER (vbuttonbox1), remove_button); + GTK_WIDGET_SET_FLAGS (remove_button, GTK_CAN_DEFAULT); g_signal_connect (delegates->dialog, "response", G_CALLBACK (dialog_response), delegates); - gtk_window_set_transient_for (GTK_WINDOW (delegates->dialog), parent); + if (parent) + gtk_window_set_transient_for (GTK_WINDOW (delegates->dialog), GTK_WINDOW (parent)); delegates->parent = parent; g_object_weak_ref (G_OBJECT (parent), parent_destroyed, delegates); /* Set up the buttons */ - button = glade_xml_get_widget (delegates->xml, "add_button"); - g_signal_connect (button, "clicked", + g_signal_connect (add_button, "clicked", G_CALLBACK (add_button_clicked_cb), delegates); - button = glade_xml_get_widget (delegates->xml, "edit_button"); - g_signal_connect (button, "clicked", + g_signal_connect (edit_button, "clicked", G_CALLBACK (edit_button_clicked_cb), delegates); - button = glade_xml_get_widget (delegates->xml, "remove_button"); - g_signal_connect (button, "clicked", + g_signal_connect (remove_button, "clicked", G_CALLBACK (remove_button_clicked_cb), delegates); /* Set up the table */ delegates->model = gtk_list_store_new (1, G_TYPE_STRING); - delegates->table = glade_xml_get_widget (delegates->xml, "delegates_table"); + delegates->table = delegates_table; column = gtk_tree_view_column_new_with_attributes ( _("Name"), gtk_cell_renderer_text_new (), "text", 0, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (delegates->table), @@ -968,12 +1013,9 @@ exchange_delegates (ExchangeAccount *account, GtkWidget *parent) "button_press_event", G_CALLBACK (table_click_cb), delegates); } else { - button = glade_xml_get_widget (delegates->xml, "add_button"); - gtk_widget_set_sensitive (button, FALSE); - button = glade_xml_get_widget (delegates->xml, "edit_button"); - gtk_widget_set_sensitive (button, FALSE); - button = glade_xml_get_widget (delegates->xml, "remove_button"); - gtk_widget_set_sensitive (button, FALSE); + gtk_widget_set_sensitive (add_button, FALSE); + gtk_widget_set_sensitive (edit_button, FALSE); + gtk_widget_set_sensitive (remove_button, FALSE); gtk_list_store_append (delegates->model, &iter); gtk_list_store_set (delegates->model, &iter, diff --git a/plugins/exchange-operations/exchange-delegates.glade b/plugins/exchange-operations/exchange-delegates.glade deleted file mode 100644 index 1e099e999a..0000000000 --- a/plugins/exchange-operations/exchange-delegates.glade +++ /dev/null @@ -1,542 +0,0 @@ -<?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="delegates"> - <property name="visible">True</property> - <property name="title" translatable="yes">Delegates</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_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="urgency_hint">False</property> - <property name="has_separator">False</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="dialog-vbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="dialog-action_area1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="cancelbutton1"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-6</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="okbutton1"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-5</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox2"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label3"> - <property name="visible">True</property> - <property name="label" translatable="yes">These users will be able to send mail on your behalf -and access your folders with the permissions you give them.</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="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="delegate_hbox"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkTreeView" id="delegates_table"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">True</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">False</property> - <property name="fixed_height_mode">False</property> - <property name="hover_selection">False</property> - <property name="hover_expand">False</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVButtonBox" id="vbuttonbox1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_START</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkButton" id="add_button"> - <property name="visible">True</property> - <property name="can_default">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> - </child> - - <child> - <widget class="GtkButton" id="edit_button"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Edit</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="remove_button"> - <property name="visible">True</property> - <property name="can_default">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> - </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> - </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> - -<widget class="GtkDialog" id="delegate_permissions"> - <property name="title" translatable="yes">Delegate Permissions</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_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="urgency_hint">False</property> - <property name="has_separator">False</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="cancelbutton2"> - <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="okbutton2"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-5</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox3"> - <property name="border_width">12</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - - <child> - <widget class="GtkLabel" id="delegate_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">Permissions for</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</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> - - <child> - <widget class="GtkTable" id="folders_table"> - <property name="visible">True</property> - <property name="n_rows">4</property> - <property name="n_columns">2</property> - <property name="homogeneous">False</property> - <property name="row_spacing">6</property> - <property name="column_spacing">6</property> - - <child> - <widget class="GtkLabel" id="calendar_label"> - <property name="visible">True</property> - <property name="label" translatable="yes" comments="Translators: This is used for permissions for <user> for the folder Calendar.">C_alendar:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</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="task_label"> - <property name="visible">True</property> - <property name="label" translatable="yes" comments="Translators: This is used for permissions for <user> for the folder Tasks.">_Tasks:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</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="inbox_label"> - <property name="visible">True</property> - <property name="label" translatable="yes" comments="Translators: This is used for permissions for <user> for the folder Inbox.">_Inbox:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</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="contact_label"> - <property name="visible">True</property> - <property name="label" translatable="yes" comments="Translators: This is used for permissions for <user> for the folder Contacts.">Co_ntacts:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</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="GtkComboBox" id="calendar_perms_combobox"> - <property name="visible">True</property> - <property name="items" translatable="yes">None -Reviewer (read-only) -Author (read, create) -Editor (read, create, edit)</property> - <property name="add_tearoffs">False</property> - <property name="focus_on_click">True</property> - </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">fill</property> - </packing> - </child> - - <child> - <widget class="GtkComboBox" id="task_perms_combobox"> - <property name="visible">True</property> - <property name="items" translatable="yes">None -Reviewer (read-only) -Author (read, create) -Editor (read, create, edit)</property> - <property name="add_tearoffs">False</property> - <property name="focus_on_click">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options">fill</property> - </packing> - </child> - - <child> - <widget class="GtkComboBox" id="inbox_perms_combobox"> - <property name="visible">True</property> - <property name="items" translatable="yes">None -Reviewer (read-only) -Author (read, create) -Editor (read, create, edit)</property> - <property name="add_tearoffs">False</property> - <property name="focus_on_click">True</property> - </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">fill</property> - </packing> - </child> - - <child> - <widget class="GtkComboBox" id="contact_perms_combobox"> - <property name="visible">True</property> - <property name="items" translatable="yes">None -Reviewer (read-only) -Author (read, create) -Editor (read, create, edit)</property> - <property name="add_tearoffs">False</property> - <property name="focus_on_click">True</property> - </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">fill</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="delegate_mail"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Summarize permissions</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="see_private_checkbox"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Delegate can see private items</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </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/exchange-operations/exchange-folder-permission.c b/plugins/exchange-operations/exchange-folder-permission.c index 7113ef8e64..200eea8cdb 100644 --- a/plugins/exchange-operations/exchange-folder-permission.c +++ b/plugins/exchange-operations/exchange-folder-permission.c @@ -26,316 +26,502 @@ #endif #include <glib/gi18n.h> -#include <glade/glade.h> #include <gtk/gtk.h> #include <gconf/gconf-client.h> -#include <exchange-account.h> -#include <e-util/e-dialog-utils.h> -#include <calendar/gui/e-cal-popup.h> + #include <libedataserverui/e-source-selector.h> -#include <camel/camel-url.h> -#include <mail/em-popup.h> -#include <mail/em-menu.h> #include <libebook/e-book.h> +#include <camel/camel-url.h> + +#include <exchange-account.h> + +#include <e-util/e-dialog-utils.h> +#include <calendar/gui/e-cal-model.h> + +#include <shell/e-shell-view.h> +#include <shell/e-shell-window.h> + +#include <mail/em-folder-tree.h> +#include <mail/em-folder-tree-model.h> + #include "exchange-config-listener.h" +#include "exchange-folder-subscription.h" #include "exchange-operations.h" #include "exchange-permissions-dialog.h" -#include "addressbook/gui/widgets/eab-popup.h" -#include "calendar/gui/e-cal-menu.h" -#include "calendar/gui/e-cal-model.h" -#include "addressbook/gui/widgets/eab-menu.h" #define d(x) -static void org_folder_permissions_cb (EPopup *ep, EPopupItem *p, gpointer data); -void org_gnome_exchange_folder_permissions (EPlugin *ep, EMPopupTargetFolder *t); -void org_gnome_exchange_menu_folder_permissions (EPlugin *ep, EMMenuTargetSelect *target); -void org_gnome_exchange_calendar_permissions (EPlugin *ep, ECalPopupTargetSource *target); -void org_gnome_exchange_addressbook_permissions (EPlugin *ep, EABPopupTargetSource *target); -void org_gnome_exchange_menu_ab_permissions (EPlugin *ep, EABMenuTargetSelect *target); -void org_gnome_exchange_menu_tasks_permissions (EPlugin *ep, ECalMenuTargetSelect *target); -void org_gnome_exchange_menu_cal_permissions (EPlugin *ep, ECalMenuTargetSelect *target); +gboolean eex_ui_mail_init (GtkUIManager *ui_manager, EShellView *shell_view); +gboolean eex_ui_calendar_permissions (GtkUIManager *ui_manager, EShellView *shell_view); +gboolean eex_ui_tasks_permissions (GtkUIManager *ui_manager, EShellView *shell_view); +gboolean eex_ui_addressbook_permissions (GtkUIManager *ui_manager, EShellView *shell_view); -gchar *selected_exchange_folder_uri = NULL; +static gboolean +is_subscribed_folder (const gchar *uri) +{ + const gchar *path; + ExchangeAccount *account; + gint offset; -static EPopupItem popup_items[] = { - { E_POPUP_ITEM, (gchar *) "30.emc.10", (gchar *) N_("Permissions..."), org_folder_permissions_cb, NULL, (gchar *) "folder-new", 0, EM_POPUP_FOLDER_INFERIORS } -}; + g_return_val_if_fail (uri != NULL, FALSE); + + account = exchange_operations_get_exchange_account (); + g_return_val_if_fail (account != NULL, FALSE); + g_return_val_if_fail (account->account_filename != NULL, FALSE); + + offset = strlen ("exchange://") + strlen (account->account_filename) + strlen ("/;"); + g_return_val_if_fail (strlen (uri) >= offset, FALSE); + + path = uri + offset; + + return strchr (path, '@') != NULL; +} static void -popup_free (EPopup *ep, GSList *items, gpointer data) +call_folder_permissions (const gchar *uri) { - g_slist_free (items); + ExchangeAccount *account = NULL; + EFolder *folder = NULL; + + g_return_if_fail (uri != NULL); + + account = exchange_operations_get_exchange_account (); + if (!account) + return; + + folder = exchange_account_get_folder (account, uri); + if (folder) + exchange_permissions_dialog_new (account, folder, NULL); } -void -org_gnome_exchange_calendar_permissions (EPlugin *ep, ECalPopupTargetSource *target) +static gboolean +is_eex_folder_selected (EShellView *shell_view, gchar **puri) { - GSList *menus = NULL; - gint i = 0, mode; - static gint first =0; ExchangeAccount *account = NULL; - ESource *source = NULL; + gint mode; + EShellSidebar *shell_sidebar; + EMFolderTree *folder_tree = NULL; + GtkTreeSelection *selection; + GtkTreeModel *model = NULL; + GtkTreeIter iter; + gboolean is_store = FALSE, res; gchar *uri = NULL; - source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); - uri = (gchar *) e_source_get_uri (source); - if (uri && ! g_strrstr (uri, "exchange://")) { - return; - } + g_return_val_if_fail (shell_view != NULL, FALSE); account = exchange_operations_get_exchange_account (); if (!account) - return; + return FALSE; + exchange_account_is_offline (account, &mode); if (mode == OFFLINE_MODE) - return; - if (!exchange_account_get_folder (account, uri)) - return; + return FALSE; + + shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); + g_object_get (shell_sidebar, "folder-tree", &folder_tree, NULL); + g_return_val_if_fail (folder_tree != NULL, FALSE); + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_tree)); + g_return_val_if_fail (selection != NULL, FALSE); + + if (!gtk_tree_selection_get_selected (selection, &model, &iter)) + return FALSE; + + gtk_tree_model_get (model, &iter, + COL_STRING_URI, &uri, + COL_BOOL_IS_STORE, &is_store, + -1); - selected_exchange_folder_uri = uri; + res = !is_store && uri && g_ascii_strncasecmp (uri, "exchange://", 11) == 0; - /* for translation*/ - if (!first) { - popup_items[0].label = _(popup_items[0].label); - first++; + if (res) { + const gchar *path; + path = uri + strlen ("exchange://") + strlen (account->account_filename); + res = path && *path; + + if (res) { + if (puri) + *puri = g_strdup (uri); + } } - for (i = 0; i < sizeof (popup_items) / sizeof (popup_items[0]); i++) - menus = g_slist_prepend (menus, &popup_items[i]); + g_free (uri); + + return res; +} + +static void +eex_mail_folder_permissions_cb (GtkAction *action, EShellView *shell_view) +{ + gchar *uri = NULL; + + if (is_eex_folder_selected (shell_view, &uri)) + call_folder_permissions (uri); + + g_free (uri); +} + +static void +eex_folder_subscribe_cb (GtkAction *action, EShellView *shell_view) +{ + const gchar *name; - e_popup_add_items (target->target.popup, menus, NULL, popup_free, NULL); + name = gtk_action_get_name (action); + g_return_if_fail (name != NULL); + name = strrchr (name, '-'); + g_return_if_fail (name != NULL && *name == '-'); + + call_folder_subscribe (name + 1); } -void -org_gnome_exchange_addressbook_permissions (EPlugin *ep, EABPopupTargetSource *target) +static void +eex_mail_folder_inbox_unsubscribe_cb (GtkAction *action, EShellView *shell_view) { - GSList *menus = NULL; - gint i = 0, mode; - static gint first =0; - ExchangeAccount *account = NULL; - ESource *source = NULL; gchar *uri = NULL; - source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); - uri = (gchar *) e_source_get_uri (source); - if (!g_strrstr (uri, "exchange://")) - return; + if (is_eex_folder_selected (shell_view, &uri)) + call_folder_unsubscribe ("Inbox", uri, NULL); - account = exchange_operations_get_exchange_account (); - if (!account) - return; - exchange_account_is_offline (account, &mode); - if (mode == OFFLINE_MODE) - return; + g_free (uri); +} - if (!exchange_account_get_folder (account, uri)) - return; +/* Beware, depends on the order */ +static GtkActionEntry mail_entries[] = { + { "eex-mail-folder-permissions", + "folder-new", + N_("Permissions..."), + NULL, + N_("Check folder permissions"), + G_CALLBACK (eex_mail_folder_permissions_cb) }, + + { "eex-folder-subscribe-Inbox", + NULL, + N_("Subscribe to Other User's Folder..."), + NULL, + N_("Subscribe to Other User's Folder"), + G_CALLBACK (eex_folder_subscribe_cb) }, + + { "eex-mail-folder-inbox-unsubscribe", + "folder-new", + N_("Unsubscribe Folder..."), + NULL, + NULL, + G_CALLBACK (eex_mail_folder_inbox_unsubscribe_cb) } +}; + +static void +update_mail_entries_cb (EShellView *shell_view, gpointer user_data) +{ + GtkActionGroup *action_group; + EShellWindow *shell_window; + GtkAction *action; + gboolean is_eex; + gchar *uri = NULL; + gint i; - selected_exchange_folder_uri = uri; + g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - /* for translation*/ - if (!first) { - popup_items[0].label = _(popup_items[0].label); - first++; + is_eex = is_eex_folder_selected (shell_view, &uri); + shell_window = e_shell_view_get_shell_window (shell_view); + action_group = e_shell_window_get_action_group (shell_window, "mail"); + + for (i = 0; i < G_N_ELEMENTS (mail_entries); i++) { + gboolean visible = is_eex; + + action = gtk_action_group_get_action (action_group, mail_entries[i].name); + g_return_if_fail (action != NULL); + + if (visible && i == 2) { + /* it's an unsubscribe, check if this is public and show/hide based on that */ + visible = uri && is_subscribed_folder (uri); + } + + gtk_action_set_visible (action, visible); } - for (i = 0; i < sizeof (popup_items) / sizeof (popup_items[0]); i++) - menus = g_slist_prepend (menus, &popup_items[i]); + g_free (uri); +} + +gboolean +eex_ui_mail_init (GtkUIManager *ui_manager, EShellView *shell_view) +{ + EShellWindow *shell_window; + + shell_window = e_shell_view_get_shell_window (shell_view); + + gtk_action_group_add_actions ( + e_shell_window_get_action_group (shell_window, "mail"), + mail_entries, G_N_ELEMENTS (mail_entries), shell_view); - e_popup_add_items (target->target.popup, menus, NULL, popup_free, NULL); + g_signal_connect (shell_view, "update-actions", G_CALLBACK (update_mail_entries_cb), NULL); + + return TRUE; } -void -org_gnome_exchange_folder_permissions (EPlugin *ep, EMPopupTargetFolder *target) +static gboolean +is_eex_source_selected (EShellView *shell_view, gchar **puri) { - GSList *menus = NULL; - gint i = 0, mode; - static gint first =0; - gchar *path = NULL; - gchar *fixed_path = NULL; + gint mode; ExchangeAccount *account = NULL; + ESource *source = NULL; + gchar *uri = NULL; + EShellSidebar *shell_sidebar; + ESourceSelector *selector = NULL; - d(g_print ("exchange-folder-permission.c: entry\n")); + shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); + g_return_val_if_fail (shell_sidebar != NULL, FALSE); - if (!g_strrstr (target->uri, "exchange://")) - return; + g_object_get (shell_sidebar, "selector", &selector, NULL); + g_return_val_if_fail (selector != NULL, FALSE); + + source = e_source_selector_peek_primary_selection (selector); + uri = e_source_get_uri (source); + + g_object_unref (selector); + + if (uri && !g_strrstr (uri, "exchange://")) { + g_free (uri); + return FALSE; + } account = exchange_operations_get_exchange_account (); - if (!account ) - return; + if (!account) { + g_free (uri); + return FALSE; + } + exchange_account_is_offline (account, &mode); - if (mode == OFFLINE_MODE) - return; + if (mode == OFFLINE_MODE) { + g_free (uri); + return FALSE; + } - path = target->uri + strlen ("exchange://") + strlen (account->account_filename); + if (!exchange_account_get_folder (account, uri)) { + g_free (uri); + return FALSE; + } - if (!path || !*path) - return; + if (puri) + *puri = uri; + else + g_free (uri); - fixed_path = camel_url_decode_path (path); - d(g_print ("exchange-folder-permission.c: path=[%s], fixed_path=[%s]\n", path, fixed_path)); + return TRUE; +} - if (! g_strrstr (target->uri, "exchange://") || - !exchange_account_get_folder (account, fixed_path)) { - g_free (fixed_path); - return; - } +#define NUM_ENTRIES 3 - g_free (fixed_path); +static void +update_source_entries_cb (EShellView *shell_view, GtkActionEntry *entries) +{ + GtkActionGroup *action_group; + EShellWindow *shell_window; + GtkAction *action; + const gchar *group; + gchar *uri = NULL; + gboolean is_eex; + gint i; - selected_exchange_folder_uri = path; - /* for translation*/ - if (!first) { - popup_items[0].label = _(popup_items[0].label); - first++; - } + g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); + g_return_if_fail (entries != NULL); + + if (strstr (entries->name, "calendar")) + group = "calendar"; + else if (strstr (entries->name, "tasks")) + group = "tasks"; + else + group = "addressbook"; + + is_eex = is_eex_source_selected (shell_view, &uri); + shell_window = e_shell_view_get_shell_window (shell_view); + action_group = e_shell_window_get_action_group (shell_window, group); - for (i = 0; i < sizeof (popup_items) / sizeof (popup_items[0]); i++) - menus = g_slist_prepend (menus, &popup_items[i]); + for (i = 0; i < NUM_ENTRIES; i++) { + gboolean visible = is_eex; - e_popup_add_items (target->target.popup, menus, NULL, popup_free, NULL); + action = gtk_action_group_get_action (action_group, entries->name); + g_return_if_fail (action != NULL); + if (visible && i == 2) { + /* it's an unsubscribe, check if this is public and show/hide based on that */ + visible = uri && is_subscribed_folder (uri); + } + + gtk_action_set_visible (action, visible); + + } + + g_free (uri); } static void -org_folder_permissions_cb (EPopup *ep, EPopupItem *p, gpointer data) +setup_source_actions (EShellView *shell_view, GtkActionEntry *entries) { - ExchangeAccount *account = NULL; - EFolder *folder = NULL; + EShellWindow *shell_window; + const gchar *group; - account = exchange_operations_get_exchange_account (); + g_return_if_fail (shell_view != NULL); + g_return_if_fail (entries != NULL); - if (!account) - return; + if (strstr (entries->name, "calendar")) + group = "calendar"; + else if (strstr (entries->name, "tasks")) + group = "tasks"; + else + group = "addressbook"; - folder = exchange_account_get_folder (account, selected_exchange_folder_uri); - if (folder) - exchange_permissions_dialog_new (account, folder, NULL); + shell_window = e_shell_view_get_shell_window (shell_view); + gtk_action_group_add_actions ( + e_shell_window_get_action_group (shell_window, group), + entries, NUM_ENTRIES, shell_view); + + g_signal_connect (shell_view, "update-actions", G_CALLBACK (update_source_entries_cb), entries); } -void -org_gnome_exchange_menu_folder_permissions (EPlugin *ep, EMMenuTargetSelect *target) +static void +source_permissions_cb (GtkAction *action, EShellView *shell_view) { - ExchangeAccount *account = NULL; - EFolder *folder = NULL; - gchar *path = NULL; - gint mode; + gchar *uri = NULL; - if (!g_str_has_prefix (target->uri, "exchange://")) - return; + g_return_if_fail (shell_view != NULL); - account = exchange_operations_get_exchange_account (); - if (!account) - return; - exchange_account_is_offline (account, &mode); - if (mode == OFFLINE_MODE) - return; + if (is_eex_source_selected (shell_view, &uri)) + call_folder_permissions (uri); - path = target->uri + strlen ("exchange://") + strlen (account->account_filename); - folder = exchange_account_get_folder (account, path); - if (folder) - exchange_permissions_dialog_new (account, folder, NULL); + g_free (uri); } -void -org_gnome_exchange_menu_cal_permissions (EPlugin *ep, ECalMenuTargetSelect *target) +static void +eex_folder_unsubscribe_cb (GtkAction *action, EShellView *shell_view) { - ExchangeAccount *account = NULL; - EFolder *folder = NULL; - ECalModel *model = NULL; - ECal *ecal = NULL; gchar *uri = NULL; - gint mode; + const gchar *name; - if (!target) - return; - if (target->model) - model = E_CAL_MODEL (target->model); + g_return_if_fail (shell_view != NULL); - ecal = e_cal_model_get_default_client (model); - uri = (gchar *) e_cal_get_uri (ecal); - if (!uri) - return; - else - if (!g_str_has_prefix (uri, "exchange://")) - return; + name = gtk_action_get_name (action); + g_return_if_fail (name != NULL); - account = exchange_operations_get_exchange_account (); - if (!account) - return; - exchange_account_is_offline (account, &mode); - if (mode == OFFLINE_MODE) - return; + name = strrchr (name, '-'); + g_return_if_fail (name != NULL && *name == '-'); - folder = exchange_account_get_folder (account, uri); - exchange_permissions_dialog_new (account, folder, NULL); + if (is_eex_source_selected (shell_view, &uri)) { + EShellSidebar *shell_sidebar; + ESourceSelector *selector = NULL; + + shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); + g_return_if_fail (shell_sidebar != NULL); + + g_object_get (shell_sidebar, "selector", &selector, NULL); + g_return_if_fail (selector != NULL); + + call_folder_unsubscribe (name + 1, uri, e_source_selector_peek_primary_selection (selector)); + } + + g_free (uri); } -void -org_gnome_exchange_menu_tasks_permissions (EPlugin *ep, ECalMenuTargetSelect *target) -{ - ExchangeAccount *account = NULL; - EFolder *folder = NULL; - ECalModel *model = NULL; - ECal *ecal = NULL; - gchar *uri = NULL; - gint mode; +/* Beware, depends on count and order */ +static GtkActionEntry calendar_entries[] = { + { "eex-calendar-permissions", + "folder-new", + N_("Permissions..."), + NULL, + N_("Check calendar permissions"), + G_CALLBACK (source_permissions_cb) }, + + { "eex-folder-subscribe-Calendar", + NULL, + N_("Subscribe to Other User's Folder..."), + NULL, + N_("Subscribe to Other User's Folder"), + G_CALLBACK (eex_folder_subscribe_cb) }, + + { "eex-folder-unsubscribe-Calendar", + "folder-new", + N_("Unsubscribe Folder..."), + NULL, + NULL, + G_CALLBACK (eex_folder_unsubscribe_cb) } +}; - if (!target) - return; - if (target->model) - model = E_CAL_MODEL (target->model); +gboolean +eex_ui_calendar_permissions (GtkUIManager *ui_manager, EShellView *shell_view) +{ + g_return_val_if_fail (G_N_ELEMENTS (calendar_entries) != NUM_ENTRIES, FALSE); - ecal = e_cal_model_get_default_client (model); - uri = (gchar *) e_cal_get_uri (ecal); - if (!uri) - return; - else - if (!g_str_has_prefix (uri, "exchange://")) - return; - account = exchange_operations_get_exchange_account (); - if (!account) - return; - exchange_account_is_offline (account, &mode); - if (mode == OFFLINE_MODE) - return; + setup_source_actions (shell_view, calendar_entries); - folder = exchange_account_get_folder (account, uri); - exchange_permissions_dialog_new (account, folder, NULL); + return TRUE; } -void -org_gnome_exchange_menu_ab_permissions (EPlugin *ep, EABMenuTargetSelect *target) +/* Beware, depends on count and order */ +static GtkActionEntry tasks_entries[] = { + { "eex-tasks-permissions", + "folder-new", + N_("Permissions..."), + NULL, + N_("Check tasks permissions"), + G_CALLBACK (source_permissions_cb) }, + + { "eex-folder-subscribe-Tasks", + NULL, + N_("Subscribe to Other User's Folder..."), + NULL, + N_("Subscribe to Other User's Folder"), + G_CALLBACK (eex_folder_subscribe_cb) }, + + { "eex-folder-unsubscribe-Tasks", + "folder-new", + N_("Unsubscribe Folder..."), + NULL, + NULL, + G_CALLBACK (eex_folder_unsubscribe_cb) } +}; + +gboolean +eex_ui_tasks_permissions (GtkUIManager *ui_manager, EShellView *shell_view) { - ExchangeAccount *account = NULL; - EFolder *folder = NULL; - EBook *ebook = NULL; - gchar *uri = NULL; - gint mode; + g_return_val_if_fail (G_N_ELEMENTS (tasks_entries) != NUM_ENTRIES, FALSE); - if (!target) - return; - if (target->book) - ebook = E_BOOK (target->book); + setup_source_actions (shell_view, tasks_entries); - uri = (gchar *) e_book_get_uri (ebook); - if (!uri) - return; - else - if (!g_str_has_prefix (uri, "exchange://")) - return; + return TRUE; +} - account = exchange_operations_get_exchange_account (); - if (!account) - return; - exchange_account_is_offline (account, &mode); - if (mode == OFFLINE_MODE) - return; +/* Beware, depends on count and order */ +static GtkActionEntry addressbook_entries[] = { + { "eex-addressbook-permissions", + "folder-new", + N_("Permissions..."), + NULL, + N_("Check addressbook permissions"), + G_CALLBACK (source_permissions_cb) }, + + { "eex-folder-subscribe-Contacts", + NULL, + N_("Subscribe to Other User's Folder..."), + NULL, + N_("Subscribe to Other User's Folder"), + G_CALLBACK (eex_folder_subscribe_cb) }, + + { "eex-folder-unsubscribe-Contacts", + "folder-new", + N_("Unsubscribe Folder..."), + NULL, + NULL, + G_CALLBACK (eex_folder_unsubscribe_cb) } +}; - folder = exchange_account_get_folder (account, uri); - exchange_permissions_dialog_new (account, folder, NULL); +gboolean +eex_ui_addressbook_permissions (GtkUIManager *ui_manager, EShellView *shell_view) +{ + g_return_val_if_fail (G_N_ELEMENTS (addressbook_entries) != NUM_ENTRIES, FALSE); + + setup_source_actions (shell_view, addressbook_entries); + + return TRUE; } diff --git a/plugins/exchange-operations/exchange-folder-size-display.c b/plugins/exchange-operations/exchange-folder-size-display.c index 8db56b80a2..7e1fc7ff89 100644 --- a/plugins/exchange-operations/exchange-folder-size-display.c +++ b/plugins/exchange-operations/exchange-folder-size-display.c @@ -29,7 +29,6 @@ #include <glib/gi18n.h> #include <e-util/e-dialog-utils.h> -#include <glade/glade-xml.h> #include "exchange-folder-size-display.h" enum { @@ -105,21 +104,42 @@ exchange_folder_size_display (GtkListStore *model, GtkWidget *parent) GtkTreeViewColumn *column; GtkTreeSortable *sortable; GtkCellRenderer *cell; - GladeXML *xml; - GtkWidget *dialog, *table; + GtkWidget *folder_tree; + GtkWidget *dialog_vbox1; + GtkWidget *folder_tree_hbox; + GtkWidget *scrolledwindow1; + GtkWidget *folder_treeview; GList *l; gchar *col_name; - printf ("exchange_folder_size_display called\n"); g_return_if_fail (GTK_IS_WIDGET (parent)); - xml = glade_xml_new (CONNECTOR_GLADEDIR "/exchange-folder-tree.glade", NULL, NULL); - g_return_if_fail (xml != NULL); - dialog = glade_xml_get_widget (xml, "folder_tree"); - table = glade_xml_get_widget (xml, "folder_treeview"); - g_object_unref (xml); + folder_tree = gtk_dialog_new_with_buttons ( + _("Exchange Folder Tree"), + NULL, + GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_OK, GTK_RESPONSE_OK, + NULL); + gtk_window_set_position (GTK_WINDOW (folder_tree), GTK_WIN_POS_CENTER_ON_PARENT); + gtk_window_set_default_size (GTK_WINDOW (folder_tree), 250, 300); + if (parent) + gtk_window_set_transient_for (GTK_WINDOW (folder_tree), parent); + + dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (folder_tree)); + gtk_widget_show (dialog_vbox1); + + folder_tree_hbox = gtk_hbox_new (FALSE, 0); + gtk_widget_show (folder_tree_hbox); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), folder_tree_hbox, TRUE, TRUE, 0); + + scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow1); + gtk_box_pack_start (GTK_BOX (folder_tree_hbox), scrolledwindow1, TRUE, TRUE, 0); + + folder_treeview = gtk_tree_view_new (); + gtk_widget_show (folder_treeview); + gtk_container_add (GTK_CONTAINER (scrolledwindow1), folder_treeview); - gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); /* fsize->parent = parent; */ /* Set up the table */ @@ -128,7 +148,7 @@ exchange_folder_size_display (GtkListStore *model, GtkWidget *parent) column = gtk_tree_view_column_new_with_attributes ( _("Folder Name"), gtk_cell_renderer_text_new (), "text", COLUMN_NAME, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (table), + gtk_tree_view_append_column (GTK_TREE_VIEW (folder_treeview), column); col_name = g_strdup_printf ("%s (KB)", _("Folder Size")); @@ -136,15 +156,15 @@ exchange_folder_size_display (GtkListStore *model, GtkWidget *parent) col_name, gtk_cell_renderer_text_new (), "text", COLUMN_SIZE, NULL); g_free (col_name); - l = gtk_tree_view_column_get_cell_renderers (column); + l = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column)); cell = (GtkCellRenderer *)l->data; gtk_tree_view_column_set_cell_data_func (column, cell, format_size_func, NULL, NULL ); g_list_free (l); - gtk_tree_view_append_column (GTK_TREE_VIEW (table), + gtk_tree_view_append_column (GTK_TREE_VIEW (folder_treeview), column); - gtk_tree_view_set_model (GTK_TREE_VIEW (table), + gtk_tree_view_set_model (GTK_TREE_VIEW (folder_treeview), GTK_TREE_MODEL (model)); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); + gtk_dialog_run (GTK_DIALOG (folder_tree)); + gtk_widget_destroy (folder_tree); } diff --git a/plugins/exchange-operations/exchange-folder-subscription.c b/plugins/exchange-operations/exchange-folder-subscription.c index 043d5797e4..63d2fb2937 100644 --- a/plugins/exchange-operations/exchange-folder-subscription.c +++ b/plugins/exchange-operations/exchange-folder-subscription.c @@ -25,7 +25,6 @@ #include "config.h" #endif -#include <glade/glade-xml.h> #include <gtk/gtk.h> #include <e-util/e-error.h> #include <e-folder.h> @@ -57,16 +56,13 @@ user_clicked (GtkWidget *button, ENameSelector *name_selector) } static GtkWidget * -setup_name_selector (GladeXML *glade_xml, ENameSelector **name_selector_ret) +setup_name_selector (GtkWidget *placeholder, GtkWidget *button_user, ENameSelector **name_selector_ret) { ENameSelector *name_selector; ENameSelectorModel *name_selector_model; ENameSelectorDialog *name_selector_dialog; - GtkWidget *placeholder; GtkWidget *widget; - GtkWidget *button; - placeholder = glade_xml_get_widget (glade_xml, "user-picker-placeholder"); g_assert (GTK_IS_CONTAINER (placeholder)); name_selector = e_name_selector_new (); @@ -83,8 +79,7 @@ setup_name_selector (GladeXML *glade_xml, ENameSelector **name_selector_ret) widget = GTK_WIDGET (e_name_selector_peek_section_entry (name_selector, "User")); gtk_widget_show (widget); - button = glade_xml_get_widget (glade_xml, "button-user"); - g_signal_connect (button, "clicked", G_CALLBACK (user_clicked), name_selector); + g_signal_connect (button_user, "clicked", G_CALLBACK (user_clicked), name_selector); gtk_box_pack_start (GTK_BOX (placeholder), widget, TRUE, TRUE, 6); *name_selector_ret = name_selector; @@ -92,7 +87,7 @@ setup_name_selector (GladeXML *glade_xml, ENameSelector **name_selector_ret) } static void -setup_folder_name_combo (GladeXML *glade_xml, const gchar *fname) +setup_folder_name_combo (GtkWidget *widget, const gchar *fname) { GtkComboBox *combo; const gchar *strings[] = { @@ -105,7 +100,7 @@ setup_folder_name_combo (GladeXML *glade_xml, const gchar *fname) }; gint i; - combo = GTK_COMBO_BOX (glade_xml_get_widget (glade_xml, "folder-name-combo")); + combo = GTK_COMBO_BOX (widget); g_assert (GTK_IS_COMBO_BOX_ENTRY (combo)); gtk_list_store_clear (GTK_LIST_STORE (gtk_combo_box_get_model (combo))); @@ -142,11 +137,8 @@ user_name_entry_changed_callback (GtkEditable *editable, gpointer data) } static void -setup_server_combobox (GladeXML *glade_xml, gchar *mail_account) +setup_server_combobox (GtkWidget *widget, gchar *mail_account) { - GtkWidget *widget; - - widget = glade_xml_get_widget (glade_xml, "server-combobox"); g_return_if_fail (GTK_IS_COMBO_BOX (widget)); gtk_list_store_clear (GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (widget)))); @@ -287,8 +279,15 @@ gboolean create_folder_subscription_dialog (ExchangeAccount *account, const gchar *fname) { ENameSelector *name_selector; - GladeXML *glade_xml; - GtkWidget *dialog, *ok_button; + GtkWidget *dialog; + GtkWidget *dialog_vbox1; + GtkWidget *table1; + GtkWidget *label1; + GtkWidget *label3; + GtkWidget *user_picker_placeholder; + GtkWidget *button_user; + GtkWidget *folder_name_combo; + GtkWidget *server_combobox; SubscriptionInfo *subscription_info; gint mode; @@ -299,27 +298,74 @@ create_folder_subscription_dialog (ExchangeAccount *account, const gchar *fname) subscription_info = g_new0 (SubscriptionInfo, 1); subscription_info->account = account; - glade_xml = glade_xml_new (CONNECTOR_GLADEDIR "/e-foreign-folder-dialog.glade", - NULL, NULL); - g_return_val_if_fail (glade_xml != NULL, FALSE); + dialog = gtk_dialog_new_with_buttons ( + _("Subscribe to Other User's Folder"), + NULL, + GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, + NULL); + + dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); + gtk_widget_show (dialog_vbox1); + + table1 = gtk_table_new (3, 2, FALSE); + gtk_widget_show (table1); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), table1, TRUE, TRUE, 2); + gtk_table_set_row_spacings (GTK_TABLE (table1), 3); + gtk_table_set_col_spacings (GTK_TABLE (table1), 3); + + label1 = gtk_label_new_with_mnemonic (_("_Account:")); + gtk_widget_show (label1); + gtk_table_attach (GTK_TABLE (table1), label1, 0, 1, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_justify (GTK_LABEL (label1), GTK_JUSTIFY_CENTER); + + label3 = gtk_label_new_with_mnemonic (_("_Folder Name:")); + gtk_widget_show (label3); + gtk_table_attach (GTK_TABLE (table1), label3, 0, 1, 2, 3, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_justify (GTK_LABEL (label3), GTK_JUSTIFY_CENTER); + + user_picker_placeholder = gtk_hbox_new (FALSE, 0); + gtk_widget_show (user_picker_placeholder); + gtk_table_attach (GTK_TABLE (table1), user_picker_placeholder, 1, 2, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + + button_user = gtk_button_new_with_mnemonic (_("_User:")); + gtk_widget_show (button_user); + gtk_table_attach (GTK_TABLE (table1), button_user, 0, 1, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + + folder_name_combo = gtk_combo_box_entry_new_text (); + gtk_widget_show (folder_name_combo); + gtk_table_attach (GTK_TABLE (table1), folder_name_combo, 1, 2, 2, 3, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + + server_combobox = gtk_combo_box_new_text (); + gtk_widget_show (server_combobox); + gtk_table_attach (GTK_TABLE (table1), server_combobox, 1, 2, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); - dialog = glade_xml_get_widget (glade_xml, "dialog"); - g_return_val_if_fail (dialog != NULL, FALSE); gtk_window_set_modal (GTK_WINDOW (dialog), FALSE); - gtk_window_set_title (GTK_WINDOW (dialog), _("Subscribe to Other User's Folder")); - subscription_info->name_selector_widget = setup_name_selector (glade_xml, &name_selector); + subscription_info->name_selector_widget = setup_name_selector (user_picker_placeholder, button_user, &name_selector); subscription_info->name_selector = name_selector; gtk_widget_grab_focus (subscription_info->name_selector_widget); - ok_button = glade_xml_get_widget (glade_xml, "button1"); - gtk_widget_set_sensitive (ok_button, FALSE); + gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE); g_signal_connect (subscription_info->name_selector_widget, "changed", G_CALLBACK (user_name_entry_changed_callback), dialog); - setup_server_combobox (glade_xml, account->account_name); - setup_folder_name_combo (glade_xml, fname); - subscription_info->folder_name_entry = gtk_bin_get_child (GTK_BIN (glade_xml_get_widget (glade_xml, "folder-name-combo"))); + setup_server_combobox (server_combobox, account->account_name); + setup_folder_name_combo (folder_name_combo, fname); + subscription_info->folder_name_entry = gtk_bin_get_child (GTK_BIN (folder_name_combo)); g_signal_connect (dialog, "response", G_CALLBACK (subscribe_to_folder), subscription_info); gtk_widget_show (dialog); diff --git a/plugins/exchange-operations/exchange-folder-subscription.h b/plugins/exchange-operations/exchange-folder-subscription.h index 15323cad09..942cc3a0e8 100644 --- a/plugins/exchange-operations/exchange-folder-subscription.h +++ b/plugins/exchange-operations/exchange-folder-subscription.h @@ -21,7 +21,14 @@ #ifndef __EXCHANGE_FOLDER_SUBSCRIPTION_H__ #define __EXCHANGE_FOLDER_SUBSCRIPTION_H__ +#include <glib.h> +#include <libedataserver/e-source.h> +#include <exchange-account.h> + gboolean create_folder_subscription_dialog (ExchangeAccount *account, const gchar *fname); +void call_folder_subscribe (const gchar *folder_name); +void call_folder_unsubscribe (const gchar *folder_type, const gchar *uri, ESource *source); + #endif diff --git a/plugins/exchange-operations/exchange-folder-tree.glade b/plugins/exchange-operations/exchange-folder-tree.glade deleted file mode 100644 index 487b2cee88..0000000000 --- a/plugins/exchange-operations/exchange-folder-tree.glade +++ /dev/null @@ -1,92 +0,0 @@ -<?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="folder_tree"> - <property name="visible">True</property> - <property name="title" translatable="yes">Exchange Folder Tree</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property> - <property name="modal">False</property> - <property name="default_width">250</property> - <property name="default_height">300</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="has_separator">True</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="dialog-vbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="dialog-action_area1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="okbutton1"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="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="GtkHBox" id="folder_tree_hbox"> - <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_ALWAYS</property> - <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="folder_treeview"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">True</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - </widget> - </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/exchange-operations/exchange-folder.c b/plugins/exchange-operations/exchange-folder.c index 7c9f1bff41..5fe43453e7 100644 --- a/plugins/exchange-operations/exchange-folder.c +++ b/plugins/exchange-operations/exchange-folder.c @@ -29,9 +29,6 @@ #include <gconf/gconf-client.h> #include <e-folder-exchange.h> #include <exchange-hierarchy.h> -#include <calendar/gui/e-cal-popup.h> -#include <mail/em-popup.h> -#include <mail/em-menu.h> #include <libedataserverui/e-source-selector.h> #include <e-util/e-error.h> #include <camel/camel-store.h> @@ -40,42 +37,70 @@ #include <mail/mail-ops.h> #include "exchange-operations.h" -#include "addressbook/gui/widgets/eab-popup.h" #include "exchange-folder-subscription.h" -void org_gnome_exchange_folder_subscription (EPlugin *ep, EMMenuTargetSelect *target, const gchar *fname); -void org_gnome_exchange_inbox_subscription (EPlugin *ep, EMMenuTargetSelect *target); -void org_gnome_exchange_addressbook_subscription (EPlugin *ep, EMMenuTargetSelect *target); -void org_gnome_exchange_calendar_subscription (EPlugin *ep, EMMenuTargetSelect *target); -void org_gnome_exchange_tasks_subscription (EPlugin *ep, EMMenuTargetSelect *target); -void org_gnome_exchange_check_subscribed (EPlugin *ep, ECalPopupTargetSource *target); -void org_gnome_exchange_folder_unsubscribe (EPopup *ep, EPopupItem *p, gpointer data); -void org_gnome_exchange_check_address_book_subscribed (EPlugin *ep, EABPopupTargetSource *target); -void org_gnome_exchange_folder_ab_unsubscribe (EPopup *ep, EPopupItem *p, gpointer data); -void org_gnome_exchange_check_inbox_subscribed (EPlugin *ep, EMPopupTargetFolder *target); -void org_gnome_exchange_folder_inbox_unsubscribe (EPopup *ep, EPopupItem *p, gpointer data); -void popup_free (EPopup *ep, GSList *items, gpointer data); -void popup_inbox_free (EPopup *ep, GSList *items, gpointer data); -void popup_ab_free (EPopup *ep, GSList *items, gpointer data); -static void exchange_get_folder (gchar *uri, CamelFolder *folder, gpointer data); - #define CONF_KEY_SELECTED_CAL_SOURCES "/apps/evolution/calendar/display/selected_calendars" -static EPopupItem popup_inbox_items[] = { - { E_POPUP_ITEM, (gchar *) "29.inbox_unsubscribe", (gchar *) N_("Unsubscribe Folder..."), org_gnome_exchange_folder_inbox_unsubscribe, NULL, (gchar *) "folder-new", 0, EM_POPUP_FOLDER_INFERIORS } -}; +static CamelFolderInfo * +ex_create_folder_info (CamelStore *store, gchar *name, gchar *uri, + gint unread_count, gint flags) +{ + CamelFolderInfo *info; + const gchar *path; + + path = strstr (uri, "://"); + if (!path) + return NULL; + path = strchr (path + 3, '/'); + if (!path) + return NULL; + + info = camel_folder_info_new (); + info->name = name; + info->uri = uri; + info->full_name = g_strdup (path + 1); + info->unread = unread_count; + + return info; +} -void -popup_inbox_free (EPopup *ep, GSList *items, gpointer data) +static void +exchange_get_folder (gchar *uri, CamelFolder *folder, gpointer data) { - g_slist_free (items); + CamelStore *store; + CamelException ex; + CamelFolderInfo *info; + gchar *name = NULL; + gchar *stored_name = NULL; + gchar *target_uri = (gchar *)data; + ExchangeAccount *account = NULL; + + account = exchange_operations_get_exchange_account (); + + if (!account) + return; + + /* Get the subscribed folder name. */ + name = target_uri + strlen ("exchange://") + strlen (account->account_filename); + stored_name = strrchr (name + 1, '/'); + + if (stored_name) + name[stored_name - name] = '\0'; + + camel_exception_init (&ex); + store = camel_folder_get_parent_store (folder); + + /* Construct the CamelFolderInfo */ + info = ex_create_folder_info (store, name, target_uri, -1, 0); + camel_object_trigger_event (CAMEL_OBJECT (store), + "folder_unsubscribed", info); + g_free (target_uri); } -void -org_gnome_exchange_folder_inbox_unsubscribe (EPopup *ep, EPopupItem *p, gpointer data) +static void +eex_folder_inbox_unsubscribe (const gchar *uri) { ExchangeAccount *account = NULL; - EMPopupTargetFolder *target = data; gchar *path = NULL; gchar *stored_path = NULL; const gchar *inbox_uri = NULL; @@ -89,8 +114,8 @@ org_gnome_exchange_folder_inbox_unsubscribe (EPopup *ep, EPopupItem *p, gpointer if (!account) return; - target_uri = g_strdup (target->uri); - path = target->uri + strlen ("exchange://") + strlen (account->account_filename); + target_uri = g_strdup (uri); + path = g_strdup (uri + strlen ("exchange://") + strlen (account->account_filename)); /* User will be able to unsubscribe by doing a right click on any one of this two-<other user's>Inbox or the <other user's folder> tree. @@ -101,6 +126,8 @@ org_gnome_exchange_folder_inbox_unsubscribe (EPopup *ep, EPopupItem *p, gpointer path[stored_path - path] = '\0'; result = exchange_account_remove_shared_folder (account, path); + g_free (path); + switch (result) { case EXCHANGE_ACCOUNT_FOLDER_OK: break; @@ -140,199 +167,10 @@ org_gnome_exchange_folder_inbox_unsubscribe (EPopup *ep, EPopupItem *p, gpointer /* To get the CamelStore/Folder */ mail_get_folder (inbox_physical_uri, 0, exchange_get_folder, target_uri, mail_msg_unordered_push); - -} - -static CamelFolderInfo * -ex_create_folder_info (CamelStore *store, gchar *name, gchar *uri, - gint unread_count, gint flags) -{ - CamelFolderInfo *info; - const gchar *path; - - path = strstr (uri, "://"); - if (!path) - return NULL; - path = strchr (path + 3, '/'); - if (!path) - return NULL; - - info = camel_folder_info_new (); - info->name = name; - info->uri = uri; - info->full_name = g_strdup (path + 1); - info->unread = unread_count; - - return info; -} - -static void -exchange_get_folder (gchar *uri, CamelFolder *folder, gpointer data) -{ - CamelStore *store; - CamelException ex; - CamelFolderInfo *info; - gchar *name = NULL; - gchar *stored_name = NULL; - gchar *target_uri = (gchar *)data; - ExchangeAccount *account = NULL; - - account = exchange_operations_get_exchange_account (); - - if (!account) - return; - - /* Get the subscribed folder name. */ - name = target_uri + strlen ("exchange://") + strlen (account->account_filename); - stored_name = strrchr (name + 1, '/'); - - if (stored_name) - name[stored_name - name] = '\0'; - - camel_exception_init (&ex); - store = camel_folder_get_parent_store (folder); - - /* Construct the CamelFolderInfo */ - info = ex_create_folder_info (store, name, target_uri, -1, 0); - camel_object_trigger_event (CAMEL_OBJECT (store), - "folder_unsubscribed", info); - g_free (target_uri); -} - -void -org_gnome_exchange_check_inbox_subscribed (EPlugin *ep, EMPopupTargetFolder *target) -{ - GSList *menus = NULL; - gint i = 0; - ExchangeAccount *account = NULL; - gchar *path = NULL; - gchar *sub_folder = NULL; - - if (!g_strrstr (target->uri, "exchange://")) - return; - - account = exchange_operations_get_exchange_account (); - if (!account) - return; - - path = g_strdup (target->uri + strlen ("exchange://") + strlen (account->account_filename)); - sub_folder = strchr (path, '@'); - - g_free (path); - - if (!sub_folder || !g_strrstr(sub_folder, "/")) - return; - - for (i = 0; i < sizeof (popup_inbox_items) / sizeof (popup_inbox_items[0]); i++) - menus = g_slist_prepend (menus, &popup_inbox_items[i]); - - e_popup_add_items (target->target.popup, menus, NULL, popup_inbox_free, target); -} - -static EPopupItem popup_items[] = { - { E_POPUP_ITEM, (gchar *) "29.calendar_unsubscribe", (gchar *) N_("Unsubscribe Folder..."), org_gnome_exchange_folder_unsubscribe, NULL, (gchar *) "folder-new", 0, EM_POPUP_FOLDER_INFERIORS } -}; - -void -popup_free (EPopup *ep, GSList *items, gpointer data) -{ - g_slist_free (items); -} - -static EPopupItem popup_ab_items[] = { - { E_POPUP_ITEM, (gchar *) "29.address_book_unsubscribe", (gchar *) N_("Unsubscribe Folder..."), org_gnome_exchange_folder_ab_unsubscribe, NULL, (gchar *) "folder-new", 0, EM_POPUP_FOLDER_INFERIORS } -}; - -void -popup_ab_free (EPopup *ep, GSList *items, gpointer data) -{ - g_slist_free (items); -} - -void -org_gnome_exchange_check_address_book_subscribed (EPlugin *ep, EABPopupTargetSource *target) -{ - GSList *menus = NULL; - gint i = 0; - ESource *source = NULL; - gchar *uri = NULL; - gchar *path = NULL; - gchar *sub_folder = NULL; - const gchar *base_uri; - ExchangeAccount *account = NULL; - ESourceGroup *group; - - account = exchange_operations_get_exchange_account (); - - if (!account) - return; - - source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); - group = e_source_peek_group (source); - base_uri = e_source_group_peek_base_uri (group); - if (!base_uri || strcmp (base_uri, "exchange://")) - return; - - uri = e_source_get_uri (source); - path = g_strdup (uri + strlen ("exchange://") + strlen (account->account_filename) + strlen ("/;")); - g_free (uri); - sub_folder = strchr (path, '@'); - - if (!sub_folder) { - g_free (path); - return; - } - - for (i = 0; i < sizeof (popup_ab_items) / sizeof (popup_ab_items[0]); i++) - menus = g_slist_prepend (menus, &popup_ab_items[i]); - - e_popup_add_items (target->target.popup, menus, NULL, popup_ab_free, target); - g_free (path); - -} - -void -org_gnome_exchange_check_subscribed (EPlugin *ep, ECalPopupTargetSource *target) -{ - GSList *menus = NULL; - gint i = 0; - ESource *source = NULL; - gchar *ruri = NULL; - gchar *path = NULL; - gchar *sub_folder = NULL; - const gchar *base_uri; - ExchangeAccount *account = NULL; - ESourceGroup *group; - - account = exchange_operations_get_exchange_account (); - - if (!account) - return; - - source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); - group = e_source_peek_group (source); - base_uri = e_source_group_peek_base_uri (group); - if (!base_uri || strcmp (base_uri, "exchange://")) - return; - - ruri = (gchar *) e_source_peek_relative_uri (source); - path = g_strdup (ruri + strlen (account->account_filename) + strlen ("/;")); - sub_folder = strchr (path, '@'); - - if (!sub_folder) { - g_free (path); - return; - } - - for (i = 0; i < sizeof (popup_items) / sizeof (popup_items[0]); i++) - menus = g_slist_prepend (menus, &popup_items[i]); - - e_popup_add_items (target->target.popup, menus, NULL, popup_free, target); - g_free (path); } static void -unsubscribe_dialog_ab_response (GtkDialog *dialog, gint response, gpointer data) +unsubscribe_dialog_ab_response (GtkDialog *dialog, gint response, ESource *source) { if (response == GTK_RESPONSE_OK) { @@ -341,15 +179,14 @@ unsubscribe_dialog_ab_response (GtkDialog *dialog, gint response, gpointer data) gchar *uri = NULL; const gchar *source_uid = NULL; ESourceGroup *source_group = NULL; - ESource *source = NULL; - EABPopupTargetSource *target = data; + + g_return_if_fail (source != NULL); account = exchange_operations_get_exchange_account (); if (!account) return; - source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); uri = e_source_get_uri (source); path = g_strdup (uri + strlen ("exchange://") + strlen (account->account_filename)); source_uid = e_source_peek_uid (source); @@ -368,7 +205,7 @@ unsubscribe_dialog_ab_response (GtkDialog *dialog, gint response, gpointer data) } static void -unsubscribe_dialog_response (GtkDialog *dialog, gint response, gpointer data) +unsubscribe_dialog_response (GtkDialog *dialog, gint response, ESource *source) { if (response == GTK_RESPONSE_OK) { @@ -379,8 +216,8 @@ unsubscribe_dialog_response (GtkDialog *dialog, gint response, gpointer data) const gchar *source_uid = NULL; GConfClient *client; ESourceGroup *source_group = NULL; - ESource *source = NULL; - ECalPopupTargetSource *target = data; + + g_return_if_fail (source != NULL); client = gconf_client_get_default (); @@ -389,7 +226,6 @@ unsubscribe_dialog_response (GtkDialog *dialog, gint response, gpointer data) if (!account) return; - source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); ruri = (gchar *) e_source_peek_relative_uri (source); source_uid = e_source_peek_uid (source); @@ -426,12 +262,10 @@ unsubscribe_dialog_response (GtkDialog *dialog, gint response, gpointer data) gtk_widget_destroy (GTK_WIDGET (dialog)); } -void -org_gnome_exchange_folder_ab_unsubscribe (EPopup *ep, EPopupItem *p, gpointer data) +static void +eex_addresssbook_unsubscribe (ESource *source) { GtkWidget *dialog = NULL; - EABPopupTargetSource *target = data; - ESource *source = NULL; ExchangeAccount *account = NULL; gchar *title = NULL; gchar *displayed_folder_name = NULL; @@ -439,13 +273,13 @@ org_gnome_exchange_folder_ab_unsubscribe (EPopup *ep, EPopupItem *p, gpointer da gint mode; ExchangeConfigListenerStatus status; - account = exchange_operations_get_exchange_account (); + g_return_if_fail (source != NULL); + account = exchange_operations_get_exchange_account (); if (!account) return; status = exchange_is_offline (&mode); - if (status != CONFIG_LISTENER_STATUS_OK) { g_warning ("Config listener not found"); return; @@ -454,7 +288,6 @@ org_gnome_exchange_folder_ab_unsubscribe (EPopup *ep, EPopupItem *p, gpointer da return; } - source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); displayed_folder_name = (gchar *) e_source_peek_name (source); dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, @@ -479,14 +312,13 @@ org_gnome_exchange_folder_ab_unsubscribe (EPopup *ep, EPopupItem *p, gpointer da g_free (displayed_folder_name); gtk_widget_show (dialog); - unsubscribe_dialog_ab_response (GTK_DIALOG (dialog), response, data); + unsubscribe_dialog_ab_response (GTK_DIALOG (dialog), response, source); } -void -org_gnome_exchange_folder_unsubscribe (EPopup *ep, EPopupItem *p, gpointer data) + +static void +eex_calendar_unsubscribe (ESource *source) { GtkWidget *dialog = NULL; - ECalPopupTargetSource *target = data; - ESource *source = NULL; ExchangeAccount *account = NULL; gchar *title = NULL; const gchar *displayed_folder_name; @@ -494,8 +326,9 @@ org_gnome_exchange_folder_unsubscribe (EPopup *ep, EPopupItem *p, gpointer data) gint mode; ExchangeConfigListenerStatus status; - account = exchange_operations_get_exchange_account (); + g_return_if_fail (source != NULL); + account = exchange_operations_get_exchange_account (); if (!account) return; @@ -509,7 +342,6 @@ org_gnome_exchange_folder_unsubscribe (EPopup *ep, EPopupItem *p, gpointer data) return; } - source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); displayed_folder_name = e_source_peek_name (source); dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, @@ -533,28 +365,27 @@ org_gnome_exchange_folder_unsubscribe (EPopup *ep, EPopupItem *p, gpointer data) g_free (title); gtk_widget_show (dialog); - unsubscribe_dialog_response (GTK_DIALOG (dialog), response, data); + unsubscribe_dialog_response (GTK_DIALOG (dialog), response, source); } void -org_gnome_exchange_folder_subscription (EPlugin *ep, EMMenuTargetSelect *target, const gchar *fname) +call_folder_subscribe (const gchar *folder_name) { ExchangeAccount *account = NULL; gint mode; ExchangeConfigListenerStatus status; - account = exchange_operations_get_exchange_account (); + g_return_if_fail (folder_name != NULL); + account = exchange_operations_get_exchange_account (); if (!account) return; status = exchange_is_offline (&mode); - if (status != CONFIG_LISTENER_STATUS_OK) { g_warning ("Config listener not found"); return; - } - else if (mode == OFFLINE_MODE) { + } else if (mode == OFFLINE_MODE) { /* Translators: this error code can be used for any operation * (like subscribing to other user's folders, unsubscribing * etc,) which can not be performed in offline mode @@ -563,33 +394,27 @@ org_gnome_exchange_folder_subscription (EPlugin *ep, EMMenuTargetSelect *target, return; } - create_folder_subscription_dialog (account, fname); + create_folder_subscription_dialog (account, folder_name); } void -org_gnome_exchange_calendar_subscription (EPlugin *ep, EMMenuTargetSelect *target) +call_folder_unsubscribe (const gchar *folder_type, const gchar *uri, ESource *source) { - const gchar *folder_name = N_("Calendar"); - org_gnome_exchange_folder_subscription (ep, target, folder_name); -} - -void -org_gnome_exchange_addressbook_subscription (EPlugin *ep, EMMenuTargetSelect *target) -{ - const gchar *folder_name = N_("Contacts"); - org_gnome_exchange_folder_subscription (ep, target, folder_name); -} - -void -org_gnome_exchange_tasks_subscription (EPlugin *ep, EMMenuTargetSelect *target) -{ - const gchar *folder_name = N_("Tasks"); - org_gnome_exchange_folder_subscription (ep, target, folder_name); -} - -void -org_gnome_exchange_inbox_subscription (EPlugin *ep, EMMenuTargetSelect *target) -{ - const gchar *folder_name = N_("Inbox"); - org_gnome_exchange_folder_subscription (ep, target, folder_name); + g_return_if_fail (folder_type != NULL); + g_return_if_fail (uri != NULL); + + if (g_str_equal (folder_type, N_("Inbox"))) { + eex_folder_inbox_unsubscribe (uri); + } else if (g_str_equal (folder_type, N_("Calendar"))) { + g_return_if_fail (source != NULL); + eex_calendar_unsubscribe (source); + } else if (g_str_equal (folder_type, N_("Tasks"))) { + g_return_if_fail (source != NULL); + eex_calendar_unsubscribe (source); + } else if (g_str_equal (folder_type, N_("Contacts"))) { + g_return_if_fail (source != NULL); + eex_addresssbook_unsubscribe (source); + } else { + g_return_if_reached (); + } } diff --git a/plugins/exchange-operations/exchange-oof.glade b/plugins/exchange-operations/exchange-oof.glade deleted file mode 100644 index 8e8c5617a4..0000000000 --- a/plugins/exchange-operations/exchange-oof.glade +++ /dev/null @@ -1,530 +0,0 @@ -<?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="oof_dialog"> - <property name="border_width">6</property> - <property name="title" translatable="yes">Out of Office Assistant</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property> - <property name="modal">False</property> - <property name="resizable">False</property> - <property name="destroy_with_parent">False</property> - <property name="has_separator">True</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="dialog-vbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="dialog-action_area1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="button3"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="response_id">-9</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">0</property> - <property name="yscale">0</property> - - <child> - <widget class="GtkHBox" id="hbox6"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image7"> - <property name="visible">True</property> - <property name="stock">gtk-no</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="label10"> - <property name="visible">True</property> - <property name="label" translatable="yes">No, Don't Change Status</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> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button4"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="response_id">-8</property> - - <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> - - <child> - <widget class="GtkHBox" id="hbox7"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image8"> - <property name="visible">True</property> - <property name="stock">gtk-yes</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="label11"> - <property name="visible">True</property> - <property name="label" translatable="yes">Yes, Change Status</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> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </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="GtkHBox" id="hbox9"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="stock">gtk-dialog-question</property> - <property name="icon_size">6</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">True</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label7"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Currently, your status is "Out of the Office". </b> - -Would you like to change your status to "In the Office"? </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</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">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> - -<widget class="GtkDialog" id="Out of Office Assistant"> - <property name="visible">True</property> - <property name="title" translatable="yes">Out of Office Assistant</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</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="cancelbutton1"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="response_id">-6</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="okbutton1"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="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="oof_vbox"> - <property name="border_width">6</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">6</property> - - <child> - <widget class="GtkImage" id="image2"> - <property name="visible">True</property> - <property name="stock">gtk-dialog-info</property> - <property name="icon_size">5</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="label6"> - <property name="visible">True</property> - <property name="label" translatable="yes"><small>The message specified below will be automatically sent to each person who sends -mail to you while you are out of the office.</small></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> - </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">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkTable" id="table1"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> - <property name="homogeneous">False</property> - <property name="row_spacing">6</property> - <property name="column_spacing">6</property> - - <child> - <widget class="GtkLabel" id="label3"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Status:</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</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">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="GtkRadioButton" id="oof_no_radio"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">I am currently in the office</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </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="GtkRadioButton" id="oof_yes_radio"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">I am currently out of the office</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <property name="group">oof_no_radio</property> - </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="GtkLabel" id="label4"> - <property name="visible">True</property> - <property name="label" translatable="yes"></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> - </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> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFrame" id="frame1"> - <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="vbox2"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</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_OUT</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTextView" id="oof_message"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="justification">GTK_JUSTIFY_LEFT</property> - <property name="wrap_mode">GTK_WRAP_WORD</property> - <property name="cursor_visible">True</property> - <property name="pixels_above_lines">0</property> - <property name="pixels_below_lines">0</property> - <property name="pixels_inside_wrap">0</property> - <property name="left_margin">0</property> - <property name="right_margin">0</property> - <property name="indent">0</property> - <property name="text" translatable="yes"></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="label1"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Out of Office Message:</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> - </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> - </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/exchange-operations/exchange-operations.h b/plugins/exchange-operations/exchange-operations.h index d735ff8ce8..60c2f200fc 100644 --- a/plugins/exchange-operations/exchange-operations.h +++ b/plugins/exchange-operations/exchange-operations.h @@ -35,7 +35,7 @@ G_BEGIN_DECLS extern ExchangeConfigListener *exchange_global_config_listener; -gint e_plugin_lib_enable (EPluginLib *eplib, gint enable); +gint e_plugin_lib_enable (EPlugin *eplib, gint enable); ExchangeAccount *exchange_operations_get_exchange_account (void); ExchangeConfigListenerStatus exchange_is_offline (gint *mode); diff --git a/plugins/exchange-operations/exchange-passwd-expiry.glade b/plugins/exchange-operations/exchange-passwd-expiry.glade deleted file mode 100644 index 14c430f65d..0000000000 --- a/plugins/exchange-operations/exchange-passwd-expiry.glade +++ /dev/null @@ -1,91 +0,0 @@ -<?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="passwd_exp_dialog"> - <property name="visible">True</property> - <property name="title" translatable="yes">Password Expiry Warning...</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="has_separator">True</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="dialog-vbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="dialog-action_area1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="change_passwd_button"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="can_focus">True</property> - <property name="has_focus">True</property> - <property name="label" translatable="yes">_Change Password</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="response_id">0</property> - <accelerator key="C" modifiers="GDK_MOD1_MASK" signal="clicked"/> - </widget> - </child> - - <child> - <widget class="GtkButton" id="ok_button"> - <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="response_id">-5</property> - <accessibility> - <atkproperty name="AtkObject::accessible_name" translatable="no">ok_button</atkproperty> - </accessibility> - <accelerator key="O" modifiers="GDK_MOD1_MASK" signal="clicked"/> - </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="GtkLabel" id="passwd_exp_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">Your password will expire in 7 days...</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</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">20</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> -</widget> - -</glade-interface> diff --git a/plugins/exchange-operations/exchange-permissions-dialog.c b/plugins/exchange-operations/exchange-permissions-dialog.c index d8182a6fe1..20af66ed91 100644 --- a/plugins/exchange-operations/exchange-permissions-dialog.c +++ b/plugins/exchange-operations/exchange-permissions-dialog.c @@ -41,7 +41,6 @@ #include <e-util/e-dialog-utils.h> #include <e-util/e-error.h> -#include <glade/glade-xml.h> struct _ExchangePermissionsDialogPrivate { ExchangeAccount *account; @@ -122,8 +121,7 @@ init (GObject *object) E2K_MAKE_TYPE (exchange_permissions_dialog, ExchangePermissionsDialog, class_init, init, PARENT_TYPE) -static void get_widgets (ExchangePermissionsDialog *dialog, - GladeXML *xml); +static GtkWidget *create_permissions_vbox (ExchangePermissionsDialog *dialog); static void setup_user_list (ExchangePermissionsDialog *dialog); static void display_permissions (ExchangePermissionsDialog *dialog); static void dialog_response (ExchangePermissionsDialog *dialog, @@ -152,7 +150,6 @@ exchange_permissions_dialog_new (ExchangeAccount *account, const gchar *base_uri, *folder_uri, *folder_path; E2kContext *ctx; ExchangeHierarchy *hier; - GladeXML *xml; GtkWidget *box; gchar *title; E2kHTTPStatus status; @@ -165,10 +162,6 @@ exchange_permissions_dialog_new (ExchangeAccount *account, ctx = exchange_account_get_context (account); g_return_if_fail (ctx); - xml = glade_xml_new ( - CONNECTOR_GLADEDIR "/exchange-permissions-dialog.glade", - "permissions_vbox", PACKAGE); - g_return_if_fail (xml != NULL); /* Create the dialog */ dialog = g_object_new (EXCHANGE_TYPE_PERMISSIONS_DIALOG, NULL); @@ -188,16 +181,9 @@ exchange_permissions_dialog_new (ExchangeAccount *account, dialog->priv->changed = FALSE; - /* Put the widgets from the glade file into it */ - box = glade_xml_get_widget (xml, "permissions_vbox"); - g_object_ref (box); - gtk_widget_unparent (box); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), + box = create_permissions_vbox (dialog); + gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), box, TRUE, TRUE, 0); - g_object_unref (box); - - get_widgets (dialog, xml); - g_object_unref (xml); dialog->priv->account = account; g_object_ref (account); @@ -684,13 +670,247 @@ display_permissions (ExchangePermissionsDialog *dialog) dialog->priv->frozen = FALSE; } -static void -get_widgets (ExchangePermissionsDialog *dialog, GladeXML *xml) +static GtkWidget * +exchange_permissions_role_optionmenu_new (void) +{ + GtkWidget *menu; + const gchar **roles; + gint role; + + menu = gtk_combo_box_new_text (); + roles = g_new (const gchar *, E2K_PERMISSIONS_ROLE_NUM_ROLES + 1); + for (role = 0; role < E2K_PERMISSIONS_ROLE_NUM_ROLES; role++) { + roles[role] = e2k_permissions_role_get_name (role); + gtk_combo_box_append_text (GTK_COMBO_BOX (menu), roles[role]); + } + + roles[role] = NULL; + + g_free (roles); + + gtk_widget_show (menu); + return menu; +} + +static GtkWidget * +create_permissions_vbox (ExchangePermissionsDialog *dialog) { - GtkWidget *button; + GtkWidget *permissions_vbox; + GtkWidget *hbox1; + GtkWidget *scrolledwindow1; + GtkWidget *list_view; + GtkWidget *vbuttonbox1; + GtkWidget *add_button; + GtkWidget *remove_button; + GtkWidget *table2; + GtkWidget *label6; + GtkWidget *label7; + GtkWidget *label3; + GtkWidget *hbox3; + GtkWidget *label4; + GtkWidget *role_optionmenu; + GtkWidget *hbox2; + GtkWidget *vbox6; + GtkWidget *vbox8; + GtkWidget *create_items_check; + GtkWidget *read_items_check; + GtkWidget *create_subfolders_check; + GtkWidget *vbox9; + GtkWidget *edit_none_radio; + GSList *edit_none_radio_group = NULL; + GtkWidget *edit_own_radio; + GtkWidget *edit_all_radio; + GtkWidget *vbox7; + GtkWidget *vbox10; + GtkWidget *folder_owner_check; + GtkWidget *folder_contact_check; + GtkWidget *folder_visible_check; + GtkWidget *vbox11; + GtkWidget *delete_none_radio; + GSList *delete_none_radio_group = NULL; + GtkWidget *delete_own_radio; + GtkWidget *delete_all_radio; + gchar *tmp_str; GtkTreeViewColumn *column; -#define GET_WIDGET(name, type) dialog->priv->name = type (glade_xml_get_widget (xml, #name)) + permissions_vbox = gtk_vbox_new (FALSE, 0); + gtk_widget_show (permissions_vbox); + gtk_container_set_border_width (GTK_CONTAINER (permissions_vbox), 6); + + hbox1 = gtk_hbox_new (FALSE, 6); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (permissions_vbox), hbox1, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox1), 6); + + scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow1); + gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow1, TRUE, TRUE, 0); + GTK_WIDGET_UNSET_FLAGS (scrolledwindow1, GTK_CAN_FOCUS); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN); + + list_view = gtk_tree_view_new (); + gtk_widget_show (list_view); + gtk_container_add (GTK_CONTAINER (scrolledwindow1), list_view); + + vbuttonbox1 = gtk_vbutton_box_new (); + gtk_widget_show (vbuttonbox1); + gtk_box_pack_start (GTK_BOX (hbox1), vbuttonbox1, FALSE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbuttonbox1), 4); + gtk_button_box_set_layout (GTK_BUTTON_BOX (vbuttonbox1), GTK_BUTTONBOX_SPREAD); + gtk_box_set_spacing (GTK_BOX (vbuttonbox1), 10); + + add_button = gtk_button_new_from_stock ("gtk-add"); + gtk_widget_show (add_button); + gtk_container_add (GTK_CONTAINER (vbuttonbox1), add_button); + GTK_WIDGET_SET_FLAGS (add_button, GTK_CAN_DEFAULT); + + remove_button = gtk_button_new_from_stock ("gtk-remove"); + gtk_widget_show (remove_button); + gtk_container_add (GTK_CONTAINER (vbuttonbox1), remove_button); + GTK_WIDGET_SET_FLAGS (remove_button, GTK_CAN_DEFAULT); + + table2 = gtk_table_new (3, 2, FALSE); + gtk_widget_show (table2); + gtk_box_pack_start (GTK_BOX (permissions_vbox), table2, FALSE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (table2), 6); + gtk_table_set_row_spacings (GTK_TABLE (table2), 6); + + label6 = gtk_label_new (" "); + gtk_widget_show (label6); + gtk_table_attach (GTK_TABLE (table2), label6, 0, 1, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5); + + label7 = gtk_label_new (" "); + gtk_widget_show (label7); + gtk_table_attach (GTK_TABLE (table2), label7, 0, 1, 2, 3, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (label7), 0, 0.5); + + tmp_str = g_strconcat ("<b>", _("Permissions"), "</b>", NULL); + label3 = gtk_label_new (tmp_str); + g_free (tmp_str); + gtk_widget_show (label3); + gtk_table_attach (GTK_TABLE (table2), label3, 0, 2, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_use_markup (GTK_LABEL (label3), TRUE); + gtk_misc_set_alignment (GTK_MISC (label3), 0, 0.5); + + hbox3 = gtk_hbox_new (FALSE, 6); + gtk_widget_show (hbox3); + gtk_table_attach (GTK_TABLE (table2), hbox3, 1, 2, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox3), 6); + + label4 = gtk_label_new (_("Role: ")); + gtk_widget_show (label4); + gtk_box_pack_start (GTK_BOX (hbox3), label4, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label4), GTK_JUSTIFY_CENTER); + + role_optionmenu = exchange_permissions_role_optionmenu_new (); + gtk_widget_show (role_optionmenu); + gtk_box_pack_start (GTK_BOX (hbox3), role_optionmenu, TRUE, TRUE, 0); + GTK_WIDGET_UNSET_FLAGS (role_optionmenu, GTK_CAN_FOCUS); + GTK_WIDGET_UNSET_FLAGS (role_optionmenu, GTK_CAN_DEFAULT); + + hbox2 = gtk_hbox_new (TRUE, 6); + gtk_widget_show (hbox2); + gtk_table_attach (GTK_TABLE (table2), hbox2, 1, 2, 2, 3, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox2), 6); + + vbox6 = gtk_vbox_new (FALSE, 12); + gtk_widget_show (vbox6); + gtk_box_pack_start (GTK_BOX (hbox2), vbox6, TRUE, TRUE, 0); + + vbox8 = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox8); + gtk_box_pack_start (GTK_BOX (vbox6), vbox8, TRUE, TRUE, 0); + + create_items_check = gtk_check_button_new_with_mnemonic (_("Create items")); + gtk_widget_show (create_items_check); + gtk_box_pack_start (GTK_BOX (vbox8), create_items_check, FALSE, FALSE, 0); + + read_items_check = gtk_check_button_new_with_mnemonic (_("Read items")); + gtk_widget_show (read_items_check); + gtk_box_pack_start (GTK_BOX (vbox8), read_items_check, FALSE, FALSE, 0); + + create_subfolders_check = gtk_check_button_new_with_mnemonic (_("Create subfolders")); + gtk_widget_show (create_subfolders_check); + gtk_box_pack_start (GTK_BOX (vbox8), create_subfolders_check, FALSE, FALSE, 0); + + vbox9 = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox9); + gtk_box_pack_start (GTK_BOX (vbox6), vbox9, TRUE, TRUE, 0); + + edit_none_radio = gtk_radio_button_new_with_mnemonic (NULL, _("Cannot Edit")); + gtk_widget_show (edit_none_radio); + gtk_box_pack_start (GTK_BOX (vbox9), edit_none_radio, FALSE, FALSE, 0); + gtk_radio_button_set_group (GTK_RADIO_BUTTON (edit_none_radio), edit_none_radio_group); + edit_none_radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (edit_none_radio)); + + edit_own_radio = gtk_radio_button_new_with_mnemonic (NULL, _("Edit Own Items")); + gtk_widget_show (edit_own_radio); + gtk_box_pack_start (GTK_BOX (vbox9), edit_own_radio, FALSE, FALSE, 0); + gtk_radio_button_set_group (GTK_RADIO_BUTTON (edit_own_radio), edit_none_radio_group); + edit_none_radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (edit_own_radio)); + + edit_all_radio = gtk_radio_button_new_with_mnemonic (NULL, _("Edit Any Items")); + gtk_widget_show (edit_all_radio); + gtk_box_pack_start (GTK_BOX (vbox9), edit_all_radio, FALSE, FALSE, 0); + gtk_radio_button_set_group (GTK_RADIO_BUTTON (edit_all_radio), edit_none_radio_group); + edit_none_radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (edit_all_radio)); + + vbox7 = gtk_vbox_new (FALSE, 12); + gtk_widget_show (vbox7); + gtk_box_pack_start (GTK_BOX (hbox2), vbox7, TRUE, TRUE, 0); + + vbox10 = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox10); + gtk_box_pack_start (GTK_BOX (vbox7), vbox10, TRUE, TRUE, 0); + + folder_owner_check = gtk_check_button_new_with_mnemonic (_("Folder owner")); + gtk_widget_show (folder_owner_check); + gtk_box_pack_start (GTK_BOX (vbox10), folder_owner_check, FALSE, FALSE, 0); + + folder_contact_check = gtk_check_button_new_with_mnemonic (_("Folder contact")); + gtk_widget_show (folder_contact_check); + gtk_box_pack_start (GTK_BOX (vbox10), folder_contact_check, FALSE, FALSE, 0); + + folder_visible_check = gtk_check_button_new_with_mnemonic (_("Folder visible")); + gtk_widget_show (folder_visible_check); + gtk_box_pack_start (GTK_BOX (vbox10), folder_visible_check, FALSE, FALSE, 0); + + vbox11 = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox11); + gtk_box_pack_start (GTK_BOX (vbox7), vbox11, TRUE, TRUE, 0); + + delete_none_radio = gtk_radio_button_new_with_mnemonic (NULL, _("Cannot Delete")); + gtk_widget_show (delete_none_radio); + gtk_box_pack_start (GTK_BOX (vbox11), delete_none_radio, FALSE, FALSE, 0); + gtk_radio_button_set_group (GTK_RADIO_BUTTON (delete_none_radio), delete_none_radio_group); + delete_none_radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (delete_none_radio)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (delete_none_radio), TRUE); + + delete_own_radio = gtk_radio_button_new_with_mnemonic (NULL, _("Delete Own Items")); + gtk_widget_show (delete_own_radio); + gtk_box_pack_start (GTK_BOX (vbox11), delete_own_radio, FALSE, FALSE, 0); + gtk_radio_button_set_group (GTK_RADIO_BUTTON (delete_own_radio), delete_none_radio_group); + delete_none_radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (delete_own_radio)); + + delete_all_radio = gtk_radio_button_new_with_mnemonic (NULL, _("Delete Any Items")); + gtk_widget_show (delete_all_radio); + gtk_box_pack_start (GTK_BOX (vbox11), delete_all_radio, FALSE, FALSE, 0); + gtk_radio_button_set_group (GTK_RADIO_BUTTON (delete_all_radio), delete_none_radio_group); + delete_none_radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (delete_all_radio)); + +#define GET_WIDGET(name, type) dialog->priv->name = type (name) GET_WIDGET (list_view, GTK_TREE_VIEW); column = gtk_tree_view_column_new_with_attributes ( @@ -714,11 +934,9 @@ get_widgets (ExchangePermissionsDialog *dialog, GladeXML *xml) gtk_tree_view_set_model (dialog->priv->list_view, GTK_TREE_MODEL (dialog->priv->list_store)); - button = glade_xml_get_widget (xml, "add_button"); - g_signal_connect (button, "clicked", + g_signal_connect (add_button, "clicked", G_CALLBACK (add_clicked), dialog); - button = glade_xml_get_widget (xml, "remove_button"); - g_signal_connect (button, "clicked", + g_signal_connect (remove_button, "clicked", G_CALLBACK (remove_clicked), dialog); GET_WIDGET (role_optionmenu, GTK_COMBO_BOX); @@ -761,28 +979,6 @@ get_widgets (ExchangePermissionsDialog *dialog, GladeXML *xml) "toggled", G_CALLBACK (rv_toggle), dialog); g_signal_connect (dialog->priv->read_items_check, "toggled", G_CALLBACK (rv_toggle), dialog); -} - -GtkWidget *exchange_permissions_role_optionmenu_new (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2); -GtkWidget * -exchange_permissions_role_optionmenu_new (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2) -{ - GtkWidget *menu; - const gchar **roles; - gint role; - - menu = gtk_combo_box_new_text (); - roles = g_new (const gchar *, E2K_PERMISSIONS_ROLE_NUM_ROLES + 1); - for (role = 0; role < E2K_PERMISSIONS_ROLE_NUM_ROLES; role++) { - roles[role] = e2k_permissions_role_get_name (role); - gtk_combo_box_append_text (GTK_COMBO_BOX (menu), roles[role]); - } - - roles[role] = NULL; - - g_free (roles); - - gtk_widget_show (menu); - return menu; + return permissions_vbox; } diff --git a/plugins/exchange-operations/exchange-permissions-dialog.glade b/plugins/exchange-operations/exchange-permissions-dialog.glade deleted file mode 100644 index 91404ffb1d..0000000000 --- a/plugins/exchange-operations/exchange-permissions-dialog.glade +++ /dev/null @@ -1,578 +0,0 @@ -<?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="GtkWindow" id="window1"> - <property name="visible">True</property> - <property name="title" translatable="no">window1</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_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - - <child> - <widget class="GtkVBox" id="permissions_vbox"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox1"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow1"> - <property name="visible">True</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="list_view"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">True</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVButtonBox" id="vbuttonbox1"> - <property name="border_width">4</property> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_SPREAD</property> - <property name="spacing">10</property> - - <child> - <widget class="GtkButton" id="add_button"> - <property name="visible">True</property> - <property name="can_default">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> - </child> - - <child> - <widget class="GtkButton" id="remove_button"> - <property name="visible">True</property> - <property name="can_default">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> - </child> - </widget> - <packing> - <property name="padding">0</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> - - <child> - <widget class="GtkTable" id="table2"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="n_rows">3</property> - <property name="n_columns">2</property> - <property name="homogeneous">False</property> - <property name="row_spacing">6</property> - <property name="column_spacing">0</property> - - <child> - <widget class="GtkLabel" id="label6"> - <property name="visible">True</property> - <property name="label" translatable="no"> </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> - </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="label7"> - <property name="visible">True</property> - <property name="label" translatable="no"> </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> - </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="label3"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Permissions</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</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="left_attach">0</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="GtkHBox" id="hbox3"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label4"> - <property name="visible">True</property> - <property name="label" translatable="yes">Role: </property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</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> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="Custom" id="role_optionmenu"> - <property name="visible">True</property> - <property name="creation_function">exchange_permissions_role_optionmenu_new</property> - <property name="int1">0</property> - <property name="int2">0</property> - <property name="last_modification_time">Tue, 06 Aug 2002 20:48:43 GMT</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options">fill</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox2"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">True</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkVBox" id="vbox6"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - - <child> - <widget class="GtkVBox" id="vbox8"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkCheckButton" id="create_items_check"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Create items</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="read_items_check"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Read items</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="create_subfolders_check"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Create subfolders</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox9"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkRadioButton" id="edit_none_radio"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Cannot Edit</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkRadioButton" id="edit_own_radio"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Edit Own Items</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <property name="group">edit_none_radio</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkRadioButton" id="edit_all_radio"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Edit Any Items</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <property name="group">edit_none_radio</property> - </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> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox7"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - - <child> - <widget class="GtkVBox" id="vbox10"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkCheckButton" id="folder_owner_check"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Folder owner</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="folder_contact_check"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Folder contact</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="folder_visible_check"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Folder visible</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox11"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkRadioButton" id="delete_none_radio"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Cannot Delete</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">True</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkRadioButton" id="delete_own_radio"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Delete Own Items</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <property name="group">delete_none_radio</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkRadioButton" id="delete_all_radio"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Delete Any Items</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <property name="group">delete_none_radio</property> - </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> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </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">fill</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -</glade-interface> diff --git a/plugins/exchange-operations/exchange-send-options.c b/plugins/exchange-operations/exchange-send-options.c index 4c6e705b9d..ecc0f0359c 100644 --- a/plugins/exchange-operations/exchange-send-options.c +++ b/plugins/exchange-operations/exchange-send-options.c @@ -30,18 +30,13 @@ #include "exchange-operations.h" #include <e-util/e-util.h> #include <e-util/e-error.h> -#include <glade/glade.h> #include "e-util/e-util-private.h" #include "exchange-send-options.h" struct _ExchangeSendOptionsDialogPrivate { - /* Glade XML data */ - GladeXML *xml; - /*Widgets*/ - GtkWidget *main; /*name selector dialog*/ @@ -168,40 +163,6 @@ exchange_send_options_get_widgets_data (ExchangeSendOptionsDialog *sod) return 1; } -static gboolean -get_widgets (ExchangeSendOptionsDialog *sod) -{ - ExchangeSendOptionsDialogPrivate *priv; - - priv = sod->priv; - -#define EXCHANGE(name) glade_xml_get_widget (priv->xml, name) - - priv->main = EXCHANGE ("send_options"); - if (!priv->main) - return FALSE; - - priv->importance = EXCHANGE ("imp_combo_box"); - priv->sensitivity = EXCHANGE ("sensitivity_combo_box"); - priv->button_user = EXCHANGE ("button-user"); - priv->delegate_enabled = EXCHANGE ("del_enabled_check"); - priv->read_receipt = EXCHANGE ("read_check_button"); - priv->delivery_receipt = EXCHANGE ("delivery_check_button"); - priv->importance_label = EXCHANGE ("Importance_label"); - priv->sensitivity_label = EXCHANGE ("Sensitivity_label"); - -#undef EXCHANGE - - return (priv->importance - &&priv->sensitivity - &&priv->button_user - &&priv->delegate_enabled - &&priv->read_receipt - &&priv->delivery_receipt - &&priv->importance_label - &&priv->sensitivity_label); -} - static void exchange_send_options_fill_widgets_with_data (ExchangeSendOptionsDialog *sod) { @@ -292,7 +253,6 @@ static void exchange_send_options_cb (GtkDialog *dialog, gint state, gpointer fu case GTK_RESPONSE_CANCEL: gtk_widget_hide (priv->main); gtk_widget_destroy (priv->main); - g_object_unref (priv->xml); break; case GTK_RESPONSE_HELP: e_display_help ( @@ -367,40 +327,162 @@ exchange_sendoptions_dialog_run (ExchangeSendOptionsDialog *sod, GtkWidget *pare ExchangeSendOptionsDialogPrivate *priv; ExchangeSendOptions *options; - GtkWidget *toplevel; - gchar *filename; EDestinationStore *destination_store; ENameSelectorDialog *name_selector_dialog; ENameSelectorModel *name_selector_model; ENameSelectorEntry *name_selector_entry; EDestination *des; - GtkWidget *name_box; + GtkWidget *send_options; + GtkWidget *send_options_vbox; + GtkWidget *options_vbox; + GtkWidget *message_settings_vbox; + GtkWidget *msg_settings_label; + GtkWidget *msg_settings_table; + GtkWidget *importance_label; + GtkWidget *sensitivity_label; + GtkWidget *sensitivity_combo_box; + GtkWidget *imp_combo_box; + GtkWidget *del_enabled_check; + GtkWidget *hbox1; + GtkWidget *hbox2; + GtkWidget *del_name_box; + GtkWidget *button_user; + GtkWidget *track_option_vbox; + GtkWidget *track_options_label; + GtkWidget *delivery_check_button; + GtkWidget *read_check_button; + gchar *tmp_str; g_return_val_if_fail (sod != NULL || EXCHANGE_IS_SENDOPTIONS_DIALOG (sod), FALSE); priv = sod->priv; options = sod->options; - filename = g_build_filename (EVOLUTION_GLADEDIR, - "exchange-send-options.glade", - NULL); - priv->xml = glade_xml_new (filename, NULL, NULL); - g_free (filename); - - if (!priv->xml) { - g_message ( G_STRLOC ": Could not load the Glade XML file "); - return FALSE; - } - - if (!get_widgets(sod)) { - g_object_unref (priv->xml); - g_message (G_STRLOC ": Could not get the Widgets \n"); - return FALSE; - } - - toplevel = gtk_widget_get_toplevel (priv->main); + send_options = gtk_dialog_new_with_buttons ( + _("Exchange - Send Options"), + NULL, + GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_HELP, GTK_RESPONSE_HELP, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, + NULL); + gtk_window_set_type_hint (GTK_WINDOW (send_options), GDK_WINDOW_TYPE_HINT_DIALOG); + + send_options_vbox = gtk_dialog_get_content_area (GTK_DIALOG (send_options)); + gtk_widget_show (send_options_vbox); + + options_vbox = gtk_vbox_new (FALSE, 0); + gtk_widget_show (options_vbox); + gtk_box_pack_start (GTK_BOX (send_options_vbox), options_vbox, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (options_vbox), 6); + + message_settings_vbox = gtk_vbox_new (FALSE, 0); + gtk_widget_show (message_settings_vbox); + gtk_box_pack_start (GTK_BOX (options_vbox), message_settings_vbox, FALSE, FALSE, 0); + + tmp_str = g_strconcat ("<b>", _("Message Settings"), "</b>", NULL); + msg_settings_label = gtk_label_new (tmp_str); + g_free (tmp_str); + gtk_widget_show (msg_settings_label); + gtk_box_pack_start (GTK_BOX (message_settings_vbox), msg_settings_label, FALSE, FALSE, 0); + gtk_label_set_use_markup (GTK_LABEL (msg_settings_label), TRUE); + gtk_misc_set_alignment (GTK_MISC (msg_settings_label), 0, 0.49); + + msg_settings_table = gtk_table_new (2, 2, FALSE); + gtk_widget_show (msg_settings_table); + gtk_box_pack_start (GTK_BOX (message_settings_vbox), msg_settings_table, FALSE, FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (msg_settings_table), 6); + gtk_table_set_row_spacings (GTK_TABLE (msg_settings_table), 6); + + importance_label = gtk_label_new_with_mnemonic (_("I_mportance: ")); + gtk_widget_show (importance_label); + gtk_table_attach (GTK_TABLE (msg_settings_table), importance_label, 0, 1, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (importance_label), 0, 0.49); + + sensitivity_label = gtk_label_new_with_mnemonic (_("_Sensitivity: ")); + gtk_widget_show (sensitivity_label); + gtk_table_attach (GTK_TABLE (msg_settings_table), sensitivity_label, 0, 1, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (sensitivity_label), 0, 0.5); + + sensitivity_combo_box = gtk_combo_box_new_text (); + gtk_widget_show (sensitivity_combo_box); + gtk_table_attach (GTK_TABLE (msg_settings_table), sensitivity_combo_box, 1, 2, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + gtk_combo_box_append_text (GTK_COMBO_BOX (sensitivity_combo_box), _("Normal")); + gtk_combo_box_append_text (GTK_COMBO_BOX (sensitivity_combo_box), _("Personal")); + gtk_combo_box_append_text (GTK_COMBO_BOX (sensitivity_combo_box), _("Private")); + gtk_combo_box_append_text (GTK_COMBO_BOX (sensitivity_combo_box), _("Confidential")); + + imp_combo_box = gtk_combo_box_new_text (); + gtk_widget_show (imp_combo_box); + gtk_table_attach (GTK_TABLE (msg_settings_table), imp_combo_box, 1, 2, 0, 1, + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + gtk_combo_box_append_text (GTK_COMBO_BOX (imp_combo_box), _("Normal")); + gtk_combo_box_append_text (GTK_COMBO_BOX (imp_combo_box), _("High")); + gtk_combo_box_append_text (GTK_COMBO_BOX (imp_combo_box), _("Low")); + + del_enabled_check = gtk_check_button_new_with_mnemonic (_("Send as Delegate")); + gtk_widget_show (del_enabled_check); + gtk_box_pack_start (GTK_BOX (options_vbox), del_enabled_check, FALSE, FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (del_enabled_check), 6); + + hbox1 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (options_vbox), hbox1, TRUE, TRUE, 0); + + hbox2 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox2); + gtk_box_pack_start (GTK_BOX (hbox1), hbox2, TRUE, TRUE, 0); + + del_name_box = gtk_hbox_new (FALSE, 0); + gtk_widget_show (del_name_box); + gtk_box_pack_start (GTK_BOX (hbox2), del_name_box, TRUE, TRUE, 0); + + button_user = gtk_button_new_with_mnemonic (_("_User")); + gtk_widget_show (button_user); + gtk_box_pack_start (GTK_BOX (hbox1), button_user, FALSE, FALSE, 0); + + track_option_vbox = gtk_vbox_new (FALSE, 0); + gtk_widget_show (track_option_vbox); + gtk_box_pack_start (GTK_BOX (options_vbox), track_option_vbox, TRUE, TRUE, 0); + + tmp_str = g_strconcat ("<b>", _("Tracking Options"), "</b>", NULL); + track_options_label = gtk_label_new (tmp_str); + g_free (tmp_str); + gtk_widget_show (track_options_label); + gtk_box_pack_start (GTK_BOX (track_option_vbox), track_options_label, FALSE, FALSE, 6); + gtk_label_set_use_markup (GTK_LABEL (track_options_label), TRUE); + gtk_misc_set_alignment (GTK_MISC (track_options_label), 0, 0.5); + + delivery_check_button = gtk_check_button_new_with_mnemonic (_("Request a _delivery receipt for this message")); + gtk_widget_show (delivery_check_button); + gtk_box_pack_start (GTK_BOX (track_option_vbox), delivery_check_button, FALSE, FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (delivery_check_button), 6); + + read_check_button = gtk_check_button_new_with_mnemonic (_("Request a _read receipt for this message")); + gtk_widget_show (read_check_button); + gtk_box_pack_start (GTK_BOX (track_option_vbox), read_check_button, FALSE, FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (read_check_button), 6); + + priv->main = send_options; + priv->importance = imp_combo_box; + priv->sensitivity = sensitivity_combo_box; + priv->button_user = button_user; + priv->delegate_enabled = del_enabled_check; + priv->read_receipt = read_check_button; + priv->delivery_receipt = delivery_check_button; + priv->importance_label = importance_label; + priv->sensitivity_label = sensitivity_label; + + send_options = gtk_widget_get_toplevel (priv->main); if (parent) - gtk_window_set_transient_for (GTK_WINDOW (toplevel), + gtk_window_set_transient_for (GTK_WINDOW (send_options), GTK_WINDOW (parent)); priv->proxy_name_selector = e_name_selector_new (); @@ -435,8 +517,7 @@ exchange_sendoptions_dialog_run (ExchangeSendOptionsDialog *sod, GtkWidget *pare /* The name box is just a container. The name_selector_entry is added to it. This Widget is created dynamically*/ - name_box = glade_xml_get_widget (priv->xml, "del_name_box"); - gtk_container_add ((GtkContainer *) name_box, (GtkWidget *) name_selector_entry); + gtk_container_add ((GtkContainer *) del_name_box, (GtkWidget *) name_selector_entry); gtk_widget_show ((GtkWidget *) name_selector_entry); gtk_widget_grab_focus ((GtkWidget *) name_selector_entry); @@ -490,7 +571,6 @@ exchange_sendoptions_dialog_init (GObject *object) sod->options->importance = E_IMP_NORMAL; sod->options->sensitivity = E_SENSITIVITY_NORMAL; - priv->xml = NULL; priv->main = NULL; priv->importance = NULL; priv->sensitivity = NULL; diff --git a/plugins/exchange-operations/exchange-send-options.glade b/plugins/exchange-operations/exchange-send-options.glade deleted file mode 100644 index 518e0979e6..0000000000 --- a/plugins/exchange-operations/exchange-send-options.glade +++ /dev/null @@ -1,405 +0,0 @@ -<?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="send_options"> - <property name="visible">True</property> - <property name="title" translatable="yes">Exchange - Send Options</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="urgency_hint">False</property> - <property name="has_separator">True</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="send_options_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_area1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="helpbutton1"> - <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="cancelbutton1"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-6</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="okbutton1"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-5</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="Options_vbox"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkVBox" id="Message_settings_vbox"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkLabel" id="msg_settings_label"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Message Settings</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</property> - <property name="yalign">0.490000009537</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> - - <child> - <widget class="GtkTable" id="msg_settings_table"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> - <property name="homogeneous">False</property> - <property name="row_spacing">6</property> - <property name="column_spacing">0</property> - - <child> - <widget class="GtkLabel" id="Importance_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">I_mportance: </property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.490000009537</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="Sensitivity_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Sensitivity: </property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </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="GtkComboBox" id="sensitivity_combo_box"> - <property name="visible">True</property> - <property name="items" translatable="yes">Normal -Personal -Private -Confidential</property> - <property name="add_tearoffs">False</property> - <property name="focus_on_click">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options">fill</property> - </packing> - </child> - - <child> - <widget class="GtkComboBox" id="imp_combo_box"> - <property name="visible">True</property> - <property name="items" translatable="yes">Normal -High -Low</property> - <property name="add_tearoffs">False</property> - <property name="focus_on_click">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="y_options">fill</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">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="del_enabled_check"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Send as Delegate</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</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="GtkHBox" id="del_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> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="button-user"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_User</property> - <property name="use_underline">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> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="track_option_vbox"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkLabel" id="Track_options_label"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Tracking Options</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</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">6</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="delivery_check_button"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Request a _delivery receipt for this message</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="read_check_button"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Request a _read receipt for this message</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </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/exchange-operations/exchange-user-dialog.c b/plugins/exchange-operations/exchange-user-dialog.c index 823226427d..908ffd39d1 100644 --- a/plugins/exchange-operations/exchange-user-dialog.c +++ b/plugins/exchange-operations/exchange-user-dialog.c @@ -134,7 +134,8 @@ e2k_user_dialog_construct (E2kUserDialog *dialog, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); - gtk_window_set_transient_for (GTK_WINDOW (dialog), parent_window); + if (parent_window) + gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent_window)); priv = dialog->priv; priv->section_name = g_strdup (section_name); diff --git a/plugins/exchange-operations/org-gnome-exchange-ab-subscription.xml b/plugins/exchange-operations/org-gnome-exchange-ab-subscription.xml deleted file mode 100644 index 81181ca4fb..0000000000 --- a/plugins/exchange-operations/org-gnome-exchange-ab-subscription.xml +++ /dev/null @@ -1,15 +0,0 @@ -<Root> - <commands> - <cmd name="FolderSubscription" _label="Subscribe to Other User's Contacts" - _tip="Subscribe to Other User's Contacts"/> - </commands> - - <menu> - <submenu name="File"> - <placeholder name="FileOps"> - <menuitem name="FolderSubscription" verb=""/> - </placeholder> - </submenu> - </menu> - -</Root> diff --git a/plugins/exchange-operations/org-gnome-exchange-cal-subscription.xml b/plugins/exchange-operations/org-gnome-exchange-cal-subscription.xml deleted file mode 100644 index 3b11479055..0000000000 --- a/plugins/exchange-operations/org-gnome-exchange-cal-subscription.xml +++ /dev/null @@ -1,15 +0,0 @@ -<Root> - <commands> - <cmd name="FolderSubscription" _label="Subscribe to Other User's Calendar" - _tip="Subscribe to Other User's Calendar"/> - </commands> - - <menu> - <submenu name="File"> - <placeholder name="FileOps"> - <menuitem name="FolderSubscription" verb=""/> - </placeholder> - </submenu> - </menu> - -</Root> diff --git a/plugins/exchange-operations/org-gnome-exchange-operations.eplug.xml b/plugins/exchange-operations/org-gnome-exchange-operations.eplug.xml index 063d5c98c6..fcd6ff074b 100644 --- a/plugins/exchange-operations/org-gnome-exchange-operations.eplug.xml +++ b/plugins/exchange-operations/org-gnome-exchange-operations.eplug.xml @@ -13,218 +13,108 @@ <author name="Raghavendran R" email="raghavguru7@gmail.com"/> <_description>Activates the Evolution-Exchange extension package.</_description> - <hook class="org.gnome.evolution.mail.config:1.0"> - <group - target="account" - id="org.gnome.evolution.mail.config.accountEditor" - check="org_gnome_exchange_check_options" - commit="org_gnome_exchange_commit"> - <item type="page" - path="40.oof" - _label="Exchange Settings" - factory="org_gnome_exchange_settings"/> - <item type="item_table" - path="10.receive/10.config/20.owa" - factory="org_gnome_exchange_owa_url"/> - <item type="section" - path="10.receive/30.auth/00.exchange_auth" - factory="org_gnome_exchange_auth_section"/> - </group> - - <group - target="account" - id="org.gnome.evolution.mail.config.accountAssistant" - check="org_gnome_exchange_check_options"> - <item type="item_table" - path="10.receive/10.config/20.owa" - factory="org_gnome_exchange_owa_url"/> - <item type="section" - path="10.receive/30.auth/00.exchange_auth" - factory="org_gnome_exchange_auth_section"/> - </group> - - <group - target="account" - id="org.gnome.evolution.mail.config.accountWizard" - check="org_gnome_exchange_check_options"> - <item type="item_table" - path="10.receive/10.config/20.owa" - factory="org_gnome_exchange_owa_url"/> - </group> - </hook> + <hook class="org.gnome.evolution.mail.config:1.0"> + <group target="account" id="org.gnome.evolution.mail.config.accountEditor" check="org_gnome_exchange_check_options" commit="org_gnome_exchange_commit"> + <item type="page" path="40.oof" _label="Exchange Settings" factory="org_gnome_exchange_settings"/> + <item type="item_table" path="10.receive/10.config/20.owa" factory="org_gnome_exchange_owa_url"/> + <item type="section" path="10.receive/30.auth/00.exchange_auth" factory="org_gnome_exchange_auth_section"/> + </group> - <hook class="org.gnome.evolution.calendar.config:1.0"> - <group - target="source" - id="org.gnome.evolution.calendar.calendarProperties" - check="e_exchange_calendar_check" - commit="e_exchange_calendar_commit"> - <item - type="item_table" - path="00.general/00.source/40.pcalendar" - factory="e_exchange_calendar_pcalendar"/> - </group> - </hook> + <group target="account" id="org.gnome.evolution.mail.config.accountAssistant" check="org_gnome_exchange_check_options"> + <item type="item_table" path="10.receive/10.config/20.owa" factory="org_gnome_exchange_owa_url"/> + <item type="section" path="10.receive/30.auth/00.exchange_auth" factory="org_gnome_exchange_auth_section"/> + </group> - <hook class="org.gnome.evolution.addressbook.config:1.0"> - <group - target="source" - id="com.novell.evolution.addressbook.config.accountEditor" - check="e_exchange_contacts_check" - commit="e_exchange_contacts_commit"> - <item - type="item" - path="00.general/10.display/40.pcontacts" - factory="e_exchange_contacts_pcontacts"/> - </group> - </hook> + <group target="account" id="org.gnome.evolution.mail.config.accountWizard" check="org_gnome_exchange_check_options"> + <item type="item_table" path="10.receive/10.config/20.owa" factory="org_gnome_exchange_owa_url"/> + </group> - <hook class="org.gnome.evolution.mail.popup:1.0"> - <menu id="org.gnome.evolution.mail.foldertree.popup" target="folder" factory = "org_gnome_exchange_folder_permissions"> - </menu> - </hook> - <hook class="org.gnome.evolution.calendar.popup:1.0"> - <menu id="org.gnome.evolution.calendar.source.popup" target="source" factory="org_gnome_exchange_calendar_permissions"> - </menu> - </hook> - <hook class="org.gnome.evolution.calendar.popup:1.0"> - <menu id="org.gnome.evolution.tasks.source.popup" target="source" factory="org_gnome_exchange_calendar_permissions"> - </menu> - </hook> - <hook class="org.gnome.evolution.addressbook.popup:1.0"> - <menu id="org.gnome.evolution.addressbook.source.popup" target="source" factory="org_gnome_exchange_addressbook_permissions"> - </menu> - </hook> - <hook class="org.gnome.evolution.mail.bonobomenu:1.0"> - <menu id="org.gnome.evolution.mail.browser" target="select"> - <ui file="@PLUGINDIR@/org-gnome-folder-permissions.xml"/> - <item - type="item" - verb="CheckFolderPermission" - path="/commands/CheckFolderPermission" - enable="all" - activate="org_gnome_exchange_menu_folder_permissions"/> - </menu> - </hook> - <hook class="org.gnome.evolution.calendar.bonobomenu:1.0"> - <menu id="org.gnome.evolution.calendar.view" target="select"> - <ui file="@PLUGINDIR@/org-gnome-folder-permissions.xml"/> - <item - type="item" - verb="CheckFolderPermission" - path="/commands/CheckFolderPermission" - enable="all" - activate="org_gnome_exchange_menu_cal_permissions"/> - </menu> - </hook> - <hook class="org.gnome.evolution.calendar.bonobomenu:1.0"> - <menu id="org.gnome.evolution.tasks.view" target="select"> - <ui file="@PLUGINDIR@/org-gnome-folder-permissions.xml"/> - <item - type="item" - verb="CheckFolderPermission" - path="/commands/CheckFolderPermission" - enable="all" - activate="org_gnome_exchange_menu_tasks_permissions"/> - </menu> - </hook> - <hook class="org.gnome.evolution.addressbook.bonobomenu:1.0"> - <menu id="org.gnome.evolution.addressbook.view" target="select"> - <ui file="@PLUGINDIR@/org-gnome-folder-permissions.xml"/> - <item - type="item" - verb="CheckFolderPermission" - path="/commands/CheckFolderPermission" - enable="all" - activate="org_gnome_exchange_menu_ab_permissions"/> - </menu> - </hook> - <hook class="org.gnome.evolution.mail.bonobomenu:1.0"> - <menu id="org.gnome.evolution.mail.browser" target="select"> - <ui file="@PLUGINDIR@/org-gnome-folder-subscription.xml"/> - <item - type="item" - verb="FolderSubscription" - path="/commands/FolderSubscription" - enable="all" - activate="org_gnome_exchange_inbox_subscription"/> - </menu> - </hook> - <hook class="org.gnome.evolution.calendar.bonobomenu:1.0"> - <menu id="org.gnome.evolution.calendar.view" target="select"> - <ui file="@PLUGINDIR@/org-gnome-exchange-cal-subscription.xml"/> - <item - type="item" - verb="FolderSubscription" - path="/commands/FolderSubscription" - enable="all" - activate="org_gnome_exchange_calendar_subscription"/> - </menu> - </hook> - <hook class="org.gnome.evolution.calendar.bonobomenu:1.0"> - <menu id="org.gnome.evolution.tasks.view" target="select"> - <ui file="@PLUGINDIR@/org-gnome-exchange-tasks-subscription.xml"/> - <item - type="item" - verb="FolderSubscription" - path="/commands/FolderSubscription" - enable="all" - activate="org_gnome_exchange_tasks_subscription"/> - </menu> - </hook> - <hook class="org.gnome.evolution.addressbook.bonobomenu:1.0"> - <menu id="org.gnome.evolution.addressbook.view" target="select"> - <ui file="@PLUGINDIR@/org-gnome-exchange-ab-subscription.xml"/> - <item - type="item" - verb="FolderSubscription" - path="/commands/FolderSubscription" - enable="all" - activate="org_gnome_exchange_addressbook_subscription"/> - </menu> - </hook> - <hook class="org.gnome.evolution.calendar.popup:1.0"> - <menu id="org.gnome.evolution.calendar.source.popup" - target="source" - factory="org_gnome_exchange_check_subscribed"> - </menu> - </hook> - <hook class="org.gnome.evolution.calendar.popup:1.0"> - <menu id="org.gnome.evolution.tasks.source.popup" - target="source" - factory="org_gnome_exchange_check_subscribed"> - </menu> - </hook> - <hook class="org.gnome.evolution.addressbook.popup:1.0"> - <menu id="org.gnome.evolution.addressbook.source.popup" - target="source" - factory="org_gnome_exchange_check_address_book_subscribed"> - </menu> + <group id="org.gnome.evolution.mail.folderConfig" target="folder" check= "exchange_show_folder_size_check"> + <item type="page" path="10.size" _label="Size" factory="org_gnome_exchange_show_folder_size_factory"/> + </group> </hook> - <hook class="org.gnome.evolution.mail.popup:1.0"> - <menu id="org.gnome.evolution.mail.foldertree.popup" - target="folder" - factory = "org_gnome_exchange_check_inbox_subscribed"> - </menu> + + <hook class="org.gnome.evolution.calendar.config:1.0"> + <group target="source" id="org.gnome.evolution.calendar.calendarProperties" check="e_exchange_calendar_check" commit="e_exchange_calendar_commit"> + <item type="item_table" path="00.general/00.source/40.pcalendar" factory="e_exchange_calendar_pcalendar"/> + </group> </hook> - <hook class="org.gnome.evolution.mail.config:1.0"> - <group id="org.gnome.evolution.mail.folderConfig" - target="folder" - check= "exchange_show_folder_size_check"> - <item - type="page" - path="10.size" - _label="Size" - factory="org_gnome_exchange_show_folder_size_factory"/> + + <hook class="org.gnome.evolution.addressbook.config:1.0"> + <group target="source" id="com.novell.evolution.addressbook.config.accountEditor" check="e_exchange_contacts_check" commit="e_exchange_contacts_commit"> + <item type="item" path="00.general/10.display/40.pcontacts" factory="e_exchange_contacts_pcontacts"/> </group> </hook> + <hook class="org.gnome.evolution.mail.events:1.0"> - <event - id="composer.selectsendoption" - handle="org_gnome_exchange_send_options" - target="composer" - enable="sendoption" - /> + <event id="composer.selectsendoption" handle="org_gnome_exchange_send_options" target="composer" enable="sendoption"/> + </hook> + + <hook class="org.gnome.evolution.ui:1.0"> + <ui-manager id="org.gnome.evolution.mail" callback="eex_ui_mail_init"> + <popup name="mail-folder-popup"> + <placeholder name="mail-folder-popup-actions"> + <menuitem action="eex-mail-folder-permissions"/> + <menuitem action="eex-mail-folder-inbox-unsubscribe"/> + </placeholder> + </popup> + <menubar name="main-menu"> + <menu action="file-menu"> + <placeholder name="file-actions"> + <menuitem action="eex-mail-folder-permissions"/> + <menuitem action="eex-folder-subscribe-Inbox"/> + </placeholder> + </menu> + </menubar> + </ui-manager> + <ui-manager id="org.gnome.evolution.calendar" callback="eex_ui_calendar_permissions"> + <popup name="calendar-popup"> + <placeholder name="calendar-popup-actions"> + <menuitem action="eex-calendar-permissions"/> + <menuitem action="eex-folder-unsubscribe-Calendar"/> + </placeholder> + </popup> + <menubar name="main-menu"> + <menu action="file-menu"> + <placeholder name="file-actions"> + <menuitem action="eex-calendar-permissions"/> + <menuitem action="eex-folder-subscribe-Calendar"/> + </placeholder> + </menu> + </menubar> + </ui-manager> + <ui-manager id="org.gnome.evolution.task" callback="eex_ui_tasks_permissions"> + <popup name="task-list-popup"> + <placeholder name="task-list-popup-actions"> + <menuitem action="eex-tasks-permissions"/> + <menuitem action="eex-folder-unsubscribe-Tasks"/> + </placeholder> + </popup> + <menubar name="main-menu"> + <menu action="file-menu"> + <placeholder name="file-actions"> + <menuitem action="eex-tasks-permissions"/> + <menuitem action="eex-folder-subscribe-Tasks"/> + </placeholder> + </menu> + </menubar> + </ui-manager> + <ui-manager id="org.gnome.evolution.addressbook" callback="eex_ui_addressbook_permissions"> + <popup name="address-book-popup"> + <placeholder name="address-book-popup-actions"> + <menuitem action="eex-addressbook-permissions"/> + <menuitem action="eex-folder-unsubscribe-Contacts"/> + </placeholder> + </popup> + <menubar name="main-menu"> + <menu action="file-menu"> + <placeholder name="file-actions"> + <menuitem action="eex-addressbook-permissions"/> + <menuitem action="eex-folder-subscribe-Contacts"/> + </placeholder> + </menu> + </menubar> + </ui-manager> </hook> </e-plugin> </e-plugin-list> diff --git a/plugins/exchange-operations/org-gnome-exchange-tasks-subscription.xml b/plugins/exchange-operations/org-gnome-exchange-tasks-subscription.xml deleted file mode 100644 index bb63c9327f..0000000000 --- a/plugins/exchange-operations/org-gnome-exchange-tasks-subscription.xml +++ /dev/null @@ -1,15 +0,0 @@ -<Root> - <commands> - <cmd name="FolderSubscription" _label="Subscribe to Other User's Tasks" - _tip="Subscribe to Other User's Tasks"/> - </commands> - - <menu> - <submenu name="File"> - <placeholder name="FileOps"> - <menuitem name="FolderSubscription" verb=""/> - </placeholder> - </submenu> - </menu> - -</Root> diff --git a/plugins/exchange-operations/org-gnome-folder-permissions.xml b/plugins/exchange-operations/org-gnome-folder-permissions.xml deleted file mode 100644 index 785034df89..0000000000 --- a/plugins/exchange-operations/org-gnome-folder-permissions.xml +++ /dev/null @@ -1,14 +0,0 @@ -<Root> - <commands> - <cmd name="CheckFolderPermission" _label="Permissions..." - _tip="Check folder permissions"/> - </commands> - - <menu> - <submenu name="File"> - <placeholder name="FileOps"> - <menuitem name="CheckFolderPermission" verb=""/> - </placeholder> - </submenu> - </menu> -</Root> diff --git a/plugins/exchange-operations/org-gnome-folder-subscription.xml b/plugins/exchange-operations/org-gnome-folder-subscription.xml deleted file mode 100644 index 3f65e94e19..0000000000 --- a/plugins/exchange-operations/org-gnome-folder-subscription.xml +++ /dev/null @@ -1,16 +0,0 @@ -<Root> - <commands> - <cmd name="FolderSubscription" _label="Subscribe to Other User's Folder" - _tip="Subscribe to Other User's Folder"/> - </commands> - - <menu> - <submenu name="File"> - <placeholder name="FileOps"> - <menuitem name="FolderSubscription" verb=""/> - </placeholder> - </submenu> - - - </menu> -</Root> |