aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2009-08-28 01:38:17 +0800
committerMatthew Barnes <mbarnes@redhat.com>2009-08-28 05:35:21 +0800
commit7dc82b2dcbab7f85504c3061ef45cc4249821e42 (patch)
treec54a1b8936775cfb12d4401f8c18ce85f504aa1d
parent0e1066b431b3d172c18b7be8744875942515e117 (diff)
downloadgsoc2013-evolution-7dc82b2dcbab7f85504c3061ef45cc4249821e42.tar.gz
gsoc2013-evolution-7dc82b2dcbab7f85504c3061ef45cc4249821e42.tar.zst
gsoc2013-evolution-7dc82b2dcbab7f85504c3061ef45cc4249821e42.zip
Add vertical view to Memos and Tasks.
-rw-r--r--calendar/gui/apps_evolution_calendar.schemas.in95
-rw-r--r--modules/calendar/e-memo-shell-content.c112
-rw-r--r--modules/calendar/e-memo-shell-content.h6
-rw-r--r--modules/calendar/e-memo-shell-view-actions.c72
-rw-r--r--modules/calendar/e-memo-shell-view-actions.h4
-rw-r--r--modules/calendar/e-task-shell-content.c111
-rw-r--r--modules/calendar/e-task-shell-content.h6
-rw-r--r--modules/calendar/e-task-shell-view-actions.c68
-rw-r--r--modules/calendar/e-task-shell-view-actions.h4
-rw-r--r--modules/mail/e-mail-shell-content.c15
-rw-r--r--modules/mail/e-mail-shell-view-actions.c2
-rw-r--r--ui/evolution-memos.ui9
-rw-r--r--ui/evolution-tasks.ui9
-rw-r--r--widgets/misc/e-paned.c1
14 files changed, 419 insertions, 95 deletions
diff --git a/calendar/gui/apps_evolution_calendar.schemas.in b/calendar/gui/apps_evolution_calendar.schemas.in
index 6a3b68a25f..b232c60cce 100644
--- a/calendar/gui/apps_evolution_calendar.schemas.in
+++ b/calendar/gui/apps_evolution_calendar.schemas.in
@@ -289,29 +289,106 @@
<long>Position of the vertical pane, between the calendar lists and the date navigator calendar.</long>
</locale>
</schema>
+
<schema>
- <key>/schemas/apps/evolution/calendar/display/show_task_preview</key>
- <applyto>/apps/evolution/calendar/display/show_task_preview</applyto>
+ <key>/schemas/apps/evolution/calendar/display/memo_layout</key>
+ <applyto>/apps/evolution/calendar/display/memo_layout</applyto>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Memo layout style</short>
+ <long>
+ The layout style determines where to place the preview pane
+ in relation to the memo list. "0" (Classic View) places the
+ preview pane below the memo list. "1" (Vertical View) places
+ the preview pane next to the memo list.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/evolution/calendar/display/show_memo_preview</key>
+ <applyto>/apps/evolution/calendar/display/show_memo_preview</applyto>
<owner>evolution-calendar</owner>
<type>bool</type>
<default>true</default>
<locale name="C">
- <short>Show the "Preview" pane</short>
+ <short>Show the memo preview pane</short>
<long>
- Show the "Preview" pane.
+ If "true", show the memo preview pane in the main window.
</long>
</locale>
</schema>
<schema>
+ <key>/schemas/apps/evolution/calendar/display/memo_hpane_position</key>
+ <applyto>/apps/evolution/calendar/display/memo_hpane_position</applyto>
+ <owner>evolution-calendar</owner>
+ <type>int</type>
+ <default>200</default>
+ <locale name="C">
+ <short>Memo preview pane position (horizontal)</short>
+ <long>
+ Position of the task preview pane when oriented horizontally.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
<key>/schemas/apps/evolution/calendar/display/memo_vpane_position</key>
<applyto>/apps/evolution/calendar/display/memo_vpane_position</applyto>
<owner>evolution-calendar</owner>
<type>int</type>
<default>400</default>
<locale name="C">
- <short>Memos vertical pane position</short>
- <long>Position of the vertical pane, between the memo list and the memo preview pane, in pixels.</long>
+ <short>Memo preview pane position (vertical)</short>
+ <long>
+ Position of the memo preview pane when oriented vertically.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/evolution/calendar/display/task_layout</key>
+ <applyto>/apps/evolution/calendar/display/task_layout</applyto>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Task layout style</short>
+ <long>
+ The layout style determines where to place the preview pane
+ in relation to the task list. "0" (Classic View) places the
+ preview pane below the task list. "1" (Vertical View) places
+ the preview pane next to the task list.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/evolution/calendar/display/show_task_preview</key>
+ <applyto>/apps/evolution/calendar/display/show_task_preview</applyto>
+ <owner>evolution-calendar</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show the task preview pane</short>
+ <long>
+ If "true", show the task preview pane in the main window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/evolution/calendar/display/task_hpane_position</key>
+ <applyto>/apps/evolution/calendar/display/task_hpane_position</applyto>
+ <owner>evolution-calendar</owner>
+ <type>int</type>
+ <default>200</default>
+ <locale name="C">
+ <short>Task preview pane position (horizontal)</short>
+ <long>
+ Position of the task preview pane when oriented horizontally.
+ </long>
</locale>
</schema>
@@ -322,8 +399,10 @@
<type>int</type>
<default>400</default>
<locale name="C">
- <short>Tasks vertical pane position</short>
- <long>Position of the vertical pane, between the task list and the task preview pane, in pixels.</long>
+ <short>Task preview pane position (vertical)</short>
+ <long>
+ Position of the task preview pane when oriented vertically.
+ </long>
</locale>
</schema>
diff --git a/modules/calendar/e-memo-shell-content.c b/modules/calendar/e-memo-shell-content.c
index 7c7b84f3fb..2f4e436056 100644
--- a/modules/calendar/e-memo-shell-content.c
+++ b/modules/calendar/e-memo-shell-content.c
@@ -23,14 +23,15 @@
#include <glib/gi18n.h>
+#include "e-util/e-binding.h"
#include "e-util/gconf-bridge.h"
+#include "widgets/menus/gal-view-etable.h"
+#include "widgets/misc/e-paned.h"
#include "calendar/gui/comp-util.h"
#include "calendar/gui/e-cal-model-memos.h"
#include "calendar/gui/e-memo-table.h"
-#include "widgets/menus/gal-view-etable.h"
-
#define E_MEMO_SHELL_CONTENT_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
((obj), E_TYPE_MEMO_SHELL_CONTENT, EMemoShellContentPrivate))
@@ -51,13 +52,17 @@ struct _EMemoShellContentPrivate {
ECalModel *memo_model;
GalViewInstance *view_instance;
+ GtkOrientation orientation;
gchar *current_uid;
+
+ guint preview_visible : 1;
};
enum {
PROP_0,
PROP_MODEL,
+ PROP_ORIENTATION,
PROP_PREVIEW_VISIBLE
};
@@ -258,6 +263,21 @@ memo_shell_content_model_row_changed_cb (EMemoShellContent *memo_shell_content,
memo_shell_content_cursor_change_cb (memo_shell_content, 0, table);
}
+static GtkOrientation
+memo_shell_content_get_orientation (EMemoShellContent *memo_shell_content)
+{
+ return memo_shell_content->priv->orientation;
+}
+
+static void
+memo_shell_content_set_orientation (EMemoShellContent *memo_shell_content,
+ GtkOrientation orientation)
+{
+ memo_shell_content->priv->orientation = orientation;
+
+ g_object_notify (G_OBJECT (memo_shell_content), "orientation");
+}
+
static void
memo_shell_content_set_property (GObject *object,
guint property_id,
@@ -265,6 +285,12 @@ memo_shell_content_set_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
+ case PROP_ORIENTATION:
+ memo_shell_content_set_orientation (
+ E_MEMO_SHELL_CONTENT (object),
+ g_value_get_enum (value));
+ return;
+
case PROP_PREVIEW_VISIBLE:
e_memo_shell_content_set_preview_visible (
E_MEMO_SHELL_CONTENT (object),
@@ -284,13 +310,22 @@ memo_shell_content_get_property (GObject *object,
switch (property_id) {
case PROP_MODEL:
g_value_set_object (
- value, e_memo_shell_content_get_memo_model (
+ value,
+ e_memo_shell_content_get_memo_model (
+ E_MEMO_SHELL_CONTENT (object)));
+ return;
+
+ case PROP_ORIENTATION:
+ g_value_set_enum (
+ value,
+ memo_shell_content_get_orientation (
E_MEMO_SHELL_CONTENT (object)));
return;
case PROP_PREVIEW_VISIBLE:
g_value_set_boolean (
- value, e_memo_shell_content_get_preview_visible (
+ value,
+ e_memo_shell_content_get_preview_visible (
E_MEMO_SHELL_CONTENT (object)));
return;
}
@@ -385,11 +420,15 @@ memo_shell_content_constructed (GObject *object)
container = GTK_WIDGET (object);
- widget = gtk_vpaned_new ();
+ widget = e_paned_new (GTK_ORIENTATION_VERTICAL);
gtk_container_add (GTK_CONTAINER (container), widget);
priv->paned = g_object_ref (widget);
gtk_widget_show (widget);
+ e_binding_new (
+ G_OBJECT (object), "orientation",
+ G_OBJECT (widget), "orientation");
+
container = widget;
widget = e_memo_table_new (shell_view, priv->memo_model);
@@ -406,6 +445,10 @@ memo_shell_content_constructed (GObject *object)
gtk_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE);
gtk_widget_show (widget);
+ e_binding_new (
+ G_OBJECT (object), "preview-visible",
+ G_OBJECT (widget), "visible");
+
container = widget;
widget = e_cal_component_preview_new ();
@@ -467,8 +510,12 @@ memo_shell_content_constructed (GObject *object)
bridge = gconf_bridge_get ();
object = G_OBJECT (priv->paned);
+ key = "/apps/evolution/calendar/display/memo_hpane_position";
+ gconf_bridge_bind_property_delayed (bridge, key, object, "hposition");
+
+ object = G_OBJECT (priv->paned);
key = "/apps/evolution/calendar/display/memo_vpane_position";
- gconf_bridge_bind_property_delayed (bridge, key, object, "position");
+ gconf_bridge_bind_property_delayed (bridge, key, object, "vposition");
}
static guint32
@@ -553,7 +600,11 @@ memo_shell_content_class_init (EMemoShellContentClass *class)
_("Preview is Visible"),
_("Whether the preview pane is visible"),
TRUE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_class_override_property (
+ object_class, PROP_ORIENTATION, "orientation");
}
static void
@@ -587,9 +638,19 @@ e_memo_shell_content_register_type (GTypeModule *type_module)
NULL /* value_table */
};
+ static const GInterfaceInfo orientable_info = {
+ (GInterfaceInitFunc) NULL,
+ (GInterfaceFinalizeFunc) NULL,
+ NULL /* interface_data */
+ };
+
memo_shell_content_type = g_type_module_register_type (
type_module, E_TYPE_SHELL_CONTENT,
"EMemoShellContent", &type_info, 0);
+
+ g_type_module_add_interface (
+ type_module, memo_shell_content_type,
+ GTK_TYPE_ORIENTABLE, &orientable_info);
}
GtkWidget *
@@ -630,46 +691,31 @@ e_memo_shell_content_get_memo_table (EMemoShellContent *memo_shell_content)
return E_MEMO_TABLE (memo_shell_content->priv->memo_table);
}
-GalViewInstance *
-e_memo_shell_content_get_view_instance (EMemoShellContent *memo_shell_content)
-{
- g_return_val_if_fail (
- E_IS_MEMO_SHELL_CONTENT (memo_shell_content), NULL);
-
- return memo_shell_content->priv->view_instance;
-}
-
gboolean
e_memo_shell_content_get_preview_visible (EMemoShellContent *memo_shell_content)
{
- GtkPaned *paned;
- GtkWidget *child;
-
g_return_val_if_fail (
E_IS_MEMO_SHELL_CONTENT (memo_shell_content), FALSE);
- paned = GTK_PANED (memo_shell_content->priv->paned);
- child = gtk_paned_get_child2 (paned);
-
- return GTK_WIDGET_VISIBLE (child);
+ return memo_shell_content->priv->preview_visible;
}
void
e_memo_shell_content_set_preview_visible (EMemoShellContent *memo_shell_content,
gboolean preview_visible)
{
- GtkPaned *paned;
- GtkWidget *child;
-
g_return_if_fail (E_IS_MEMO_SHELL_CONTENT (memo_shell_content));
- paned = GTK_PANED (memo_shell_content->priv->paned);
- child = gtk_paned_get_child2 (paned);
-
- if (preview_visible)
- gtk_widget_show (child);
- else
- gtk_widget_hide (child);
+ memo_shell_content->priv->preview_visible = preview_visible;
g_object_notify (G_OBJECT (memo_shell_content), "preview-visible");
}
+
+GalViewInstance *
+e_memo_shell_content_get_view_instance (EMemoShellContent *memo_shell_content)
+{
+ g_return_val_if_fail (
+ E_IS_MEMO_SHELL_CONTENT (memo_shell_content), NULL);
+
+ return memo_shell_content->priv->view_instance;
+}
diff --git a/modules/calendar/e-memo-shell-content.h b/modules/calendar/e-memo-shell-content.h
index 84c22d6ce4..ae2710e148 100644
--- a/modules/calendar/e-memo-shell-content.h
+++ b/modules/calendar/e-memo-shell-content.h
@@ -82,14 +82,14 @@ ECalComponentPreview *
(EMemoShellContent *memo_shell_content);
EMemoTable * e_memo_shell_content_get_memo_table
(EMemoShellContent *memo_shell_content);
-GalViewInstance *
- e_memo_shell_content_get_view_instance
- (EMemoShellContent *memo_shell_content);
gboolean e_memo_shell_content_get_preview_visible
(EMemoShellContent *memo_shell_content);
void e_memo_shell_content_set_preview_visible
(EMemoShellContent *memo_shell_content,
gboolean preview_visible);
+GalViewInstance *
+ e_memo_shell_content_get_view_instance
+ (EMemoShellContent *memo_shell_content);
G_END_DECLS
diff --git a/modules/calendar/e-memo-shell-view-actions.c b/modules/calendar/e-memo-shell-view-actions.c
index 2d6713a7a8..0161eeb198 100644
--- a/modules/calendar/e-memo-shell-view-actions.c
+++ b/modules/calendar/e-memo-shell-view-actions.c
@@ -528,6 +528,32 @@ action_memo_search_cb (GtkRadioAction *action,
}
static void
+action_memo_view_cb (GtkRadioAction *action,
+ GtkRadioAction *current,
+ EMemoShellView *memo_shell_view)
+{
+ EMemoShellContent *memo_shell_content;
+ GtkOrientable *orientable;
+ GtkOrientation orientation;
+
+ memo_shell_content = memo_shell_view->priv->memo_shell_content;
+ orientable = GTK_ORIENTABLE (memo_shell_content);
+
+ switch (gtk_radio_action_get_current_value (action)) {
+ case 0:
+ orientation = GTK_ORIENTATION_VERTICAL;
+ break;
+ case 1:
+ orientation = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ default:
+ g_return_if_reached ();
+ }
+
+ gtk_orientable_set_orientation (orientable, orientation);
+}
+
+static void
action_search_execute_cb (GtkAction *action,
EMemoShellView *memo_shell_view)
{
@@ -662,7 +688,16 @@ static GtkActionEntry memo_entries[] = {
N_("_Save as iCalendar..."),
NULL,
NULL, /* XXX Add a tooltip! */
- G_CALLBACK (action_memo_save_as_cb) }
+ G_CALLBACK (action_memo_save_as_cb) },
+
+ /*** Menus ***/
+
+ { "memo-preview-menu",
+ NULL,
+ N_("_Preview"),
+ NULL,
+ NULL,
+ NULL }
};
static EPopupActionEntry memo_popup_entries[] = {
@@ -731,6 +766,33 @@ static GtkToggleActionEntry memo_toggle_entries[] = {
TRUE }
};
+static GtkRadioActionEntry memo_view_entries[] = {
+
+ /* This action represents the initial active memo view.
+ * It should not be visible in the UI, nor should it be
+ * possible to switch to it from another shell view. */
+ { "memo-view-initial",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ -1 },
+
+ { "memo-view-classic",
+ NULL,
+ N_("_Classic View"),
+ NULL,
+ N_("Show memo preview below the memo list"),
+ 0 },
+
+ { "memo-view-vertical",
+ NULL,
+ N_("_Vertical View"),
+ NULL,
+ N_("Show memo preview alongside the memo list"),
+ 1 }
+};
+
static GtkRadioActionEntry memo_filter_entries[] = {
{ "memo-filter-any-category",
@@ -829,6 +891,10 @@ e_memo_shell_view_actions_init (EMemoShellView *memo_shell_view)
action_group, memo_toggle_entries,
G_N_ELEMENTS (memo_toggle_entries), memo_shell_view);
gtk_action_group_add_radio_actions (
+ action_group, memo_view_entries,
+ G_N_ELEMENTS (memo_view_entries), -1,
+ G_CALLBACK (action_memo_view_cb), memo_shell_view);
+ gtk_action_group_add_radio_actions (
action_group, memo_search_entries,
G_N_ELEMENTS (memo_search_entries),
MEMO_SEARCH_SUMMARY_CONTAINS,
@@ -851,6 +917,10 @@ e_memo_shell_view_actions_init (EMemoShellView *memo_shell_view)
key = "/apps/evolution/calendar/display/show_memo_preview";
gconf_bridge_bind_property (bridge, key, object, "active");
+ object = G_OBJECT (ACTION (MEMO_VIEW_VERTICAL));
+ key = "/apps/evolution/calendar/display/memo_layout";
+ gconf_bridge_bind_property (bridge, key, object, "current-value");
+
/* Fine tuning. */
action = ACTION (MEMO_DELETE);
diff --git a/modules/calendar/e-memo-shell-view-actions.h b/modules/calendar/e-memo-shell-view-actions.h
index d6fd3ca514..d43d0239d9 100644
--- a/modules/calendar/e-memo-shell-view-actions.h
+++ b/modules/calendar/e-memo-shell-view-actions.h
@@ -47,6 +47,10 @@
E_SHELL_WINDOW_ACTION ((window), "memo-print")
#define E_SHELL_WINDOW_ACTION_MEMO_SAVE_AS(window) \
E_SHELL_WINDOW_ACTION ((window), "memo-save-as")
+#define E_SHELL_WINDOW_ACTION_MEMO_VIEW_CLASSIC(window) \
+ E_SHELL_WINDOW_ACTION ((window), "memo-view-classic")
+#define E_SHELL_WINDOW_ACTION_MEMO_VIEW_VERTICAL(window) \
+ E_SHELL_WINDOW_ACTION ((window), "memo-view-vertical")
/* Memo List Actions */
#define E_SHELL_WINDOW_ACTION_MEMO_LIST_COPY(window) \
diff --git a/modules/calendar/e-task-shell-content.c b/modules/calendar/e-task-shell-content.c
index c1333727bf..a095003978 100644
--- a/modules/calendar/e-task-shell-content.c
+++ b/modules/calendar/e-task-shell-content.c
@@ -25,13 +25,13 @@
#include "e-util/e-binding.h"
#include "e-util/gconf-bridge.h"
+#include "widgets/menus/gal-view-etable.h"
+#include "widgets/misc/e-paned.h"
#include "calendar/gui/comp-util.h"
#include "calendar/gui/e-cal-model-tasks.h"
#include "calendar/gui/e-calendar-table.h"
-#include "widgets/menus/gal-view-etable.h"
-
#define E_TASK_SHELL_CONTENT_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
((obj), E_TYPE_TASK_SHELL_CONTENT, ETaskShellContentPrivate))
@@ -53,13 +53,17 @@ struct _ETaskShellContentPrivate {
ECalModel *task_model;
GalViewInstance *view_instance;
+ GtkOrientation orientation;
gchar *current_uid;
+
+ guint preview_visible : 1;
};
enum {
PROP_0,
PROP_MODEL,
+ PROP_ORIENTATION,
PROP_PREVIEW_VISIBLE
};
@@ -258,6 +262,21 @@ task_shell_content_model_row_changed_cb (ETaskShellContent *task_shell_content,
task_shell_content_cursor_change_cb (task_shell_content, 0, table);
}
+static GtkOrientation
+task_shell_content_get_orientation (ETaskShellContent *task_shell_content)
+{
+ return task_shell_content->priv->orientation;
+}
+
+static void
+task_shell_content_set_orientation (ETaskShellContent *task_shell_content,
+ GtkOrientation orientation)
+{
+ task_shell_content->priv->orientation = orientation;
+
+ g_object_notify (G_OBJECT (task_shell_content), "orientation");
+}
+
static void
task_shell_content_set_property (GObject *object,
guint property_id,
@@ -265,6 +284,12 @@ task_shell_content_set_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
+ case PROP_ORIENTATION:
+ task_shell_content_set_orientation (
+ E_TASK_SHELL_CONTENT (object),
+ g_value_get_enum (value));
+ return;
+
case PROP_PREVIEW_VISIBLE:
e_task_shell_content_set_preview_visible (
E_TASK_SHELL_CONTENT (object),
@@ -284,13 +309,22 @@ task_shell_content_get_property (GObject *object,
switch (property_id) {
case PROP_MODEL:
g_value_set_object (
- value, e_task_shell_content_get_task_model (
+ value,
+ e_task_shell_content_get_task_model (
+ E_TASK_SHELL_CONTENT (object)));
+ return;
+
+ case PROP_ORIENTATION:
+ g_value_set_enum (
+ value,
+ task_shell_content_get_orientation (
E_TASK_SHELL_CONTENT (object)));
return;
case PROP_PREVIEW_VISIBLE:
g_value_set_boolean (
- value, e_task_shell_content_get_preview_visible (
+ value,
+ e_task_shell_content_get_preview_visible (
E_TASK_SHELL_CONTENT (object)));
return;
}
@@ -384,11 +418,15 @@ task_shell_content_constructed (GObject *object)
container = GTK_WIDGET (object);
- widget = gtk_vpaned_new ();
+ widget = e_paned_new (GTK_ORIENTATION_VERTICAL);
gtk_container_add (GTK_CONTAINER (container), widget);
priv->paned = g_object_ref (widget);
gtk_widget_show (widget);
+ e_binding_new (
+ G_OBJECT (object), "orientation",
+ G_OBJECT (widget), "orientation");
+
container = widget;
widget = e_calendar_table_new (shell_view, priv->task_model);
@@ -405,6 +443,10 @@ task_shell_content_constructed (GObject *object)
gtk_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE);
gtk_widget_show (widget);
+ e_binding_new (
+ G_OBJECT (object), "preview-visible",
+ G_OBJECT (widget), "visible");
+
container = widget;
widget = e_cal_component_preview_new ();
@@ -466,8 +508,12 @@ task_shell_content_constructed (GObject *object)
bridge = gconf_bridge_get ();
object = G_OBJECT (priv->paned);
+ key = "/apps/evolution/calendar/display/task_hpane_position";
+ gconf_bridge_bind_property_delayed (bridge, key, object, "hposition");
+
+ object = G_OBJECT (priv->paned);
key = "/apps/evolution/calendar/display/task_vpane_position";
- gconf_bridge_bind_property_delayed (bridge, key, object, "position");
+ gconf_bridge_bind_property_delayed (bridge, key, object, "vposition");
}
static guint32
@@ -577,7 +623,11 @@ task_shell_content_class_init (ETaskShellContentClass *class)
_("Preview is Visible"),
_("Whether the preview pane is visible"),
TRUE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_class_override_property (
+ object_class, PROP_ORIENTATION, "orientation");
}
static void
@@ -611,9 +661,19 @@ e_task_shell_content_register_type (GTypeModule *type_module)
NULL /* value_table */
};
+ static const GInterfaceInfo orientable_info = {
+ (GInterfaceInitFunc) NULL,
+ (GInterfaceFinalizeFunc) NULL,
+ NULL /* interface_data */
+ };
+
task_shell_content_type = g_type_module_register_type (
type_module, E_TYPE_SHELL_CONTENT,
"ETaskShellContent", &type_info, 0);
+
+ g_type_module_add_interface (
+ type_module, task_shell_content_type,
+ GTK_TYPE_ORIENTABLE, &orientable_info);
}
GtkWidget *
@@ -654,46 +714,31 @@ e_task_shell_content_get_task_table (ETaskShellContent *task_shell_content)
return E_CALENDAR_TABLE (task_shell_content->priv->task_table);
}
-GalViewInstance *
-e_task_shell_content_get_view_instance (ETaskShellContent *task_shell_content)
-{
- g_return_val_if_fail (
- E_IS_TASK_SHELL_CONTENT (task_shell_content), NULL);
-
- return task_shell_content->priv->view_instance;
-}
-
gboolean
e_task_shell_content_get_preview_visible (ETaskShellContent *task_shell_content)
{
- GtkPaned *paned;
- GtkWidget *child;
-
g_return_val_if_fail (
E_IS_TASK_SHELL_CONTENT (task_shell_content), FALSE);
- paned = GTK_PANED (task_shell_content->priv->paned);
- child = gtk_paned_get_child2 (paned);
-
- return GTK_WIDGET_VISIBLE (child);
+ return task_shell_content->priv->preview_visible;
}
void
e_task_shell_content_set_preview_visible (ETaskShellContent *task_shell_content,
gboolean preview_visible)
{
- GtkPaned *paned;
- GtkWidget *child;
-
g_return_if_fail (E_IS_TASK_SHELL_CONTENT (task_shell_content));
- paned = GTK_PANED (task_shell_content->priv->paned);
- child = gtk_paned_get_child2 (paned);
-
- if (preview_visible)
- gtk_widget_show (child);
- else
- gtk_widget_hide (child);
+ task_shell_content->priv->preview_visible = preview_visible;
g_object_notify (G_OBJECT (task_shell_content), "preview-visible");
}
+
+GalViewInstance *
+e_task_shell_content_get_view_instance (ETaskShellContent *task_shell_content)
+{
+ g_return_val_if_fail (
+ E_IS_TASK_SHELL_CONTENT (task_shell_content), NULL);
+
+ return task_shell_content->priv->view_instance;
+}
diff --git a/modules/calendar/e-task-shell-content.h b/modules/calendar/e-task-shell-content.h
index 7e0b2128a7..f5d4fc9665 100644
--- a/modules/calendar/e-task-shell-content.h
+++ b/modules/calendar/e-task-shell-content.h
@@ -86,14 +86,14 @@ ECalComponentPreview *
(ETaskShellContent *task_shell_content);
ECalendarTable *e_task_shell_content_get_task_table
(ETaskShellContent *task_shell_content);
-GalViewInstance *
- e_task_shell_content_get_view_instance
- (ETaskShellContent *task_shell_content);
gboolean e_task_shell_content_get_preview_visible
(ETaskShellContent *task_shell_content);
void e_task_shell_content_set_preview_visible
(ETaskShellContent *task_shell_content,
gboolean preview_visible);
+GalViewInstance *
+ e_task_shell_content_get_view_instance
+ (ETaskShellContent *task_shell_content);
G_END_DECLS
diff --git a/modules/calendar/e-task-shell-view-actions.c b/modules/calendar/e-task-shell-view-actions.c
index d1354026cb..d4fb94c2e5 100644
--- a/modules/calendar/e-task-shell-view-actions.c
+++ b/modules/calendar/e-task-shell-view-actions.c
@@ -675,6 +675,32 @@ action_task_search_cb (GtkRadioAction *action,
e_shell_content_set_search_hint (shell_content, search_hint);
}
+static void
+action_task_view_cb (GtkRadioAction *action,
+ GtkRadioAction *current,
+ ETaskShellView *task_shell_view)
+{
+ ETaskShellContent *task_shell_content;
+ GtkOrientable *orientable;
+ GtkOrientation orientation;
+
+ task_shell_content = task_shell_view->priv->task_shell_content;
+ orientable = GTK_ORIENTABLE (task_shell_content);
+
+ switch (gtk_radio_action_get_current_value (action)) {
+ case 0:
+ orientation = GTK_ORIENTATION_VERTICAL;
+ break;
+ case 1:
+ orientation = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ default:
+ g_return_if_reached ();
+ }
+
+ gtk_orientable_set_orientation (orientable, orientation);
+}
+
static GtkActionEntry task_entries[] = {
{ "task-assign",
@@ -817,6 +843,13 @@ static GtkActionEntry task_entries[] = {
N_("_Actions"),
NULL,
NULL,
+ NULL },
+
+ { "task-preview-menu",
+ NULL,
+ N_("_Preview"),
+ NULL,
+ NULL,
NULL }
};
@@ -898,6 +931,33 @@ static GtkToggleActionEntry task_toggle_entries[] = {
TRUE }
};
+static GtkRadioActionEntry task_view_entries[] = {
+
+ /* This action represents the inital active memo view.
+ * It should not be visible in the UI, nor should it be
+ * possible to switch to it from another shell view. */
+ { "task-view-initial",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ -1 },
+
+ { "task-view-classic",
+ NULL,
+ N_("_Classic View"),
+ NULL,
+ N_("Show task preview below the task list"),
+ 0 },
+
+ { "task-view-vertical",
+ NULL,
+ N_("_Vertical View"),
+ NULL,
+ N_("Show task preview alongside the task list"),
+ 1 }
+};
+
static GtkRadioActionEntry task_filter_entries[] = {
{ "task-filter-active-tasks",
@@ -1031,6 +1091,10 @@ e_task_shell_view_actions_init (ETaskShellView *task_shell_view)
action_group, task_toggle_entries,
G_N_ELEMENTS (task_toggle_entries), task_shell_view);
gtk_action_group_add_radio_actions (
+ action_group, task_view_entries,
+ G_N_ELEMENTS (task_view_entries), -1,
+ G_CALLBACK (action_task_view_cb), task_shell_view);
+ gtk_action_group_add_radio_actions (
action_group, task_search_entries,
G_N_ELEMENTS (task_search_entries),
TASK_SEARCH_SUMMARY_CONTAINS,
@@ -1053,6 +1117,10 @@ e_task_shell_view_actions_init (ETaskShellView *task_shell_view)
key = "/apps/evolution/calendar/display/show_task_preview";
gconf_bridge_bind_property (bridge, key, object, "active");
+ object = G_OBJECT (ACTION (TASK_VIEW_VERTICAL));
+ key = "/apps/evolution/calendar/display/task_layout";
+ gconf_bridge_bind_property (bridge, key, object, "current-value");
+
/* Fine tuning. */
action = ACTION (TASK_DELETE);
diff --git a/modules/calendar/e-task-shell-view-actions.h b/modules/calendar/e-task-shell-view-actions.h
index d7db39bcc9..daa70c36da 100644
--- a/modules/calendar/e-task-shell-view-actions.h
+++ b/modules/calendar/e-task-shell-view-actions.h
@@ -55,6 +55,10 @@
E_SHELL_WINDOW_ACTION ((window), "task-purge")
#define E_SHELL_WINDOW_ACTION_TASK_SAVE_AS(window) \
E_SHELL_WINDOW_ACTION ((window), "task-save-as")
+#define E_SHELL_WINDOW_ACTION_TASK_VIEW_CLASSIC(window) \
+ E_SHELL_WINDOW_ACTION ((window), "task-view-classic")
+#define E_SHELL_WINDOW_ACTION_TASK_VIEW_VERTICAL(window) \
+ E_SHELL_WINDOW_ACTION ((window), "task-view-vertical")
/* Task List Actions */
#define E_SHELL_WINDOW_ACTION_TASK_LIST_COPY(window) \
diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c
index 9bea68f9cb..3a4f5aed74 100644
--- a/modules/mail/e-mail-shell-content.c
+++ b/modules/mail/e-mail-shell-content.c
@@ -463,6 +463,10 @@ mail_shell_content_constructed (GObject *object)
gtk_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE);
gtk_widget_show (widget);
+ e_binding_new (
+ G_OBJECT (object), "preview-visible",
+ G_OBJECT (widget), "visible");
+
container = widget;
widget = gtk_scrolled_window_new (NULL, NULL);
@@ -783,22 +787,11 @@ void
e_mail_shell_content_set_preview_visible (EMailShellContent *mail_shell_content,
gboolean preview_visible)
{
- GtkPaned *paned;
- GtkWidget *child;
-
g_return_if_fail (E_IS_MAIL_SHELL_CONTENT (mail_shell_content));
if (preview_visible == mail_shell_content->priv->preview_visible)
return;
- paned = GTK_PANED (mail_shell_content->priv->paned);
- child = gtk_paned_get_child2 (paned);
-
- if (preview_visible)
- gtk_widget_show (child);
- else
- gtk_widget_hide (child);
-
/* If we're showing the preview, tell EMailReader to reload the
* selected message. This should force it to download the full
* message if necessary, so we don't get an empty preview. */
diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c
index 22bd86320b..08a8d12aa0 100644
--- a/modules/mail/e-mail-shell-view-actions.c
+++ b/modules/mail/e-mail-shell-view-actions.c
@@ -1322,7 +1322,7 @@ static GtkRadioActionEntry mail_view_entries[] = {
/* This action represents the initial active mail view.
* It should not be visible in the UI, nor should it be
* possible to switch to it from another shell view. */
- { "mail-view-internal",
+ { "mail-view-initial",
NULL,
NULL,
NULL,
diff --git a/ui/evolution-memos.ui b/ui/evolution-memos.ui
index 28abc7e997..f4d4129371 100644
--- a/ui/evolution-memos.ui
+++ b/ui/evolution-memos.ui
@@ -19,7 +19,14 @@
</placeholder>
</menu>
<menu action='view-menu'>
- <menuitem action='memo-preview'/>
+ <placeholder name='view-custom-menus'>
+ <menu action='memo-preview-menu'>
+ <menuitem action='memo-preview'/>
+ <separator/>
+ <menuitem action='memo-view-classic'/>
+ <menuitem action='memo-view-vertical'/>
+ </menu>
+ </placeholder>
</menu>
</menubar>
<toolbar name='main-toolbar'>
diff --git a/ui/evolution-tasks.ui b/ui/evolution-tasks.ui
index 073f7d450a..e8d6f768eb 100644
--- a/ui/evolution-tasks.ui
+++ b/ui/evolution-tasks.ui
@@ -22,7 +22,14 @@
</placeholder>
</menu>
<menu action='view-menu'>
- <menuitem action='task-preview'/>
+ <placeholder name='view-custom-menus'>
+ <menu action='task-preview-menu'>
+ <menuitem action='task-preview'/>
+ <separator/>
+ <menuitem action='task-view-classic'/>
+ <menuitem action='task-view-vertical'/>
+ </menu>
+ </placeholder>
</menu>
<placeholder name='custom-menus'>
<menu action='task-actions-menu'>
diff --git a/widgets/misc/e-paned.c b/widgets/misc/e-paned.c
index 350042413a..2c8a1820d7 100644
--- a/widgets/misc/e-paned.c
+++ b/widgets/misc/e-paned.c
@@ -47,6 +47,7 @@ static gpointer parent_class;
static void
paned_notify_orientation_cb (EPaned *paned)
{
+ /* Ignore the next "notify::position" emission. */
paned->priv->sync_position = TRUE;
gtk_widget_queue_resize (GTK_WIDGET (paned));