* Migration to GtkUIManager almost completed
authorSergio Villar Senin <svillar@igalia.com>
Tue, 9 Jan 2007 10:36:51 +0000 (10:36 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Tue, 9 Jan 2007 10:36:51 +0000 (10:36 +0000)
* Added a modest-ui.xml file with the interface description
* Moved modest-icon-names.h modest-edit-msg-window.h modest-main-window.h to widgets/
* Moved modest-ui.c to src/
* ModestUI now manages all the UI signals
* ModestWidgetFactory is now just a factory

pmo-trunk-r588

53 files changed:
docs/reference/Makefile.am
docs/reference/modest-docs.sgml
docs/reference/modest-sections.txt
docs/reference/tmpl/modest-account-mgr.sgml
docs/reference/tmpl/modest-conf.sgml
docs/reference/tmpl/modest-error.sgml
docs/reference/tmpl/modest-folder-view.sgml
docs/reference/tmpl/modest-header-view.sgml
docs/reference/tmpl/modest-icon-names.sgml
docs/reference/tmpl/modest-mail-operation.sgml
docs/reference/tmpl/modest-main-window.sgml
docs/reference/tmpl/modest-msg-view.sgml
docs/reference/tmpl/modest-store-widget.sgml
docs/reference/tmpl/modest-text-utils.sgml
docs/reference/tmpl/modest-tny-account-store.sgml
docs/reference/tmpl/modest-toolbar.sgml
docs/reference/tmpl/modest-ui.sgml
docs/reference/tmpl/modest-unused.sgml
docs/reference/tmpl/modest-widget-factory.sgml
src/Makefile.am
src/gtk/Makefile.am
src/gtk/modest-account-assistant.c
src/gtk/modest-edit-msg-window.c
src/gtk/modest-edit-msg-window.h [deleted file]
src/gtk/modest-icon-names.h [deleted file]
src/gtk/modest-main-window.c
src/gtk/modest-main-window.h [deleted file]
src/gtk/modest-store-widget.c
src/gtk/modest-ui.c [deleted file]
src/maemo/modest-edit-msg-window.h [deleted file]
src/maemo/modest-icon-names.h [deleted file]
src/maemo/modest-main-window.c
src/maemo/modest-main-window.h [deleted file]
src/maemo/modest-ui.c [deleted file]
src/modest-error.h
src/modest-mail-operation.c
src/modest-main.c
src/modest-text-utils.h
src/modest-tny-account-store.c
src/modest-tny-platform-factory.c
src/modest-ui.c [new file with mode: 0644]
src/modest-ui.h
src/modest-widget-factory.c
src/modest-widget-factory.h
src/ui/modest-ui.xml [new file with mode: 0644]
src/widgets/Makefile.am
src/widgets/modest-edit-msg-window.h [new file with mode: 0644]
src/widgets/modest-folder-view.c
src/widgets/modest-header-view.c
src/widgets/modest-header-view.h
src/widgets/modest-icon-names.h [new file with mode: 0644]
src/widgets/modest-main-window.h [new file with mode: 0644]
tests/check_text-utils.c

index eee2972..f454268 100644 (file)
@@ -102,6 +102,7 @@ GTKDOC_LIBS= \
        ${top_builddir}/src/modest-tny-msg-actions.o \
        ${top_builddir}/src/modest-tny-platform-factory.o \
        ${top_builddir}/src/modest-tny-stream-gtkhtml.o \
        ${top_builddir}/src/modest-tny-msg-actions.o \
        ${top_builddir}/src/modest-tny-platform-factory.o \
        ${top_builddir}/src/modest-tny-stream-gtkhtml.o \
+       ${top_builddir}/src/modest-ui.o \
        ${top_builddir}/src/modest-widget-factory.o \
        ${top_builddir}/src/modest-widget-memory.o
 
        ${top_builddir}/src/modest-widget-factory.o \
        ${top_builddir}/src/modest-widget-memory.o
 
index 6bfe3db..561d65b 100644 (file)
@@ -24,6 +24,7 @@
 <!ENTITY ModestTnyPlatformFactory SYSTEM "xml/modest-tny-platform-factory.xml">
 <!ENTITY ModestTnyStoreActions SYSTEM "xml/modest-tny-store-actions.xml">
 <!ENTITY ModestTnyStreamGtkhtml SYSTEM "xml/modest-tny-stream-gtkhtml.xml">
 <!ENTITY ModestTnyPlatformFactory SYSTEM "xml/modest-tny-platform-factory.xml">
 <!ENTITY ModestTnyStoreActions SYSTEM "xml/modest-tny-store-actions.xml">
 <!ENTITY ModestTnyStreamGtkhtml SYSTEM "xml/modest-tny-stream-gtkhtml.xml">
+<!ENTITY ModestUI SYSTEM "xml/modest-ui.xml">
 <!ENTITY ModestWidgetFactory SYSTEM "xml/modest-widget-factory.xml">
 <!ENTITY ModestWidgetMemory SYSTEM "xml/modest-widget-memory.xml">
 
 <!ENTITY ModestWidgetFactory SYSTEM "xml/modest-widget-factory.xml">
 <!ENTITY ModestWidgetMemory SYSTEM "xml/modest-widget-memory.xml">
 
 <!ENTITY widgets-ModestComboBox SYSTEM "xml/modest-combo-box.xml">
 <!ENTITY widgets-ModestFolderView SYSTEM "xml/modest-folder-view.xml">
 <!ENTITY widgets-ModestHeaderView SYSTEM "xml/modest-header-view.xml">
 <!ENTITY widgets-ModestComboBox SYSTEM "xml/modest-combo-box.xml">
 <!ENTITY widgets-ModestFolderView SYSTEM "xml/modest-folder-view.xml">
 <!ENTITY widgets-ModestHeaderView SYSTEM "xml/modest-header-view.xml">
+<!ENTITY widgets-ModestMainWindow SYSTEM "xml/modest-main-window.xml">
 <!ENTITY widgets-ModestMsgView SYSTEM "xml/modest-msg-view.xml">
 <!ENTITY widgets-modestToolbar SYSTEM "xml/modest-toolbar.xml">
 
 <!ENTITY gtk-ModestAccountViewWindow SYSTEM "xml/modest-account-view-window.xml">
 <!ENTITY gtk-ModestAccountAssistant SYSTEM "xml/modest-account-assistant.xml">
 <!ENTITY gtk-ModestEditMsgWindow SYSTEM "xml/modest-edit-msg-window.xml">
 <!ENTITY widgets-ModestMsgView SYSTEM "xml/modest-msg-view.xml">
 <!ENTITY widgets-modestToolbar SYSTEM "xml/modest-toolbar.xml">
 
 <!ENTITY gtk-ModestAccountViewWindow SYSTEM "xml/modest-account-view-window.xml">
 <!ENTITY gtk-ModestAccountAssistant SYSTEM "xml/modest-account-assistant.xml">
 <!ENTITY gtk-ModestEditMsgWindow SYSTEM "xml/modest-edit-msg-window.xml">
-<!ENTITY gtk-ModestMainWindow SYSTEM "xml/modest-main-window.xml">
 <!ENTITY gtk-ModestStoreWidget SYSTEM "xml/modest-store-widget.xml">
 <!ENTITY gtk-modestTransportWidget SYSTEM "xml/modest-transport-widget.xml">
 <!ENTITY gtk-ModestStoreWidget SYSTEM "xml/modest-store-widget.xml">
 <!ENTITY gtk-modestTransportWidget SYSTEM "xml/modest-transport-widget.xml">
-<!ENTITY gtk-modestUi SYSTEM "xml/modest-ui.xml">
 
 <!ENTITY index-Object-Tree SYSTEM "xml/tree_index.sgml">
 
 
 <!ENTITY index-Object-Tree SYSTEM "xml/tree_index.sgml">
 
           &ModestTnyPlatformFactory;
           &ModestTnyStoreActions;
           &ModestTnyStreamGtkhtml;
           &ModestTnyPlatformFactory;
           &ModestTnyStoreActions;
           &ModestTnyStreamGtkhtml;
+          &ModestUI;
           &ModestWidgetFactory;
           &ModestWidgetMemory;
       </chapter>
           &ModestWidgetFactory;
           &ModestWidgetMemory;
       </chapter>
-      <chapter id="gtk">
-        <title>Gtk</title>
-          &gtk-ModestAccountViewWindow;
-          &gtk-ModestAccountAssistant;
-          &gtk-ModestEditMsgWindow;
-          &gtk-ModestMainWindow;
-          &gtk-ModestStoreWidget;
-          &gtk-modestTransportWidget;
-          &gtk-modestUi;
-      </chapter>
       <chapter id="widgets">
         <title>Widgets</title>
           &widgets-ModestAccountView;
           &widgets-ModestComboBox;
           &widgets-ModestFolderView;
           &widgets-ModestHeaderView;
       <chapter id="widgets">
         <title>Widgets</title>
           &widgets-ModestAccountView;
           &widgets-ModestComboBox;
           &widgets-ModestFolderView;
           &widgets-ModestHeaderView;
+          &widgets-ModestMainWindow;
           &widgets-ModestMsgView;
           &widgets-modestToolbar;
       </chapter>
           &widgets-ModestMsgView;
           &widgets-modestToolbar;
       </chapter>
+      <chapter id="gtk">
+        <title>Gtk</title>
+          &gtk-ModestAccountViewWindow;
+          &gtk-ModestAccountAssistant;
+          &gtk-ModestEditMsgWindow;
+          &gtk-ModestStoreWidget;
+          &gtk-modestTransportWidget;
+      </chapter>
   </reference>
 
 
   </reference>
 
 
index be5f2d6..859d317 100644 (file)
@@ -382,6 +382,7 @@ MODEST_EDIT_MSG_WINDOW_GET_CLASS
 <TITLE>ModestMainWindow</TITLE>
 ModestMainWindow
 modest_main_window_new
 <TITLE>ModestMainWindow</TITLE>
 ModestMainWindow
 modest_main_window_new
+modest_main_window_get_widget_factory
 <SUBSECTION Standard>
 MODEST_MAIN_WINDOW
 MODEST_IS_MAIN_WINDOW
 <SUBSECTION Standard>
 MODEST_MAIN_WINDOW
 MODEST_IS_MAIN_WINDOW
@@ -802,6 +803,7 @@ MODEST_EDIT_MSG_WINDOW_GET_CLASS
 <TITLE>ModestMainWindow</TITLE>
 ModestMainWindow
 modest_main_window_new
 <TITLE>ModestMainWindow</TITLE>
 ModestMainWindow
 modest_main_window_new
+modest_main_window_get_widget_factory
 <SUBSECTION Standard>
 MODEST_MAIN_WINDOW
 MODEST_IS_MAIN_WINDOW
 <SUBSECTION Standard>
 MODEST_MAIN_WINDOW
 MODEST_IS_MAIN_WINDOW
@@ -1196,6 +1198,7 @@ MODEST_EDIT_MSG_WINDOW_GET_CLASS
 <TITLE>ModestMainWindow</TITLE>
 ModestMainWindow
 modest_main_window_new
 <TITLE>ModestMainWindow</TITLE>
 ModestMainWindow
 modest_main_window_new
+modest_main_window_get_widget_factory
 <SUBSECTION Standard>
 MODEST_MAIN_WINDOW
 MODEST_IS_MAIN_WINDOW
 <SUBSECTION Standard>
 MODEST_MAIN_WINDOW
 MODEST_IS_MAIN_WINDOW
@@ -1456,7 +1459,10 @@ modest_text_utils_inline
 modest_text_utils_remove_address
 modest_text_utils_convert_to_html
 modest_text_utils_strftime
 modest_text_utils_remove_address
 modest_text_utils_convert_to_html
 modest_text_utils_strftime
-modest_text_utils_display_address
+modest_text_utils_get_display_address
+modest_text_utils_get_subject_prefix_len
+modest_text_utils_utf8_strcmp
+modest_text_utils_get_display_date
 </SECTION>
 
 <SECTION>
 </SECTION>
 
 <SECTION>
@@ -1539,19 +1545,6 @@ modest_proto_auth_protos
 </SECTION>
 
 <SECTION>
 </SECTION>
 
 <SECTION>
-<FILE>modest-widget-memory</FILE>
-modest_widget_memory_save
-modest_widget_memory_restore
-</SECTION>
-
-<SECTION>
-<FILE>modest-tny-msg-actions</FILE>
-modest_tny_msg_actions_find_body_part
-modest_tny_msg_actions_find_nth_part
-modest_tny_msg_actions_find_body
-</SECTION>
-
-<SECTION>
 <FILE>modest-marshal</FILE>
 modest_marshal_VOID__POINTER_POINTER
 modest_marshal_VOID__POINTER_POINTER_POINTER
 <FILE>modest-marshal</FILE>
 modest_marshal_VOID__POINTER_POINTER
 modest_marshal_VOID__POINTER_POINTER_POINTER
@@ -1567,6 +1560,19 @@ modest_marshal_VOID__STRING_POINTER_POINTER_POINTER
 </SECTION>
 
 <SECTION>
 </SECTION>
 
 <SECTION>
+<FILE>modest-widget-memory</FILE>
+modest_widget_memory_save
+modest_widget_memory_restore
+</SECTION>
+
+<SECTION>
+<FILE>modest-tny-msg-actions</FILE>
+modest_tny_msg_actions_find_body_part
+modest_tny_msg_actions_find_nth_part
+modest_tny_msg_actions_find_body
+</SECTION>
+
+<SECTION>
 <FILE>modest-error</FILE>
 ModestErrorDomain
 ModestErrorCode
 <FILE>modest-error</FILE>
 ModestErrorDomain
 ModestErrorCode
@@ -1603,6 +1609,26 @@ MODEST_TOOLBAR_ICON_DELETE
 MODEST_TOOLBAR_ICON_NEXT
 MODEST_TOOLBAR_ICON_PREV
 MODEST_TOOLBAR_ICON_STOP
 MODEST_TOOLBAR_ICON_NEXT
 MODEST_TOOLBAR_ICON_PREV
 MODEST_TOOLBAR_ICON_STOP
+MODEST_STOCK_MAIL_SEND
+MODEST_STOCK_NEW_MAIL
+MODEST_STOCK_SEND_RECEIVE
+MODEST_STOCK_REPLY
+MODEST_STOCK_REPLY_ALL
+MODEST_STOCK_FORWARD
+MODEST_STOCK_DELETE
+MODEST_STOCK_NEXT
+MODEST_STOCK_PREV
+MODEST_STOCK_STOP
+</SECTION>
+
+<SECTION>
+<FILE>modest-ui-actions</FILE>
+modest_ui_actions_on_about
+modest_ui_actions_on_delete
+modest_ui_actions_on_quit
+modest_ui_actions_on_accounts
+modest_ui_actions_on_new_msg
+modest_ui_actions_on_reply_forward
 </SECTION>
 
 <SECTION>
 </SECTION>
 
 <SECTION>
@@ -1647,39 +1673,6 @@ MODEST_TOOLBAR_ICON_STOP
 </SECTION>
 
 <SECTION>
 </SECTION>
 
 <SECTION>
-<FILE>modest-icon-names</FILE>
-PIXMAP_PREFIX
-MODEST_APP_ICON
-MODEST_HEADER_ICON_READ
-MODEST_HEADER_ICON_UNREAD
-MODEST_HEADER_ICON_DELETED
-MODEST_HEADER_ICON_ATTACH
-MODEST_FOLDER_ICON_OPEN
-MODEST_FOLDER_ICON_CLOSED
-MODEST_FOLDER_ICON_ACCOUNT
-MODEST_FOLDER_ICON_INBOX
-MODEST_FOLDER_ICON_OUTBOX
-MODEST_FOLDER_ICON_SENT
-MODEST_FOLDER_ICON_TRASH
-MODEST_FOLDER_ICON_JUNK
-MODEST_FOLDER_ICON_DRAFTS
-MODEST_FOLDER_ICON_NORMAL
-MODEST_FOLDER_ICON_CONTACTS
-MODEST_FOLDER_ICON_NOTES
-MODEST_FOLDER_ICON_CALENDAR
-MODEST_TOOLBAR_ICON_MAIL_SEND
-MODEST_TOOLBAR_ICON_NEW_MAIL
-MODEST_TOOLBAR_ICON_SEND_RECEIVE
-MODEST_TOOLBAR_ICON_REPLY
-MODEST_TOOLBAR_ICON_REPLY_ALL
-MODEST_TOOLBAR_ICON_FORWARD
-MODEST_TOOLBAR_ICON_DELETE
-MODEST_TOOLBAR_ICON_NEXT
-MODEST_TOOLBAR_ICON_PREV
-MODEST_TOOLBAR_ICON_STOP
-</SECTION>
-
-<SECTION>
 <FILE>modest-tny-store-actions</FILE>
 modest_tny_store_actions_create_folder
 modest_tny_store_actions_remove_folder
 <FILE>modest-tny-store-actions</FILE>
 modest_tny_store_actions_create_folder
 modest_tny_store_actions_remove_folder
@@ -1720,7 +1713,10 @@ modest_text_utils_inline
 modest_text_utils_remove_address
 modest_text_utils_convert_to_html
 modest_text_utils_strftime
 modest_text_utils_remove_address
 modest_text_utils_convert_to_html
 modest_text_utils_strftime
-modest_text_utils_display_address
+modest_text_utils_get_display_address
+modest_text_utils_get_subject_prefix_len
+modest_text_utils_utf8_strcmp
+modest_text_utils_get_display_date
 </SECTION>
 
 <SECTION>
 </SECTION>
 
 <SECTION>
@@ -1803,19 +1799,6 @@ modest_proto_auth_protos
 </SECTION>
 
 <SECTION>
 </SECTION>
 
 <SECTION>
-<FILE>modest-widget-memory</FILE>
-modest_widget_memory_save
-modest_widget_memory_restore
-</SECTION>
-
-<SECTION>
-<FILE>modest-tny-msg-actions</FILE>
-modest_tny_msg_actions_find_body_part
-modest_tny_msg_actions_find_nth_part
-modest_tny_msg_actions_find_body
-</SECTION>
-
-<SECTION>
 <FILE>modest-marshal</FILE>
 modest_marshal_VOID__POINTER_POINTER
 modest_marshal_VOID__POINTER_POINTER_POINTER
 <FILE>modest-marshal</FILE>
 modest_marshal_VOID__POINTER_POINTER
 modest_marshal_VOID__POINTER_POINTER_POINTER
@@ -1831,6 +1814,19 @@ modest_marshal_VOID__STRING_POINTER_POINTER_POINTER
 </SECTION>
 
 <SECTION>
 </SECTION>
 
 <SECTION>
+<FILE>modest-widget-memory</FILE>
+modest_widget_memory_save
+modest_widget_memory_restore
+</SECTION>
+
+<SECTION>
+<FILE>modest-tny-msg-actions</FILE>
+modest_tny_msg_actions_find_body_part
+modest_tny_msg_actions_find_nth_part
+modest_tny_msg_actions_find_body
+</SECTION>
+
+<SECTION>
 <FILE>modest-error</FILE>
 ModestErrorDomain
 ModestErrorCode
 <FILE>modest-error</FILE>
 ModestErrorDomain
 ModestErrorCode
@@ -1867,6 +1863,26 @@ MODEST_TOOLBAR_ICON_DELETE
 MODEST_TOOLBAR_ICON_NEXT
 MODEST_TOOLBAR_ICON_PREV
 MODEST_TOOLBAR_ICON_STOP
 MODEST_TOOLBAR_ICON_NEXT
 MODEST_TOOLBAR_ICON_PREV
 MODEST_TOOLBAR_ICON_STOP
+MODEST_STOCK_MAIL_SEND
+MODEST_STOCK_NEW_MAIL
+MODEST_STOCK_SEND_RECEIVE
+MODEST_STOCK_REPLY
+MODEST_STOCK_REPLY_ALL
+MODEST_STOCK_FORWARD
+MODEST_STOCK_DELETE
+MODEST_STOCK_NEXT
+MODEST_STOCK_PREV
+MODEST_STOCK_STOP
+</SECTION>
+
+<SECTION>
+<FILE>modest-ui-actions</FILE>
+modest_ui_actions_on_about
+modest_ui_actions_on_delete
+modest_ui_actions_on_quit
+modest_ui_actions_on_accounts
+modest_ui_actions_on_new_msg
+modest_ui_actions_on_reply_forward
 </SECTION>
 
 <SECTION>
 </SECTION>
 
 <SECTION>
index f4d862c..9451b66 100644 (file)
@@ -44,6 +44,25 @@ ModestAccountMgr
 @arg1: 
 @arg2: 
 
 @arg1: 
 @arg2: 
 
+<!-- ##### SIGNAL ModestAccountMgr::account-changed ##### -->
+<para>
+
+</para>
+
+@modestaccountmgr: the object which received the signal.
+@arg1: 
+@arg2: 
+@arg3: 
+
+<!-- ##### SIGNAL ModestAccountMgr::account-removed ##### -->
+<para>
+
+</para>
+
+@modestaccountmgr: the object which received the signal.
+@arg1: 
+@arg2: 
+
 <!-- ##### STRUCT ModestServerAccountData ##### -->
 <para>
 
 <!-- ##### STRUCT ModestServerAccountData ##### -->
 <para>
 
index 1381572..bc6dde9 100644 (file)
@@ -52,6 +52,15 @@ ModestConf
 @arg1: 
 @arg2: 
 
 @arg1: 
 @arg2: 
 
+<!-- ##### SIGNAL ModestConf::key-changed ##### -->
+<para>
+
+</para>
+
+@modestconf: the object which received the signal.
+@arg1: 
+@arg2: 
+
 <!-- ##### FUNCTION modest_conf_new ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_conf_new ##### -->
 <para>
 
index 19e571a..c304ca4 100644 (file)
@@ -34,4 +34,5 @@ modest-error
 @MODEST_MAIL_OPERATION_ERROR_BAD_ACCOUNT: 
 @MODEST_MAIL_OPERATION_ERROR_MISSING_PARAMETER: 
 @MODEST_MAIL_OPERATION_ERROR_OPERATION_CANCELED: 
 @MODEST_MAIL_OPERATION_ERROR_BAD_ACCOUNT: 
 @MODEST_MAIL_OPERATION_ERROR_MISSING_PARAMETER: 
 @MODEST_MAIL_OPERATION_ERROR_OPERATION_CANCELED: 
+@MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND: 
 
 
index a28a5a2..c743bf6 100644 (file)
@@ -34,6 +34,24 @@ ModestFolderView
 @: 
 @: 
 
 @: 
 @: 
 
+<!-- ##### SIGNAL ModestFolderView::folder-selection-changed ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+@: 
+
+<!-- ##### SIGNAL ModestFolderView::folder-selection-changed ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+@: 
+
 <!-- ##### FUNCTION modest_folder_view_new ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_folder_view_new ##### -->
 <para>
 
index bd0c464..78d291e 100644 (file)
@@ -65,6 +65,14 @@ ModestHeaderView
 </para>
 
 
 </para>
 
 
+<!-- ##### SIGNAL ModestHeaderView::header-selected ##### -->
+<para>
+
+</para>
+
+@modestheaderview: the object which received the signal.
+@arg1: 
+
 <!-- ##### SIGNAL ModestHeaderView::item-not-found ##### -->
 <para>
 
 <!-- ##### SIGNAL ModestHeaderView::item-not-found ##### -->
 <para>
 
@@ -73,7 +81,25 @@ ModestHeaderView
 @: 
 @: 
 
 @: 
 @: 
 
-<!-- ##### SIGNAL ModestHeaderView::message-selected ##### -->
+<!-- ##### SIGNAL ModestHeaderView::status-update ##### -->
+<para>
+
+</para>
+
+@modestheaderview: the object which received the signal.
+@arg1: 
+@arg2: 
+@arg3: 
+
+<!-- ##### SIGNAL ModestHeaderView::header-selected ##### -->
+<para>
+
+</para>
+
+@modestheaderview: the object which received the signal.
+@arg1: 
+
+<!-- ##### SIGNAL ModestHeaderView::item-not-found ##### -->
 <para>
 
 </para>
 <para>
 
 </para>
@@ -86,10 +112,36 @@ ModestHeaderView
 
 </para>
 
 
 </para>
 
+@modestheaderview: the object which received the signal.
+@arg1: 
+@arg2: 
+@arg3: 
+
+<!-- ##### SIGNAL ModestHeaderView::header-selected ##### -->
+<para>
+
+</para>
+
+@modestheaderview: the object which received the signal.
+@arg1: 
+
+<!-- ##### SIGNAL ModestHeaderView::item-not-found ##### -->
+<para>
+
+</para>
+
 @: 
 @: 
 @: 
 @: 
-@: 
-@: 
+
+<!-- ##### SIGNAL ModestHeaderView::status-update ##### -->
+<para>
+
+</para>
+
+@modestheaderview: the object which received the signal.
+@arg1: 
+@arg2: 
+@arg3: 
 
 <!-- ##### FUNCTION modest_header_view_new ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_header_view_new ##### -->
 <para>
index 9e44b91..065178e 100644 (file)
@@ -19,13 +19,6 @@ modest-icon-names
 <!-- ##### SECTION Stability_Level ##### -->
 
 
 <!-- ##### SECTION Stability_Level ##### -->
 
 
-<!-- ##### MACRO PIXMAP_PREFIX ##### -->
-<para>
-
-</para>
-
-
-
 <!-- ##### MACRO MODEST_APP_ICON ##### -->
 <para>
 
 <!-- ##### MACRO MODEST_APP_ICON ##### -->
 <para>
 
index 9668d88..8d15059 100644 (file)
@@ -69,6 +69,13 @@ ModestMailOperation
 
 @: 
 
 
 @: 
 
+<!-- ##### SIGNAL ModestMailOperation::progress-changed ##### -->
+<para>
+
+</para>
+
+@: 
+
 <!-- ##### FUNCTION modest_mail_operation_new ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_mail_operation_new ##### -->
 <para>
 
index 45fea64..935d576 100644 (file)
@@ -31,6 +31,7 @@ ModestMainWindow
 </para>
 
 @factory: 
 </para>
 
 @factory: 
+@ui_manager: 
 @Returns: 
 
 
 @Returns: 
 
 
index 291af8f..9b7de65 100644 (file)
@@ -49,6 +49,54 @@ ModestMsgView
 @: 
 @: 
 
 @: 
 @: 
 
+<!-- ##### SIGNAL ModestMsgView::attachment-clicked ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+
+<!-- ##### SIGNAL ModestMsgView::link-clicked ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+
+<!-- ##### SIGNAL ModestMsgView::link-hover ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+
+<!-- ##### SIGNAL ModestMsgView::attachment-clicked ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+
+<!-- ##### SIGNAL ModestMsgView::link-clicked ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+
+<!-- ##### SIGNAL ModestMsgView::link-hover ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+
 <!-- ##### FUNCTION modest_msg_view_new ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_msg_view_new ##### -->
 <para>
 
index 1b41490..67aa850 100644 (file)
@@ -39,6 +39,27 @@ ModestStoreWidget
 
 @modeststorewidget: the object which received the signal.
 
 
 @modeststorewidget: the object which received the signal.
 
+<!-- ##### SIGNAL ModestStoreWidget::data-changed ##### -->
+<para>
+
+</para>
+
+@modeststorewidget: the object which received the signal.
+
+<!-- ##### SIGNAL ModestStoreWidget::data-changed ##### -->
+<para>
+
+</para>
+
+@modeststorewidget: the object which received the signal.
+
+<!-- ##### SIGNAL ModestStoreWidget::data-changed ##### -->
+<para>
+
+</para>
+
+@modeststorewidget: the object which received the signal.
+
 <!-- ##### FUNCTION modest_store_widget_new ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_store_widget_new ##### -->
 <para>
 
index bab1d21..f40aab9 100644 (file)
@@ -99,7 +99,7 @@ modest-text-utils
 @Returns: 
 
 
 @Returns: 
 
 
-<!-- ##### FUNCTION modest_text_utils_display_address ##### -->
+<!-- ##### FUNCTION modest_text_utils_get_display_address ##### -->
 <para>
 
 </para>
 <para>
 
 </para>
@@ -108,3 +108,32 @@ modest-text-utils
 @Returns: 
 
 
 @Returns: 
 
 
+<!-- ##### FUNCTION modest_text_utils_get_subject_prefix_len ##### -->
+<para>
+
+</para>
+
+@subject: 
+@Returns: 
+
+
+<!-- ##### FUNCTION modest_text_utils_utf8_strcmp ##### -->
+<para>
+
+</para>
+
+@s1: 
+@s2: 
+@insensitive: 
+@Returns: 
+
+
+<!-- ##### FUNCTION modest_text_utils_get_display_date ##### -->
+<para>
+
+</para>
+
+@date: 
+@Returns: 
+
+
index 3673db2..dbf4c6c 100644 (file)
@@ -50,6 +50,25 @@ ModestTnyAccountStore
 @Param4: 
 @Param5: 
 
 @Param4: 
 @Param5: 
 
+<!-- ##### SIGNAL ModestTnyAccountStore::account-update ##### -->
+<para>
+
+</para>
+
+@modesttnyaccountstore: the object which received the signal.
+@arg1: 
+
+<!-- ##### SIGNAL ModestTnyAccountStore::password-requested ##### -->
+<para>
+
+</para>
+
+@: 
+@Param2: 
+@Param3: 
+@Param4: 
+@Param5: 
+
 <!-- ##### FUNCTION modest_tny_account_store_new ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_tny_account_store_new ##### -->
 <para>
 
index 9699dce..b2c1084 100644 (file)
@@ -52,6 +52,22 @@ ModestToolbar
 @: 
 @: 
 
 @: 
 @: 
 
+<!-- ##### SIGNAL ModestToolbar::button-clicked ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+
+<!-- ##### SIGNAL ModestToolbar::button-clicked ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+
 <!-- ##### FUNCTION modest_toolbar_new ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_toolbar_new ##### -->
 <para>
 
index 9d0df49..057d514 100644 (file)
@@ -30,6 +30,7 @@ ModestUI
 
 </para>
 
 
 </para>
 
+@account_store: 
 @Returns: 
 
 
 @Returns: 
 
 
index 22a3922..c9f58b0 100644 (file)
@@ -233,6 +233,14 @@ modest.glade
 
 @parent: 
 
 
 @parent: 
 
+<!-- ##### SIGNAL ModestHeaderView::message-selected ##### -->
+<para>
+
+</para>
+
+@modestheaderview: the object which received the signal.
+@arg1: 
+
 <!-- ##### STRUCT ModestOpenWindow ##### -->
 <para>
 
 <!-- ##### STRUCT ModestOpenWindow ##### -->
 <para>
 
@@ -283,6 +291,12 @@ modest.glade
 </para>
 
 
 </para>
 
 
+<!-- ##### MACRO PIXMAP_PREFIX ##### -->
+<para>
+
+</para>
+
+
 <!-- ##### FUNCTION modest_account_mgr_get_account_bool ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_account_mgr_get_account_bool ##### -->
 <para>
 
@@ -532,6 +546,14 @@ modest.glade
 @subject: 
 @Returns: 
 
 @subject: 
 @Returns: 
 
+<!-- ##### FUNCTION modest_text_utils_display_address ##### -->
+<para>
+
+</para>
+
+@address: 
+@Returns: 
+
 <!-- ##### FUNCTION modest_text_utils_remove_mail_from_mail_list ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_text_utils_remove_mail_from_mail_list ##### -->
 <para>
 
@@ -637,6 +659,54 @@ modest.glade
 @attachments_list: 
 @Returns: 
 
 @attachments_list: 
 @Returns: 
 
+<!-- ##### FUNCTION modest_ui_actions_on_about ##### -->
+<para>
+
+</para>
+
+@widget: 
+@user_data: 
+
+<!-- ##### FUNCTION modest_ui_actions_on_accounts ##### -->
+<para>
+
+</para>
+
+@widget: 
+@main_window: 
+
+<!-- ##### FUNCTION modest_ui_actions_on_delete ##### -->
+<para>
+
+</para>
+
+@widget: 
+@main_window: 
+
+<!-- ##### FUNCTION modest_ui_actions_on_new_msg ##### -->
+<para>
+
+</para>
+
+@widget: 
+@main_window: 
+
+<!-- ##### FUNCTION modest_ui_actions_on_quit ##### -->
+<para>
+
+</para>
+
+@widget: 
+@main_window: 
+
+<!-- ##### FUNCTION modest_ui_actions_on_reply_forward ##### -->
+<para>
+
+</para>
+
+@widget: 
+@main_window: 
+
 <!-- ##### FUNCTION modest_ui_editor_window_set_bcc_header ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_ui_editor_window_set_bcc_header ##### -->
 <para>
 
@@ -746,6 +816,24 @@ modest.glade
 @ui: 
 @Returns: 
 
 @ui: 
 @Returns: 
 
+<!-- ##### FUNCTION modest_widget_factory_get_edit_toolbar ##### -->
+<para>
+
+</para>
+
+@self: 
+@items: 
+@Returns: 
+
+<!-- ##### FUNCTION modest_widget_factory_get_main_toolbar ##### -->
+<para>
+
+</para>
+
+@self: 
+@items: 
+@Returns: 
+
 <!-- ##### FUNCTION modest_window_mgr_find_by_id ##### -->
 <para>
 
 <!-- ##### FUNCTION modest_window_mgr_find_by_id ##### -->
 <para>
 
index a6520df..d529a32 100644 (file)
@@ -126,23 +126,3 @@ ModestWidgetFactory
 @Returns: 
 
 
 @Returns: 
 
 
-<!-- ##### FUNCTION modest_widget_factory_get_main_toolbar ##### -->
-<para>
-
-</para>
-
-@self: 
-@items: 
-@Returns: 
-
-
-<!-- ##### FUNCTION modest_widget_factory_get_edit_toolbar ##### -->
-<para>
-
-</para>
-
-@self: 
-@items: 
-@Returns: 
-
-
index 766f8b1..c33e44b 100644 (file)
@@ -8,11 +8,14 @@ INCLUDES=\
        $(MODEST_GSTUFF_CFLAGS)\
        $(MODEST_LIBTINYMAIL_GNOME_DESKTOP_CFLAGS) \
        $(MODEST_LIBTINYMAIL_MAEMO_CFLAGS) \
        $(MODEST_GSTUFF_CFLAGS)\
        $(MODEST_LIBTINYMAIL_GNOME_DESKTOP_CFLAGS) \
        $(MODEST_LIBTINYMAIL_MAEMO_CFLAGS) \
+       -I ${top_srcdir}/src/widgets \
        -I$(MODEST_PLATFORM) \
        -DPREFIX=\"@prefix@\" \
        -I$(MODEST_PLATFORM) \
        -DPREFIX=\"@prefix@\" \
-       -DMODESTLOCALEDIR=\""$(modestlocaledir)"\" \
+       -DMODEST_LOCALEDIR=\"$(MODEST_LOCALEDIR)\" \
        -DMODEST_PLATFORM=\"$(MODEST_PLATFORM)\" \
        -DMODEST_PLATFORM=\"$(MODEST_PLATFORM)\" \
-       -DMODEST_PLATFORM_ID=$(MODEST_PLATFORM_ID)
+       -DMODEST_PLATFORM_ID=$(MODEST_PLATFORM_ID) \
+       -DPIXMAP_PREFIX=\"${datadir}/pixmaps/modest/\" \
+       -DMODEST_UIDIR=\"$(datadir)/modest/ui/\"
 
 BUILT_SOURCES = modest-marshal.c modest-marshal.h
 
 
 BUILT_SOURCES = modest-marshal.c modest-marshal.h
 
@@ -52,6 +55,7 @@ modest_SOURCES=\
        modest-protocol-mgr.c\
        modest-proto.h\
        modest-proto.c\
        modest-protocol-mgr.c\
        modest-proto.h\
        modest-proto.c\
+       modest-ui.c\
        modest-ui.h\
        modest-text-utils.h\
        modest-text-utils.c\
        modest-ui.h\
        modest-text-utils.h\
        modest-text-utils.c\
@@ -78,4 +82,10 @@ modest_LDADD =                                               \
        $(MODEST_PLATFORM)/libmodest-ui.la              \
        widgets/libmodest-widgets.la                    
 
        $(MODEST_PLATFORM)/libmodest-ui.la              \
        widgets/libmodest-widgets.la                    
 
-EXTRA_DIST=modest-marshal.list
+EXTRA_DIST=modest-marshal.list ui/*
+
+UI_FILES=\
+       ui/modest-ui.xml
+
+uidir = $(datadir)/modest/ui
+ui_DATA = $(UI_FILES)
index 7c914b2..5f56d63 100644 (file)
@@ -9,8 +9,11 @@
 INCLUDES=\
        $(MODEST_GSTUFF_CFLAGS) \
        $(MODEST_LIBTINYMAIL_GNOME_DESKTOP_CFLAGS) \
 INCLUDES=\
        $(MODEST_GSTUFF_CFLAGS) \
        $(MODEST_LIBTINYMAIL_GNOME_DESKTOP_CFLAGS) \
+       -I ${top_srcdir}/src/widgets  \
        -I ${top_srcdir}/src  \
        -DPREFIX=\"@prefix@\" \
        -I ${top_srcdir}/src  \
        -DPREFIX=\"@prefix@\" \
+       -DPIXMAP_PREFIX=\"${datadir}/pixmaps/modest/\" \
+       -DMODEST_UIDIR=\""$(datadir)/modest/ui/"\" \
        -Wall
 
 noinst_LTLIBRARIES=\
        -Wall
 
 noinst_LTLIBRARIES=\
@@ -21,8 +24,6 @@ PIXMAP_FILES=\
        pixmaps/*.svg
 
 libmodest_ui_la_SOURCES=              \
        pixmaps/*.svg
 
 libmodest_ui_la_SOURCES=              \
-       modest-ui.c                   \
-       modest-icon-names.h           \
        modest-main-window.h          \
        modest-main-window.c          \
        modest-account-view-window.c  \
        modest-main-window.h          \
        modest-main-window.c          \
        modest-account-view-window.c  \
@@ -42,5 +43,5 @@ LDADD = \
 
 EXTRA_DIST=pixmaps/*
 
 
 EXTRA_DIST=pixmaps/*
 
-pixmapdir = $(prefix)/share/modest/pixmaps
+pixmapdir = $(datadir)/pixmaps/modest
 pixmap_DATA = $(PIXMAP_FILES)
 pixmap_DATA = $(PIXMAP_FILES)
index cc4265a..cb4cd10 100644 (file)
@@ -237,13 +237,13 @@ receiving_page_update_completeness (GtkEditable *editable,
 
        priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
 
 
        priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
 
-       txt = modest_store_widget_get_username (priv->store_widget);
+       txt = modest_store_widget_get_username (MODEST_STORE_WIDGET (priv->store_widget));
        if (!txt || strlen(txt) == 0) {
                set_current_page_complete (self, FALSE);
                return;
        }
 
        if (!txt || strlen(txt) == 0) {
                set_current_page_complete (self, FALSE);
                return;
        }
 
-       txt = modest_store_widget_get_servername (priv->store_widget);
+       txt = modest_store_widget_get_servername (MODEST_STORE_WIDGET (priv->store_widget));
        if (!txt || strlen(txt) == 0) {
                set_current_page_complete (self, FALSE);
                return;
        if (!txt || strlen(txt) == 0) {
                set_current_page_complete (self, FALSE);
                return;
@@ -270,7 +270,7 @@ on_receiving_combo_box_changed (GtkComboBox *combo, ModestAccountAssistant *self
        if (!strcmp (chosen, MODEST_PROTO_POP) || !strcmp (chosen, MODEST_PROTO_IMAP)) {
                g_signal_connect (priv->store_widget, 
                                  "data_changed", 
        if (!strcmp (chosen, MODEST_PROTO_POP) || !strcmp (chosen, MODEST_PROTO_IMAP)) {
                g_signal_connect (priv->store_widget, 
                                  "data_changed", 
-                                 receiving_page_update_completeness, 
+                                 G_CALLBACK (receiving_page_update_completeness), 
                                  self);
                set_current_page_complete (self, FALSE);
        } else
                                  self);
                set_current_page_complete (self, FALSE);
        } else
@@ -317,7 +317,7 @@ add_receiving_page (ModestAccountAssistant *self)
                            TRUE, TRUE, 0);
 
        /* Force the selection */
                            TRUE, TRUE, 0);
 
        /* Force the selection */
-       on_receiving_combo_box_changed (combo, self);
+       on_receiving_combo_box_changed (GTK_COMBO_BOX (combo), self);
        
        gtk_assistant_append_page (GTK_ASSISTANT(self), page);
                
        
        gtk_assistant_append_page (GTK_ASSISTANT(self), page);
                
@@ -392,7 +392,7 @@ add_sending_page (ModestAccountAssistant *self)
                            FALSE, FALSE, 0);
 
        /* Force the selection */
                            FALSE, FALSE, 0);
 
        /* Force the selection */
-       on_sending_combo_box_changed (combo, self);
+       on_sending_combo_box_changed (GTK_COMBO_BOX (combo), self);
 
        gtk_assistant_append_page (GTK_ASSISTANT(self), page);
                
 
        gtk_assistant_append_page (GTK_ASSISTANT(self), page);
                
index acc3095..3b3d53b 100644 (file)
@@ -28,6 +28,7 @@
  */
 #include <glib/gi18n.h>
 #include <tny-account-store.h>
  */
 #include <glib/gi18n.h>
 #include <tny-account-store.h>
+#include "modest-toolbar.h"
 #include "modest-edit-msg-window.h"
 #include "modest-widget-memory.h"
 #include "modest-mail-operation.h"
 #include "modest-edit-msg-window.h"
 #include "modest-widget-memory.h"
 #include "modest-mail-operation.h"
@@ -353,7 +354,7 @@ toolbar_new (ModestEditMsgWindow *self)
        for (i = 0 ; i != sizeof(button_ids) / sizeof(ModestToolbarButton); ++i)
                buttons = g_slist_append (buttons, GINT_TO_POINTER(button_ids[i]));
        
        for (i = 0 ; i != sizeof(button_ids) / sizeof(ModestToolbarButton); ++i)
                buttons = g_slist_append (buttons, GINT_TO_POINTER(button_ids[i]));
        
-       toolbar = modest_widget_factory_get_edit_toolbar (priv->factory, buttons);
+       toolbar = modest_toolbar_new (buttons);
        g_slist_free (buttons);
 
        g_signal_connect (G_OBJECT(toolbar), "button_clicked",
        g_slist_free (buttons);
 
        g_signal_connect (G_OBJECT(toolbar), "button_clicked",
diff --git a/src/gtk/modest-edit-msg-window.h b/src/gtk/modest-edit-msg-window.h
deleted file mode 100644 (file)
index 63cf77e..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright (c) 2006, Nokia Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * * Neither the name of the Nokia Corporation nor the names of its
- *   contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MODEST_EDIT_MSG_WINDOW_H__
-#define __MODEST_EDIT_MSG_WINDOW_H__
-
-#include <gtk/gtk.h>
-#include <tny-msg.h>
-#include "modest-conf.h"
-#include "modest-widget-factory.h"
-
-G_BEGIN_DECLS
-
-/* convenience macros */
-#define MODEST_TYPE_EDIT_MSG_WINDOW             (modest_edit_msg_window_get_type())
-#define MODEST_EDIT_MSG_WINDOW(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_EDIT_MSG_WINDOW,ModestEditMsgWindow))
-#define MODEST_EDIT_MSG_WINDOW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_EDIT_MSG_WINDOW,GtkWindow))
-#define MODEST_IS_EDIT_MSG_WINDOW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_EDIT_MSG_WINDOW))
-#define MODEST_IS_EDIT_MSG_WINDOW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_EDIT_MSG_WINDOW))
-#define MODEST_EDIT_MSG_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_EDIT_MSG_WINDOW,ModestEditMsgWindowClass))
-
-typedef struct _ModestEditMsgWindow      ModestEditMsgWindow;
-typedef struct _ModestEditMsgWindowClass ModestEditMsgWindowClass;
-
-struct _ModestEditMsgWindow {
-        GtkWindow parent;
-       /* insert public members, if any */
-};
-
-struct _ModestEditMsgWindowClass {
-       GtkWindowClass parent_class;
-       /* insert signal callback declarations, eg. */
-       /* void (* my_event) (ModestEditMsgWindow* obj); */
-};
-
-
-typedef enum _ModestEditType {
-       MODEST_EDIT_TYPE_NEW,
-       MODEST_EDIT_TYPE_REPLY,
-       MODEST_EDIT_TYPE_FORWARD,
-       MODEST_EDIT_TYPE_VIEW,
-       
-       MODEST_EDIT_TYPE_NUM
-} ModestEditType;
-/* typedef enum _ModestEditType ModestEditType; */
-
-
-/* member functions */
-GType        modest_edit_msg_window_get_type    (void) G_GNUC_CONST;
-
-GtkWidget*   modest_edit_msg_window_new         (ModestWidgetFactory *factory,
-                                                ModestEditType type);
-
-/**
- * modest_edit_msg_window_set_msg:
- * @self: a #ModestEditMsgWindow
- * @msg: a #TnyMsg
- * 
- * shows the message @msg in a #ModestEditMsgWindow
- **/
-void         modest_edit_msg_window_set_msg     (ModestEditMsgWindow *self, 
-                                                TnyMsg *msg);
-G_END_DECLS
-
-#endif /* __MODEST_EDIT_MSG_WINDOW_H__ */
-
diff --git a/src/gtk/modest-icon-names.h b/src/gtk/modest-icon-names.h
deleted file mode 100644 (file)
index 9c2aac3..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (c) 2006, Nokia Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * * Neither the name of the Nokia Corporation nor the names of its
- *   contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-/* modest-tny-icon-names.h */
-
-/*
- * FIXME: this should go the front-end dirs,
- * with specific icons
- */
-
-#ifndef __MODEST_TNY_ICON_NAMES_H__
-#define __MODEST_TNY_ICON_NAMES_H__
-
-#define PIXMAP_PREFIX PREFIX "/share/modest/pixmaps/"
-
-/* icons */
-
-#define MODEST_APP_ICON                                PIXMAP_PREFIX "modest.png"
-
-#define MODEST_HEADER_ICON_READ                        PIXMAP_PREFIX "qgn_list_messagin_mail.png"
-#define MODEST_HEADER_ICON_UNREAD              PIXMAP_PREFIX "qgn_list_messagin_mail_unread.png"
-#define MODEST_HEADER_ICON_DELETED             PIXMAP_PREFIX "qgn_list_messagin_mail_deleted.png"
-#define MODEST_HEADER_ICON_ATTACH              PIXMAP_PREFIX "qgn_list_gene_attacpap.png"
-
-#define MODEST_FOLDER_ICON_OPEN                        PIXMAP_PREFIX "qgn_list_gene_fldr_opn.png"
-#define MODEST_FOLDER_ICON_CLOSED              PIXMAP_PREFIX "qgn_list_gene_fldr_cls.png"
-
-#define MODEST_FOLDER_ICON_ACCOUNT             PIXMAP_PREFIX "qgn_addr_icon_user_group.png"
-#define MODEST_FOLDER_ICON_INBOX               PIXMAP_PREFIX "qgn_list_messagin_inbox.png"
-#define MODEST_FOLDER_ICON_OUTBOX              PIXMAP_PREFIX "qgn_list_messagin_outbox.png"
-#define MODEST_FOLDER_ICON_SENT                        PIXMAP_PREFIX "qgn_list_messagin_sent.png"
-#define MODEST_FOLDER_ICON_TRASH               PIXMAP_PREFIX "qgn_list_messagin_mail_deleted.png"
-#define MODEST_FOLDER_ICON_JUNK                        PIXMAP_PREFIX "qgn_list_messagin_mail_deleted.png"
-#define MODEST_FOLDER_ICON_DRAFTS              PIXMAP_PREFIX "qgn_list_messagin_drafts.png"
-#define MODEST_FOLDER_ICON_NORMAL              PIXMAP_PREFIX "qgn_list_gene_fldr_cls.png"
-
-#define MODEST_FOLDER_ICON_CONTACTS            PIXMAP_PREFIX "qgn_addr_icon_user_group.png"
-#define MODEST_FOLDER_ICON_NOTES               PIXMAP_PREFIX "qgn_list_messagin_viewer.png"
-#define MODEST_FOLDER_ICON_CALENDAR            PIXMAP_PREFIX "qgn_widg_datedit.png"
-
-/* toolbar */
-#define  MODEST_TOOLBAR_ICON_MAIL_SEND         PIXMAP_PREFIX "qgn_list_messagin_sent.png"
-#define  MODEST_TOOLBAR_ICON_NEW_MAIL          PIXMAP_PREFIX "qgn_list_messagin_editor.png"
-#define  MODEST_TOOLBAR_ICON_SEND_RECEIVE      PIXMAP_PREFIX "gtk-refresh.png"
-#define  MODEST_TOOLBAR_ICON_REPLY             PIXMAP_PREFIX "mail-reply-sender.png"
-#define  MODEST_TOOLBAR_ICON_REPLY_ALL         PIXMAP_PREFIX "mail-reply-all.png"
-#define  MODEST_TOOLBAR_ICON_FORWARD           PIXMAP_PREFIX "mail-forward.png"
-#define  MODEST_TOOLBAR_ICON_DELETE            PIXMAP_PREFIX "mail-mark-junk.png"
-#define  MODEST_TOOLBAR_ICON_NEXT              PIXMAP_PREFIX "forward.png"
-#define  MODEST_TOOLBAR_ICON_PREV              PIXMAP_PREFIX "back.png"
-#define  MODEST_TOOLBAR_ICON_STOP              PIXMAP_PREFIX "stock-stop.svg"
-
-#endif  /*__MODEST_TNY_ICON_NAMES_H__*/
index 3d6d8b1..9fe8cc1 100644 (file)
  */
 
 #include <glib/gi18n.h>
  */
 
 #include <glib/gi18n.h>
-#include <gtk/gtkaboutdialog.h>
 #include <gtk/gtktreeviewcolumn.h>
 
 #include <gtk/gtktreeviewcolumn.h>
 
-#include <modest-widget-memory.h>
-#include <modest-icon-factory.h>
-
-#include <widgets/modest-toolbar.h>
-
 #include "modest-main-window.h"
 #include "modest-main-window.h"
+#include "modest-widget-factory.h"
+#include "modest-widget-memory.h"
+#include "modest-icon-factory.h"
+#include "modest-ui.h"
 #include "modest-account-view-window.h"
 #include "modest-account-mgr.h"
 #include "modest-conf.h"
 #include "modest-edit-msg-window.h"
 #include "modest-account-view-window.h"
 #include "modest-account-mgr.h"
 #include "modest-conf.h"
 #include "modest-edit-msg-window.h"
-#include "modest-icon-names.h"
 #include "modest-tny-platform-factory.h"
 #include "modest-tny-msg-actions.h"
 #include "modest-mail-operation.h"
 #include "modest-tny-platform-factory.h"
 #include "modest-tny-msg-actions.h"
 #include "modest-mail-operation.h"
+#include "modest-icon-names.h"
 
 /* 'private'/'protected' functions */
 static void modest_main_window_class_init    (ModestMainWindowClass *klass);
 
 /* 'private'/'protected' functions */
 static void modest_main_window_class_init    (ModestMainWindowClass *klass);
@@ -53,7 +51,6 @@ static void modest_main_window_finalize      (GObject *obj);
 
 static void restore_sizes (ModestMainWindow *self);
 static void save_sizes (ModestMainWindow *self);
 
 static void restore_sizes (ModestMainWindow *self);
 static void save_sizes (ModestMainWindow *self);
-static void get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data);
 
 /* list my signals */
 enum {
 
 /* list my signals */
 enum {
@@ -65,6 +62,8 @@ enum {
 typedef struct _ModestMainWindowPrivate ModestMainWindowPrivate;
 struct _ModestMainWindowPrivate {
 
 typedef struct _ModestMainWindowPrivate ModestMainWindowPrivate;
 struct _ModestMainWindowPrivate {
 
+       GtkUIManager *ui_manager;
+
        GtkWidget *toolbar;
        GtkWidget *menubar;
 
        GtkWidget *toolbar;
        GtkWidget *menubar;
 
@@ -167,332 +166,6 @@ modest_main_window_finalize (GObject *obj)
 }
 
 
 }
 
 
-static void
-on_menu_about (GtkWidget *widget, gpointer data)
-{
-       GtkWidget *about;
-       const gchar *authors[] = {
-               "Dirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>",
-               NULL
-       };      
-       about = gtk_about_dialog_new ();
-       gtk_about_dialog_set_name (GTK_ABOUT_DIALOG(about), PACKAGE_NAME);
-       gtk_about_dialog_set_version (GTK_ABOUT_DIALOG(about),PACKAGE_VERSION);
-       gtk_about_dialog_set_copyright (
-               GTK_ABOUT_DIALOG(about),
-               _("Copyright (c) 2006, Nokia Corporation\n"
-                 "All rights reserved."));
-       gtk_about_dialog_set_comments ( GTK_ABOUT_DIALOG(about),
-               _("a modest e-mail client\n\n"
-                 "design and implementation: Dirk-Jan C. Binnema\n"
-                 "contributions from the fine people at KernelConcepts and Igalia\n"
-                 "uses the tinymail email framework written by Philip van Hoof"));
-       gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(about), authors);
-       gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org");
-
-       gtk_dialog_run (GTK_DIALOG (about));
-       gtk_widget_destroy(about);
-}
-
-
-static void
-on_menu_accounts (ModestMainWindow *self, guint action, GtkWidget *widget)
-{
-       GtkWidget *account_win;
-       ModestMainWindowPrivate *priv;
-
-       g_return_if_fail (widget);
-       g_return_if_fail (self);
-       
-       priv        = MODEST_MAIN_WINDOW_GET_PRIVATE(self);     
-       account_win = modest_account_view_window_new (priv->widget_factory);
-
-       gtk_window_set_transient_for (GTK_WINDOW(account_win),
-                                     GTK_WINDOW(self));
-                                     
-       gtk_widget_show (account_win);
-}
-
-
-static void
-on_menu_new_message (ModestMainWindow *self, guint action, GtkWidget *widget)
-{
-       GtkWidget *msg_win;
-       ModestMainWindowPrivate *priv;
-
-       priv  = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-
-       msg_win = modest_edit_msg_window_new (priv->widget_factory,
-                                             MODEST_EDIT_TYPE_NEW);
-       gtk_widget_show (msg_win);
-}
-
-static void
-get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data)
-{
-       GtkWidget *msg_win;
-       TnyHeader *new_header;
-       TnyMsg *new_msg;
-       ModestMainWindowPrivate *priv;
-       ModestEditType edit_type = -2;
-       GetMsgAsyncHelper *helper;
-
-       helper = (GetMsgAsyncHelper *) (user_data);
-
-       /* FIXME: select proper action */
-       priv  = helper->main_window_private;
-       new_msg = NULL;
-       switch (helper->action) {
-       case 1:
-               new_msg = 
-                       modest_mail_operation_create_reply_mail (msg, helper->from, helper->reply_type,
-                                                                MODEST_MAIL_OPERATION_REPLY_MODE_SENDER);
-               edit_type = MODEST_EDIT_TYPE_REPLY;
-               break;
-       case 2:
-               new_msg = 
-                       modest_mail_operation_create_reply_mail (msg, helper->from, helper->reply_type,
-                                                                MODEST_MAIL_OPERATION_REPLY_MODE_ALL);
-               edit_type = MODEST_EDIT_TYPE_REPLY;
-               break;
-       case 3:
-               new_msg = 
-                       modest_mail_operation_create_forward_mail (msg, helper->from, helper->forward_type);
-               edit_type = MODEST_EDIT_TYPE_FORWARD;
-               break;
-       default:
-               g_warning ("unexpected action type: %d", helper->action);
-       }
-       
-       if (new_msg) {
-               /* Set from */
-               new_header = tny_msg_get_header (new_msg);
-               tny_header_set_from (new_header, helper->from);
-               g_object_unref (G_OBJECT (new_header));
-               
-               /* Show edit window */
-               msg_win = modest_edit_msg_window_new (priv->widget_factory,
-                                                     edit_type);
-               modest_edit_msg_window_set_msg (MODEST_EDIT_MSG_WINDOW (msg_win),
-                                               new_msg);
-               gtk_widget_show (msg_win);
-               
-               /* Clean and go on */
-               g_object_unref (new_msg);
-       }
-
-       tny_iterator_next (helper->iter);
-       if (tny_iterator_is_done (helper->iter)) {
-               TnyList *headers;
-               headers = tny_iterator_get_list (helper->iter);
-               g_object_unref (G_OBJECT (headers));
-               g_object_unref (G_OBJECT (helper->iter));
-               g_slice_free (GetMsgAsyncHelper, helper);
-       } else
-               tny_folder_get_msg_async (folder, TNY_HEADER (tny_iterator_get_current (helper->iter)), 
-                                         get_msg_cb, helper);
-}
-
-static void
-on_menu_reply_forward (ModestMainWindow *self, guint action, GtkWidget *widget)
-{
-       ModestMainWindowPrivate *priv;
-       ModestHeaderView *header_view;
-       TnyList *header_list;
-       gchar *reply_key, *forward_key;
-       ModestMailOperationReplyType reply_type;
-       ModestMailOperationForwardType forward_type;
-       ModestConf *conf;
-       GError *error;
-
-       priv  = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-       conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory);
-
-       header_view = modest_widget_factory_get_header_view (priv->widget_factory);
-       header_list = modest_header_view_get_selected_headers (header_view);
-
-       /* Get reply and forward types */
-       error = NULL;
-       reply_key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, MODEST_CONF_REPLY_TYPE);
-       reply_type = modest_conf_get_int (conf, reply_key, &error);
-       if (error || reply_type == 0) {
-               g_warning ("key %s not defined", reply_key);
-               reply_type = MODEST_MAIL_OPERATION_REPLY_TYPE_CITE;
-               if (error) {
-                       g_error_free (error);
-                       error = NULL;
-               }
-       }
-       g_free (reply_key);
-       
-       forward_key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, MODEST_CONF_FORWARD_TYPE);
-       forward_type = modest_conf_get_int (conf, forward_key, &error);
-       if (error || forward_type == 0) {
-               g_warning ("key %s not defined", forward_key);
-               forward_type = MODEST_MAIL_OPERATION_FORWARD_TYPE_INLINE;
-               if (error) {
-                       g_error_free (error);
-                       error = NULL;
-               }
-       }
-       g_free (forward_key);
-       
-       if (header_list) {
-               TnyHeader *header;
-               TnyFolder *folder;
-               gchar *from, *email_key;
-               const gchar *account_name;
-               GetMsgAsyncHelper *helper;
-
-               /* We assume that we can only select messages of the
-                  same folder and that we reply all of them from the
-                  same account. In fact the interface currently only
-                  allows single selection */
-               account_name = modest_folder_view_get_selected_account (priv->folder_view);
-               email_key = g_strdup_printf ("%s/%s/%s", MODEST_ACCOUNT_NAMESPACE, 
-                                            account_name, MODEST_ACCOUNT_EMAIL);
-               from = modest_conf_get_string (conf, email_key, NULL);
-               if (!from)
-                       from = g_strdup ("Invalid");
-               g_free (email_key);
-
-               helper = g_slice_new0 (GetMsgAsyncHelper);
-               helper->main_window_private = priv;
-               helper->reply_type = reply_type;
-               helper->forward_type = forward_type;
-               helper->action = action;
-               helper->from = from;
-               helper->iter = tny_list_create_iterator (header_list);
-
-               header = TNY_HEADER (tny_iterator_get_current (helper->iter));
-               folder = tny_header_get_folder (header);
-
-               /* The callback will call it per each header */
-               tny_folder_get_msg_async (folder, header, get_msg_cb, helper);
-
-               /* Clean */
-               g_object_unref (G_OBJECT (folder));
-       }
-}
-
-static void
-on_menu_quit (ModestMainWindow *self, guint action, GtkWidget *widget)
-{
-       save_sizes (self);
-       gtk_widget_destroy (GTK_WIDGET(self));
-}
-
-static void
-on_menu_delete (ModestMainWindow *self, guint action, GtkWidget *widget)
-{
-       ModestMainWindowPrivate *priv;
-       ModestHeaderView *header_view;
-       TnyList *header_list;
-       TnyIterator *iter;
-       GtkTreeModel *model;
-
-       priv  = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-
-       header_view = modest_widget_factory_get_header_view (priv->widget_factory);
-       header_list = modest_header_view_get_selected_headers (header_view);
-       
-       if (header_list) {
-               iter = tny_list_create_iterator (header_list);
-               model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
-               if (GTK_IS_TREE_MODEL_SORT (model))
-                       model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (model));
-               do {
-                       TnyHeader *header;
-                       ModestMailOperation *mail_op;
-
-                       header = TNY_HEADER (tny_iterator_get_current (iter));
-                       /* TODO: thick grain mail operation involving
-                          a list of objects. Composite pattern ??? */
-                       mail_op = modest_mail_operation_new ();
-
-                       /* Move to trash */
-                       modest_mail_operation_remove_msg (mail_op, header, TRUE);
-
-                       /* Remove from tree model */
-                       tny_list_remove (TNY_LIST (model), G_OBJECT (header));
-
-                       g_object_unref (G_OBJECT (mail_op));
-                       g_object_unref (header);
-                       tny_iterator_next (iter);
-
-               } while (!tny_iterator_is_done (iter));
-       }
-}
-
-
-/* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */
-static GtkItemFactoryEntry menu_items[] = {
-       { "/_File",             NULL,                   NULL,           0, "<Branch>", NULL },
-       { "/File/_New",         "<control>N",           NULL,           0, "<StockItem>", GTK_STOCK_NEW },
-       { "/File/_Open",        "<control>O",           NULL,           0, "<StockItem>", GTK_STOCK_OPEN },
-       { "/File/_Save",        "<control>S",           NULL,           0, "<StockItem>", GTK_STOCK_SAVE },
-       { "/File/Save _As",     NULL,                   NULL,           0, "<Item>", NULL },
-       { "/File/sep1",         NULL,                   NULL,           0, "<Separator>", NULL },
-       { "/File/_Quit",        "<CTRL>Q",              on_menu_quit,  0, "<StockItem>", GTK_STOCK_QUIT },
-
-       { "/_Edit",             NULL,                   NULL,           0, "<Branch>", NULL },
-       { "/Edit/_Undo",        "<CTRL>Z",              NULL,           0, "<StockItem>", GTK_STOCK_UNDO },
-       { "/Edit/_Redo",        "<shift><CTRL>Z",       NULL,           0, "<StockItem>", GTK_STOCK_REDO },
-       { "/Edit/sep1",         NULL,                   NULL,           0, "<Separator>", NULL },
-       { "/Edit/Cut",          "<control>X",           NULL,           0, "<StockItem>", GTK_STOCK_CUT  },
-       { "/Edit/Copy",         "<CTRL>C",              NULL,           0, "<StockItem>", GTK_STOCK_COPY },
-       { "/Edit/Paste",        NULL,                   NULL,           0, "<StockItem>", GTK_STOCK_PASTE},
-       { "/Edit/sep2",         NULL,                   NULL,           0, "<Separator>", NULL },
-       { "/Edit/Delete",       "<CTRL>Q",              NULL,           0, "<Item>" ,NULL},
-       { "/Edit/Select all",   "<CTRL>A",              NULL,           0, "<Item>" ,NULL},
-       { "/Edit/Deelect all",  "<Shift><CTRL>A",       NULL,           0, "<Item>" ,NULL},
-
-       { "/_Actions",                NULL,             NULL,           0, "<Branch>" ,NULL},
-       { "/Actions/_New Message",    NULL,             on_menu_new_message,            0, "<Item>",NULL },
-       { "/Actions/_Reply",    NULL,                   on_menu_reply_forward,          1, "<Item>" ,NULL},
-       { "/Actions/_Forward",  NULL,                   on_menu_reply_forward,          3, "<Item>" ,NULL},
-       { "/Actions/_Bounce",   NULL,                   NULL,           0, "<Item>",NULL },     
-       
-       { "/_Options",           NULL,                  NULL,           0, "<Branch>" ,NULL},
-       { "/Options/_Accounts",  NULL,                  on_menu_accounts,0, "<Item>" ,NULL},
-       { "/Options/_Contacts",  NULL,                  NULL,           0, "<Item>" ,NULL },
-
-
-       { "/_Help",         NULL,                       NULL,           0, "<Branch>" ,NULL},
-       { "/_Help/About",   NULL,                       on_menu_about,  0, "<StockItem>", GTK_STOCK_ABOUT},
-};
-
-static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
-
-
-static GtkWidget *
-menubar_new (ModestMainWindow *self)
-{
-       GtkItemFactory *item_factory;
-       GtkAccelGroup *accel_group;
-       
-       /* Make an accelerator group (shortcut keys) */
-       accel_group = gtk_accel_group_new ();
-       
-       /* Make an ItemFactory (that makes a menubar) */
-       item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
-                                            accel_group);
-       
-       /* This function generates the menu items. Pass the item factory,
-          the number of items in the array, the array itself, and any
-          callback data for the the menu items. */
-       gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, self);
-       
-       ///* Attach the new accelerator group to the window. */
-       gtk_window_add_accel_group (GTK_WINDOW (self), accel_group);
-       
-       /* Finally, return the actual menu bar created by the item factory. */
-       return gtk_item_factory_get_widget (item_factory, "<main>");
-}
-
-
-
-
 static ModestHeaderView*
 header_view_new (ModestMainWindow *self)
 {
 static ModestHeaderView*
 header_view_new (ModestMainWindow *self)
 {
@@ -520,95 +193,6 @@ header_view_new (ModestMainWindow *self)
        return header_view;
 }
 
        return header_view;
 }
 
-static void
-on_toolbar_button_clicked (ModestToolbar *toolbar, ModestToolbarButton button_id,
-                          ModestMainWindow *self)
-{
-       GtkTreeSelection *sel;
-       GtkTreeIter iter;
-       GtkTreeModel *model;
-       ModestMainWindowPrivate *priv;
-
-       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-       
-       switch (button_id) {
-       case MODEST_TOOLBAR_BUTTON_NEW_MAIL:
-               on_menu_new_message (self, 0, NULL);
-               break;
-       case MODEST_TOOLBAR_BUTTON_REPLY:
-               on_menu_reply_forward (self, 1, NULL);
-               break;
-       case MODEST_TOOLBAR_BUTTON_REPLY_ALL:
-               on_menu_reply_forward (self, 2, NULL);
-               break;
-       case MODEST_TOOLBAR_BUTTON_FORWARD:
-               on_menu_reply_forward (self, 3, NULL);
-               break;
-       case MODEST_TOOLBAR_BUTTON_SEND_RECEIVE:
-               
-
-       case MODEST_TOOLBAR_BUTTON_NEXT:
-               sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(priv->header_view));
-               if (sel) {
-                       gtk_tree_selection_get_selected (sel, &model, &iter);
-                       gtk_tree_model_iter_next (model, &iter);
-                       gtk_tree_selection_select_iter (sel, &iter);
-               }
-               
-       case MODEST_TOOLBAR_BUTTON_PREV:
-       /*      if (sel) { */
-/*                     gtk_tree_selection_get_selected (sel, &model, &iter); */
-/*                     gtk_tree_model_iter_prev (model, &iter); */
-/*                     gtk_tree_selection_select_iter (sel, &iter); */
-/*             } */
-
-               break;
-       case MODEST_TOOLBAR_BUTTON_DELETE:
-               on_menu_delete (self, 0, GTK_WIDGET (toolbar));
-               break;
-
-       default:
-               g_printerr ("modest: key %d pressed\n", button_id);
-       }
-}
-
-static ModestToolbar*
-toolbar_new (ModestMainWindow *self)
-{
-       int i;
-       ModestToolbar *toolbar;
-       GSList *buttons = NULL;
-       ModestMainWindowPrivate *priv;
-
-       ModestToolbarButton button_ids[] = {
-               MODEST_TOOLBAR_BUTTON_NEW_MAIL,
-               MODEST_TOOLBAR_BUTTON_REPLY,
-               MODEST_TOOLBAR_BUTTON_REPLY_ALL,
-               MODEST_TOOLBAR_BUTTON_FORWARD,
-               MODEST_TOOLBAR_SEPARATOR,
-               MODEST_TOOLBAR_BUTTON_SEND_RECEIVE,
-               MODEST_TOOLBAR_SEPARATOR,
-               MODEST_TOOLBAR_BUTTON_PREV,
-               MODEST_TOOLBAR_BUTTON_NEXT,
-               MODEST_TOOLBAR_SEPARATOR,               
-               MODEST_TOOLBAR_BUTTON_DELETE
-       };              
-       
-       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-
-       for (i = 0 ; i != sizeof(button_ids) / sizeof(ModestToolbarButton); ++i)
-               buttons = g_slist_append (buttons, GINT_TO_POINTER(button_ids[i]));
-       
-       toolbar = modest_widget_factory_get_main_toolbar (priv->widget_factory, buttons);
-       g_slist_free (buttons);
-       
-       g_signal_connect (G_OBJECT(toolbar), "button_clicked",
-                         G_CALLBACK(on_toolbar_button_clicked), self);
-       
-       return toolbar;
-}
-
-
 
 static void
 restore_sizes (ModestMainWindow *self)
 
 static void
 restore_sizes (ModestMainWindow *self)
@@ -681,11 +265,11 @@ on_delete_event (GtkWidget *widget, GdkEvent  *event, ModestMainWindow *self)
 
 
 GtkWidget*
 
 
 GtkWidget*
-modest_main_window_new (ModestWidgetFactory *widget_factory)
+modest_main_window_new (ModestWidgetFactory *widget_factory,
+                       GtkUIManager *ui_manager)
 {
        GObject *obj;
        ModestMainWindowPrivate *priv;
 {
        GObject *obj;
        ModestMainWindowPrivate *priv;
-       
        GtkWidget *main_vbox;
        GtkWidget *status_hbox;
        GtkWidget *header_win, *folder_win;
        GtkWidget *main_vbox;
        GtkWidget *status_hbox;
        GtkWidget *header_win, *folder_win;
@@ -695,8 +279,19 @@ modest_main_window_new (ModestWidgetFactory *widget_factory)
        obj  = g_object_new(MODEST_TYPE_MAIN_WINDOW, NULL);
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj);
 
        obj  = g_object_new(MODEST_TYPE_MAIN_WINDOW, NULL);
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj);
 
-       g_object_ref (widget_factory);
-       priv->widget_factory = widget_factory;
+       priv->widget_factory = g_object_ref (widget_factory);
+       priv->ui_manager = g_object_ref (ui_manager);
+
+       /* Add accelerators */
+       gtk_window_add_accel_group (GTK_WINDOW (obj), 
+                                   gtk_ui_manager_get_accel_group (priv->ui_manager));
+
+
+       /* Toolbar / Menubar */
+       priv->toolbar = gtk_ui_manager_get_widget (priv->ui_manager, "/ToolBar");
+       priv->menubar = gtk_ui_manager_get_widget (priv->ui_manager, "/MenuBar");
+
+       gtk_toolbar_set_tooltips (GTK_TOOLBAR (priv->toolbar), TRUE);
 
        /* widgets from factory */
        priv->folder_view = modest_widget_factory_get_folder_view (widget_factory);
 
        /* widgets from factory */
        priv->folder_view = modest_widget_factory_get_folder_view (widget_factory);
@@ -707,10 +302,6 @@ modest_main_window_new (ModestWidgetFactory *widget_factory)
                                                 FALSE);
        header_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->header_view),
                                                 FALSE);                           
                                                 FALSE);
        header_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->header_view),
                                                 FALSE);                           
-       
-       /* tool/menubar */
-       priv->menubar = menubar_new (MODEST_MAIN_WINDOW(obj));
-       priv->toolbar = GTK_WIDGET(toolbar_new (MODEST_MAIN_WINDOW(obj)));
 
        /* paned */
        priv->folder_paned = gtk_vpaned_new ();
 
        /* paned */
        priv->folder_paned = gtk_vpaned_new ();
diff --git a/src/gtk/modest-main-window.h b/src/gtk/modest-main-window.h
deleted file mode 100644 (file)
index be89bf0..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* modest-main-window.h */
-/* insert (c)/licensing information) */
-
-#ifndef __MODEST_MAIN_WINDOW_H__
-#define __MODEST_MAIN_WINDOW_H__
-
-#include <gtk/gtkwindow.h>
-#include <modest-widget-factory.h>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif /*HAVE_CONFIG_H*/
-
-G_BEGIN_DECLS
-
-/* convenience macros */
-#define MODEST_TYPE_MAIN_WINDOW             (modest_main_window_get_type())
-#define MODEST_MAIN_WINDOW(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_MAIN_WINDOW,ModestMainWindow))
-#define MODEST_MAIN_WINDOW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_MAIN_WINDOW,GtkWindow))
-#define MODEST_IS_MAIN_WINDOW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_MAIN_WINDOW))
-#define MODEST_IS_MAIN_WINDOW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_MAIN_WINDOW))
-#define MODEST_MAIN_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_MAIN_WINDOW,ModestMainWindowClass))
-
-typedef struct _ModestMainWindow      ModestMainWindow;
-typedef struct _ModestMainWindowClass ModestMainWindowClass;
-
-struct _ModestMainWindow {
-        GtkWindow parent;
-       /* insert public members, if any */
-};
-
-struct _ModestMainWindowClass {
-       GtkWindowClass parent_class;
-       /* insert signal callback declarations, eg. */
-       /* void (* my_event) (ModestMainWindow* obj); */
-};
-
-/* member functions */
-GType        modest_main_window_get_type    (void) G_GNUC_CONST;
-
-
-GtkWidget*   modest_main_window_new         (ModestWidgetFactory *factory);
-
-G_END_DECLS
-
-#endif /* __MODEST_MAIN_WINDOW_H__ */
-
index c10216e..47d7ef8 100644 (file)
@@ -253,8 +253,8 @@ imap_pop_configuration (ModestStoreWidget *self)
        gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0);
 
        /* Handle entry modifications */
        gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0);
 
        /* Handle entry modifications */
-       g_signal_connect (priv->username, "changed", on_entry_changed, self);
-       g_signal_connect (priv->servername, "changed", on_entry_changed, self);
+       g_signal_connect (priv->username, "changed", G_CALLBACK (on_entry_changed), self);
+       g_signal_connect (priv->servername, "changed", G_CALLBACK (on_entry_changed), self);
 
        return box;
 }
 
        return box;
 }
diff --git a/src/gtk/modest-ui.c b/src/gtk/modest-ui.c
deleted file mode 100644 (file)
index fadca5b..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-/* Copyright (c) 2006, Nokia Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * * Neither the name of the Nokia Corporation nor the names of its
- *   contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <gtk/gtk.h>
-#include <glade/glade.h>
-#include <glib/gi18n.h>
-#include <string.h>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif /*HAVE_CONFIG_H*/
-
-#include "../modest-ui.h"
-#include "../modest-account-mgr.h"
-#include "../modest-widget-factory.h"
-#include "modest-main-window.h"
-#include "modest-tny-platform-factory.h"
-
-
-/* 'private'/'protected' functions */
-static void   modest_ui_class_init     (ModestUIClass *klass);
-static void   modest_ui_init           (ModestUI *obj);
-static void   modest_ui_finalize       (GObject *obj);
-
-gchar *on_password_requested (TnyAccountIface *, const gchar *, gboolean *);
-
-
-typedef struct _ModestUIPrivate ModestUIPrivate;
-struct _ModestUIPrivate {
-       ModestWidgetFactory   *widget_factory;  
-
-       GtkWidget              *main_window;
-};
-
-#define MODEST_UI_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
-                                       MODEST_TYPE_UI, \
-                                       ModestUIPrivate))
-
-
-/* list my signals */
-enum {
-       /* MY_SIGNAL_1, */
-       /* MY_SIGNAL_2, */
-       LAST_SIGNAL
-};
-
-/* globals */
-static GObjectClass *parent_class = NULL;
-
-
-GType
-modest_ui_get_type (void)
-{
-       static GType my_type = 0;
-       if (!my_type) {
-               static const GTypeInfo my_info = {
-                       sizeof(ModestUIClass),
-                       NULL,           /* base init */
-                       NULL,           /* base finalize */
-                       (GClassInitFunc) modest_ui_class_init,
-                       NULL,           /* class finalize */
-                       NULL,           /* class data */
-                       sizeof(ModestUI),
-                       1,              /* n_preallocs */
-                       (GInstanceInitFunc) modest_ui_init,
-                       NULL
-               };
-               my_type = g_type_register_static (G_TYPE_OBJECT,
-                                                 "ModestUI",
-                                                 &my_info, 0);
-       }
-       return my_type;
-}
-
-
-static void
-modest_ui_class_init (ModestUIClass *klass)
-{
-       GObjectClass *gobject_class;
-       gobject_class = (GObjectClass*) klass;
-
-       parent_class            = g_type_class_peek_parent (klass);
-       gobject_class->finalize = modest_ui_finalize;
-
-       g_type_class_add_private (gobject_class, sizeof(ModestUIPrivate));
-
-}
-
-
-static void
-modest_ui_init (ModestUI *obj)
-{
-       ModestUIPrivate *priv;
-
-       priv = MODEST_UI_GET_PRIVATE(obj);
-
-       priv->widget_factory = NULL;
-       priv->main_window    = NULL;
-}
-
-
-static void
-modest_ui_finalize (GObject *obj)
-{
-       
-       ModestUIPrivate *priv = MODEST_UI_GET_PRIVATE(obj);
-       
-       if (priv->widget_factory) {
-               g_object_unref (G_OBJECT(priv->widget_factory));
-               priv->widget_factory = NULL;
-       }
-       
-       G_OBJECT_CLASS(parent_class)->finalize (obj);
-}
-
-
-ModestUI*
-modest_ui_new (void)
-{
-       GObject *obj;
-       ModestUIPrivate *priv;
-       TnyPlatformFactory *fact;
-       ModestAccountMgr *account_mgr;
-       TnyAccountStore *account_store;
-
-       obj  = g_object_new(MODEST_TYPE_UI, NULL);
-       priv = MODEST_UI_GET_PRIVATE(obj);
-
-       /* Get the platform-dependent instances */
-       fact = modest_tny_platform_factory_get_instance ();
-       
-       account_mgr = modest_tny_platform_factory_get_modest_account_mgr_instance (fact);
-       if (!account_mgr) {
-               g_printerr ("modest: could not create ModestAccountMgr instance\n");
-               g_object_unref (obj);
-               return NULL;
-        }
-
-       account_store = tny_platform_factory_new_account_store (fact);
-       if (!account_store) {
-               g_printerr ("modest: could not initialze ModestTnyAccountStore instance\n");
-               return NULL;
-        }
-
-       priv->widget_factory = modest_widget_factory_new ();
-       if (!priv->widget_factory) {
-               g_printerr ("modest: could not initialize widget factory\n");
-               return NULL;
-       }
-               
-       return MODEST_UI(obj);
-}
-
-static gboolean
-on_main_window_destroy (GtkObject *widget, ModestUI *self)
-{
-       /* FIXME: check if there any viewer/editing windows opened */
-       gtk_main_quit ();
-       return FALSE;
-}
-
-
-GtkWidget*
-modest_ui_main_window (ModestUI *modest_ui)
-{
-       ModestUIPrivate *priv;
-
-       g_return_val_if_fail (modest_ui, NULL);
-       priv = MODEST_UI_GET_PRIVATE(modest_ui);
-
-       if (!priv->main_window) {
-               priv->main_window =
-                       modest_main_window_new (priv->widget_factory);
-               g_signal_connect (G_OBJECT(priv->main_window), "destroy",
-                                 G_CALLBACK(on_main_window_destroy), modest_ui);
-
-       }
-               
-       if (!priv->main_window)
-               g_printerr ("modest: could not create main window\n");
-       
-       return priv->main_window;
-}
diff --git a/src/maemo/modest-edit-msg-window.h b/src/maemo/modest-edit-msg-window.h
deleted file mode 100644 (file)
index 8844255..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright (c) 2006, Nokia Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * * Neither the name of the Nokia Corporation nor the names of its
- *   contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MODEST_EDIT_MSG_WINDOW_H__
-#define __MODEST_EDIT_MSG_WINDOW_H__
-
-#include <gtk/gtk.h>
-#include <tny-msg.h>
-#include <hildon-widgets/hildon-window.h>
-
-#include "modest-conf.h"
-#include "modest-widget-factory.h"
-
-G_BEGIN_DECLS
-
-/* convenience macros */
-#define MODEST_TYPE_EDIT_MSG_WINDOW             (modest_edit_msg_window_get_type())
-#define MODEST_EDIT_MSG_WINDOW(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_EDIT_MSG_WINDOW,ModestEditMsgWindow))
-#define MODEST_EDIT_MSG_WINDOW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_EDIT_MSG_WINDOW,GtkWindow))
-#define MODEST_IS_EDIT_MSG_WINDOW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_EDIT_MSG_WINDOW))
-#define MODEST_IS_EDIT_MSG_WINDOW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_EDIT_MSG_WINDOW))
-#define MODEST_EDIT_MSG_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_EDIT_MSG_WINDOW,ModestEditMsgWindowClass))
-
-typedef struct _ModestEditMsgWindow      ModestEditMsgWindow;
-typedef struct _ModestEditMsgWindowClass ModestEditMsgWindowClass;
-
-struct _ModestEditMsgWindow {
-       HildonWindow parent;
-       /* insert public members, if any */
-};
-
-struct _ModestEditMsgWindowClass {
-       HildonWindowClass parent_class;
-       /* insert signal callback declarations, eg. */
-       /* void (* my_event) (ModestEditMsgWindow* obj); */
-};
-
-
-typedef enum _ModestEditType {
-       MODEST_EDIT_TYPE_NEW,
-       MODEST_EDIT_TYPE_REPLY,
-       MODEST_EDIT_TYPE_FORWARD,
-       MODEST_EDIT_TYPE_VIEW,
-       
-       MODEST_EDIT_TYPE_NUM
-} ModestEditType;
-/* typedef enum _ModestEditType ModestEditType; */
-
-
-/* member functions */
-GType        modest_edit_msg_window_get_type    (void) G_GNUC_CONST;
-
-GtkWidget*   modest_edit_msg_window_new         (ModestWidgetFactory *factory,
-                                                ModestEditType type,
-                                                TnyMsg *msg);
-G_END_DECLS
-
-#endif /* __MODEST_EDIT_MSG_WINDOW_H__ */
-
diff --git a/src/maemo/modest-icon-names.h b/src/maemo/modest-icon-names.h
deleted file mode 100644 (file)
index 9c2aac3..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (c) 2006, Nokia Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * * Neither the name of the Nokia Corporation nor the names of its
- *   contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-/* modest-tny-icon-names.h */
-
-/*
- * FIXME: this should go the front-end dirs,
- * with specific icons
- */
-
-#ifndef __MODEST_TNY_ICON_NAMES_H__
-#define __MODEST_TNY_ICON_NAMES_H__
-
-#define PIXMAP_PREFIX PREFIX "/share/modest/pixmaps/"
-
-/* icons */
-
-#define MODEST_APP_ICON                                PIXMAP_PREFIX "modest.png"
-
-#define MODEST_HEADER_ICON_READ                        PIXMAP_PREFIX "qgn_list_messagin_mail.png"
-#define MODEST_HEADER_ICON_UNREAD              PIXMAP_PREFIX "qgn_list_messagin_mail_unread.png"
-#define MODEST_HEADER_ICON_DELETED             PIXMAP_PREFIX "qgn_list_messagin_mail_deleted.png"
-#define MODEST_HEADER_ICON_ATTACH              PIXMAP_PREFIX "qgn_list_gene_attacpap.png"
-
-#define MODEST_FOLDER_ICON_OPEN                        PIXMAP_PREFIX "qgn_list_gene_fldr_opn.png"
-#define MODEST_FOLDER_ICON_CLOSED              PIXMAP_PREFIX "qgn_list_gene_fldr_cls.png"
-
-#define MODEST_FOLDER_ICON_ACCOUNT             PIXMAP_PREFIX "qgn_addr_icon_user_group.png"
-#define MODEST_FOLDER_ICON_INBOX               PIXMAP_PREFIX "qgn_list_messagin_inbox.png"
-#define MODEST_FOLDER_ICON_OUTBOX              PIXMAP_PREFIX "qgn_list_messagin_outbox.png"
-#define MODEST_FOLDER_ICON_SENT                        PIXMAP_PREFIX "qgn_list_messagin_sent.png"
-#define MODEST_FOLDER_ICON_TRASH               PIXMAP_PREFIX "qgn_list_messagin_mail_deleted.png"
-#define MODEST_FOLDER_ICON_JUNK                        PIXMAP_PREFIX "qgn_list_messagin_mail_deleted.png"
-#define MODEST_FOLDER_ICON_DRAFTS              PIXMAP_PREFIX "qgn_list_messagin_drafts.png"
-#define MODEST_FOLDER_ICON_NORMAL              PIXMAP_PREFIX "qgn_list_gene_fldr_cls.png"
-
-#define MODEST_FOLDER_ICON_CONTACTS            PIXMAP_PREFIX "qgn_addr_icon_user_group.png"
-#define MODEST_FOLDER_ICON_NOTES               PIXMAP_PREFIX "qgn_list_messagin_viewer.png"
-#define MODEST_FOLDER_ICON_CALENDAR            PIXMAP_PREFIX "qgn_widg_datedit.png"
-
-/* toolbar */
-#define  MODEST_TOOLBAR_ICON_MAIL_SEND         PIXMAP_PREFIX "qgn_list_messagin_sent.png"
-#define  MODEST_TOOLBAR_ICON_NEW_MAIL          PIXMAP_PREFIX "qgn_list_messagin_editor.png"
-#define  MODEST_TOOLBAR_ICON_SEND_RECEIVE      PIXMAP_PREFIX "gtk-refresh.png"
-#define  MODEST_TOOLBAR_ICON_REPLY             PIXMAP_PREFIX "mail-reply-sender.png"
-#define  MODEST_TOOLBAR_ICON_REPLY_ALL         PIXMAP_PREFIX "mail-reply-all.png"
-#define  MODEST_TOOLBAR_ICON_FORWARD           PIXMAP_PREFIX "mail-forward.png"
-#define  MODEST_TOOLBAR_ICON_DELETE            PIXMAP_PREFIX "mail-mark-junk.png"
-#define  MODEST_TOOLBAR_ICON_NEXT              PIXMAP_PREFIX "forward.png"
-#define  MODEST_TOOLBAR_ICON_PREV              PIXMAP_PREFIX "back.png"
-#define  MODEST_TOOLBAR_ICON_STOP              PIXMAP_PREFIX "stock-stop.svg"
-
-#endif  /*__MODEST_TNY_ICON_NAMES_H__*/
index 8576e2b..9fe8cc1 100644 (file)
  */
 
 #include <glib/gi18n.h>
  */
 
 #include <glib/gi18n.h>
-#include <string.h>
-#include <gtk/gtkaboutdialog.h>
 #include <gtk/gtktreeviewcolumn.h>
 
 #include <gtk/gtktreeviewcolumn.h>
 
-#include <modest-widget-memory.h>
-#include <modest-icon-factory.h>
-
-#include <widgets/modest-toolbar.h>
-
 #include "modest-main-window.h"
 #include "modest-main-window.h"
+#include "modest-widget-factory.h"
+#include "modest-widget-memory.h"
+#include "modest-icon-factory.h"
+#include "modest-ui.h"
 #include "modest-account-view-window.h"
 #include "modest-account-mgr.h"
 #include "modest-conf.h"
 #include "modest-edit-msg-window.h"
 #include "modest-account-view-window.h"
 #include "modest-account-mgr.h"
 #include "modest-conf.h"
 #include "modest-edit-msg-window.h"
-#include "modest-icon-names.h"
 #include "modest-tny-platform-factory.h"
 #include "modest-tny-msg-actions.h"
 #include "modest-mail-operation.h"
 #include "modest-tny-platform-factory.h"
 #include "modest-tny-msg-actions.h"
 #include "modest-mail-operation.h"
+#include "modest-icon-names.h"
 
 /* 'private'/'protected' functions */
 static void modest_main_window_class_init    (ModestMainWindowClass *klass);
 
 /* 'private'/'protected' functions */
 static void modest_main_window_class_init    (ModestMainWindowClass *klass);
@@ -68,15 +65,15 @@ struct _ModestMainWindowPrivate {
        GtkUIManager *ui_manager;
 
        GtkWidget *toolbar;
        GtkUIManager *ui_manager;
 
        GtkWidget *toolbar;
-       GtkWidget *menu;
+       GtkWidget *menubar;
 
 
-       //GtkWidget *folder_paned;
+       GtkWidget *folder_paned;
        GtkWidget *msg_paned;
        GtkWidget *main_paned;
        
        ModestWidgetFactory *widget_factory;
        TnyPlatformFactory *factory;
        GtkWidget *msg_paned;
        GtkWidget *main_paned;
        
        ModestWidgetFactory *widget_factory;
        TnyPlatformFactory *factory;
-  
+       
        ModestHeaderView *header_view;
        ModestFolderView *folder_view;
        ModestMsgView    *msg_preview;
        ModestHeaderView *header_view;
        ModestFolderView *folder_view;
        ModestMsgView    *msg_preview;
@@ -87,16 +84,15 @@ struct _ModestMainWindowPrivate {
                                                 MODEST_TYPE_MAIN_WINDOW, \
                                                 ModestMainWindowPrivate))
 
                                                 MODEST_TYPE_MAIN_WINDOW, \
                                                 ModestMainWindowPrivate))
 
-
 typedef struct _GetMsgAsyncHelper {
 typedef struct _GetMsgAsyncHelper {
-        ModestMainWindowPrivate *main_window_private;
-        guint action;
-        ModestMailOperationReplyType reply_type;
-        ModestMailOperationForwardType forward_type;
-        gchar *from;
+       ModestMainWindowPrivate *main_window_private;
+       guint action;
+       ModestMailOperationReplyType reply_type;
+       ModestMailOperationForwardType forward_type;
+       gchar *from;
+       TnyIterator *iter;
 } GetMsgAsyncHelper;
 
 } GetMsgAsyncHelper;
 
-
 /* globals */
 static GtkWindowClass *parent_class = NULL;
 
 /* globals */
 static GtkWindowClass *parent_class = NULL;
 
@@ -120,7 +116,7 @@ modest_main_window_get_type (void)
                        (GInstanceInitFunc) modest_main_window_init,
                        NULL
                };
                        (GInstanceInitFunc) modest_main_window_init,
                        NULL
                };
-               my_type = g_type_register_static (HILDON_TYPE_WINDOW,
+               my_type = g_type_register_static (GTK_TYPE_WINDOW,
                                                  "ModestMainWindow",
                                                  &my_info, 0);
        }
                                                  "ModestMainWindow",
                                                  &my_info, 0);
        }
@@ -170,304 +166,6 @@ modest_main_window_finalize (GObject *obj)
 }
 
 
 }
 
 
-static void
-on_menu_about (GtkWidget *widget, gpointer data)
-{
-       GtkWidget *about;
-       const gchar *authors[] = {
-               "Dirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>",
-               NULL
-       };      
-       about = gtk_about_dialog_new ();
-       gtk_about_dialog_set_name (GTK_ABOUT_DIALOG(about), PACKAGE_NAME);
-       gtk_about_dialog_set_version (GTK_ABOUT_DIALOG(about),PACKAGE_VERSION);
-       gtk_about_dialog_set_copyright (
-               GTK_ABOUT_DIALOG(about),
-               _("Copyright (c) 2006, Nokia Corporation\n"
-                 "All rights reserved."));
-       gtk_about_dialog_set_comments ( GTK_ABOUT_DIALOG(about),
-               _("a modest e-mail client\n\n"
-                 "design and implementation: Dirk-Jan C. Binnema\n"
-                 "contributions from the fine people at KernelConcepts and Igalia\n\n"
-                 "uses the tinymail email framework written by Philip van Hoof"));
-       gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(about), authors);
-       gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org");
-
-       gtk_dialog_run (GTK_DIALOG (about));
-       gtk_widget_destroy(about);
-}
-
-
-static void
-on_menu_accounts (ModestMainWindow *self, guint action, GtkWidget *widget)
-{
-       GtkWidget *account_win;
-       ModestMainWindowPrivate *priv;
-
-       g_return_if_fail (widget);
-       g_return_if_fail (self);
-       
-       priv        = MODEST_MAIN_WINDOW_GET_PRIVATE(self);     
-       account_win = modest_account_view_window_new (priv->widget_factory);
-
-       gtk_window_set_transient_for (GTK_WINDOW(account_win),
-                                     GTK_WINDOW(self));
-                                     
-       gtk_widget_show (account_win);
-}
-
-
-static void
-on_menu_new_message (ModestMainWindow *self, guint action, GtkWidget *widget)
-{
-       GtkWidget *msg_win;
-       ModestMainWindowPrivate *priv;
-
-       priv  = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-
-       msg_win = modest_edit_msg_window_new (priv->widget_factory,
-                                             MODEST_EDIT_TYPE_NEW,
-                                             NULL);
-       gtk_widget_show (msg_win);
-}
-
-static void
-get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data)
-{
-       GtkWidget *msg_win;
-       TnyHeader *new_header;
-       TnyMsg *new_msg;
-       ModestMainWindowPrivate *priv;
-       ModestEditType edit_type = -2;
-       GetMsgAsyncHelper *helper;
-
-       helper = (GetMsgAsyncHelper *) (user_data);
-       priv  = helper->main_window_private;
-
-       /* FIXME: select proper action */
-       new_msg = NULL;
-       switch (helper->action) {
-       case 1:
-               new_msg = 
-                       modest_mail_operation_create_reply_mail (msg, helper->from, helper->reply_type,
-                                                                MODEST_MAIL_OPERATION_REPLY_MODE_SENDER);
-               edit_type = MODEST_EDIT_TYPE_REPLY;
-               break;
-       case 2:
-               new_msg = 
-                       modest_mail_operation_create_reply_mail (msg, helper->from, helper->reply_type,
-                                                                MODEST_MAIL_OPERATION_REPLY_MODE_ALL);
-               edit_type = MODEST_EDIT_TYPE_REPLY;
-               break;
-       case 3:
-               new_msg = 
-                       modest_mail_operation_create_forward_mail (msg, helper->from, helper->forward_type);
-               edit_type = MODEST_EDIT_TYPE_FORWARD;
-               break;
-       default:
-               g_warning ("unexpected action type: %d", helper->action);
-       }
-       
-       if (new_msg) {
-               /* Set from */
-               new_header = tny_msg_get_header (new_msg);
-               tny_header_set_from (new_header, helper->from);
-               
-               /* Show edit window */
-               msg_win = modest_edit_msg_window_new (priv->widget_factory,
-                                                     edit_type,
-                                                     new_msg);
-               gtk_widget_show (msg_win);
-               
-               /* Clean and go on */
-               g_object_unref (new_msg);
-       }
-}
-
-static void
-on_menu_reply_forward (ModestMainWindow *self, guint action, GtkWidget *widget)
-{
-       ModestMainWindowPrivate *priv;
-       ModestHeaderView *header_view;
-       TnyList *header_list;
-       TnyIterator *iter;
-       gchar *reply_key, *forward_key;
-       ModestMailOperationReplyType reply_type;
-       ModestMailOperationForwardType forward_type;
-       ModestConf *conf;
-       GError *error;
-       GetMsgAsyncHelper *helper;
-
-       priv  = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-       conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory);
-
-       header_view = modest_widget_factory_get_header_view (priv->widget_factory);
-       header_list = modest_header_view_get_selected_headers (header_view);
-
-       /* Get reply and forward types */
-       error = NULL;
-       reply_key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, MODEST_CONF_REPLY_TYPE);
-       reply_type = modest_conf_get_int (conf, reply_key, &error);
-       if (error || reply_type == 0) {
-               g_warning ("key %s not defined", reply_key);
-               reply_type = MODEST_MAIL_OPERATION_REPLY_TYPE_CITE;
-               if (error) {
-                       g_error_free (error);
-                       error = NULL;
-               }
-       }
-       g_free (reply_key);
-       
-       forward_key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, MODEST_CONF_FORWARD_TYPE);
-       forward_type = modest_conf_get_int (conf, forward_key, &error);
-       if (error || forward_type == 0) {
-               g_warning ("key %s not defined", forward_key);
-               forward_type = MODEST_MAIL_OPERATION_FORWARD_TYPE_INLINE;
-               if (error) {
-                       g_error_free (error);
-                       error = NULL;
-               }
-       }
-       g_free (forward_key);
-       
-       if (header_list) {
-               TnyHeader *header;
-               TnyFolder *folder;
-               gchar *from, *email_key;
-               const gchar *account_name;
-
-               /* We assume that we can only select messages of the
-                  same folder and that we reply all of them from the
-                  same account. In fact the interface currently only
-                  allows single selection */
-               account_name = modest_folder_view_get_selected_account (priv->folder_view);
-               email_key = g_strdup_printf ("%s/%s/%s", MODEST_ACCOUNT_NAMESPACE, 
-                                            account_name, MODEST_ACCOUNT_EMAIL);
-               from = modest_conf_get_string (conf, email_key, NULL);
-               g_free (email_key);
-
-               iter = tny_list_create_iterator (header_list);
-               header = TNY_HEADER (tny_iterator_get_current (iter));
-               folder = tny_header_get_folder (header);
-
-               do {
-                       /* Since it's not an object, we need to create
-                          it each time due to it's not a GObject and
-                          we can not do a g_object_ref. No need to
-                          free it, tinymail will do it for us. */
-                       helper = g_slice_new0 (GetMsgAsyncHelper);
-                       helper->main_window_private = priv;
-                       helper->reply_type = reply_type;
-                       helper->forward_type = forward_type;
-                       helper->action = action;
-                       helper->from = from;
-
-                       /* Get msg from header */
-                       header = TNY_HEADER (tny_iterator_get_current (iter));
-                       tny_folder_get_msg_async (folder, header, get_msg_cb, helper);
-                       tny_iterator_next (iter);
-
-               } while (!tny_iterator_is_done (iter));
-
-               /* Clean */
-               g_free (from);
-               g_object_unref (G_OBJECT (iter));
-               g_object_unref (G_OBJECT (folder));
-       }
-}
-
-static void
-on_menu_quit (ModestMainWindow *self, guint action, GtkWidget *widget)
-{
-       save_sizes (self);
-       gtk_widget_destroy (GTK_WIDGET(self));
-}
-
-static void
-on_menu_delete (ModestMainWindow *self, guint action, GtkWidget *widget)
-{
-       ModestMainWindowPrivate *priv;
-       ModestHeaderView *header_view;
-       TnyList *header_list;
-       TnyIterator *iter;
-       GtkTreeModel *model;
-
-       priv  = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-
-       header_view = modest_widget_factory_get_header_view (priv->widget_factory);
-       header_list = modest_header_view_get_selected_headers (header_view);
-       
-       if (header_list) {
-               iter = tny_list_create_iterator (header_list);
-               model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
-               if (GTK_IS_TREE_MODEL_SORT (model))
-                       model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (model));
-               do {
-                       TnyHeader *header;
-                       ModestMailOperation *mail_op;
-
-                       header = TNY_HEADER (tny_iterator_get_current (iter));
-                       /* TODO: thick grain mail operation involving
-                          a list of objects. Composite pattern ??? */
-                       mail_op = modest_mail_operation_new ();
-
-                       /* Move to trash */
-                       modest_mail_operation_remove_msg (mail_op, header, TRUE);
-
-                       /* Remove from tree model */
-                       tny_list_remove (TNY_LIST (model), G_OBJECT (header));
-
-                       g_object_unref (G_OBJECT (mail_op));
-                       g_object_unref (header);
-                       tny_iterator_next (iter);
-
-               } while (!tny_iterator_is_done (iter));
-       }
-}
-
-
-/* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */
-static const gchar* UI_DEF=
-//     "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-       "<ui>"
-       "  <popup>"
-       "    <menu name=\"Message\" action=\"MenuMessage\">"
-       "      <menuitem name=\"New\" action=\"on_menu_new_message\" />"
-       "    </menu>"
-       "    <menu name=\"JustifyMenu\" action=\"JustifyMenuAction\">"
-       "      <menuitem name=\"Left\" action=\"justify-left\"/>"
-       "      <menuitem name=\"Centre\" action=\"justify-center\"/>"
-       "      <menuitem name=\"Right\" action=\"justify-right\"/>"
-       "      <menuitem name=\"Fill\" action=\"justify-fill\"/>"
-       "    </menu>"
-       "  </popup>"
-       "</ui>";
-
-static GtkMenu *
-get_menu (ModestMainWindow *self)
-{
-       GtkWidget *w;
-       GError *err = NULL;
-       int i = 0;
-       
-       ModestMainWindowPrivate *priv;
-       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-
-       priv->ui_manager = gtk_ui_manager_new ();
-
-       if (!gtk_ui_manager_add_ui_from_string (priv->ui_manager,
-                                               UI_DEF, strlen(UI_DEF),
-                                               &err)) {
-               g_warning (err->message);
-               g_error_free (err);
-       }
-       
-       w = gtk_ui_manager_get_widget (priv->ui_manager, "/ui/popup");
-       return GTK_MENU(w);
-}
-
-
-
 static ModestHeaderView*
 header_view_new (ModestMainWindow *self)
 {
 static ModestHeaderView*
 header_view_new (ModestMainWindow *self)
 {
@@ -478,10 +176,10 @@ header_view_new (ModestMainWindow *self)
        ModestHeaderViewColumn cols[] = {
                MODEST_HEADER_VIEW_COLUMN_MSGTYPE,
                MODEST_HEADER_VIEW_COLUMN_ATTACH,
        ModestHeaderViewColumn cols[] = {
                MODEST_HEADER_VIEW_COLUMN_MSGTYPE,
                MODEST_HEADER_VIEW_COLUMN_ATTACH,
-               MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER
-//             MODEST_HEADER_VIEW_COLUMN_FROM,
-//             MODEST_HEADER_VIEW_COLUMN_SUBJECT,
-//             MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE
+/*             MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER, */
+               MODEST_HEADER_VIEW_COLUMN_FROM,
+               MODEST_HEADER_VIEW_COLUMN_SUBJECT,
+               MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE
        };
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
        
        };
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
        
@@ -497,96 +195,6 @@ header_view_new (ModestMainWindow *self)
 
 
 static void
 
 
 static void
-on_toolbar_button_clicked (ModestToolbar *toolbar, ModestToolbarButton button_id,
-                          ModestMainWindow *self)
-{
-       GtkTreeSelection *sel;
-       GtkTreeIter iter;
-       GtkTreeModel *model;
-       ModestMainWindowPrivate *priv;
-
-       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-       
-       switch (button_id) {
-       case MODEST_TOOLBAR_BUTTON_NEW_MAIL:
-               on_menu_new_message (self, 0, NULL);
-               break;
-       case MODEST_TOOLBAR_BUTTON_REPLY:
-               on_menu_reply_forward (self, 1, NULL);
-               break;
-       case MODEST_TOOLBAR_BUTTON_REPLY_ALL:
-               on_menu_reply_forward (self, 2, NULL);
-               break;
-       case MODEST_TOOLBAR_BUTTON_FORWARD:
-               on_menu_reply_forward (self, 3, NULL);
-               break;
-       case MODEST_TOOLBAR_BUTTON_SEND_RECEIVE:
-               
-
-       case MODEST_TOOLBAR_BUTTON_NEXT:
-               sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(priv->header_view));
-               if (sel) {
-                       gtk_tree_selection_get_selected (sel, &model, &iter);
-                       gtk_tree_model_iter_next (model, &iter);
-                       gtk_tree_selection_select_iter (sel, &iter);
-               }
-               
-       case MODEST_TOOLBAR_BUTTON_PREV:
-       /*      if (sel) { */
-/*                     gtk_tree_selection_get_selected (sel, &model, &iter); */
-/*                     gtk_tree_model_iter_prev (model, &iter); */
-/*                     gtk_tree_selection_select_iter (sel, &iter); */
-/*             } */
-
-               break;
-       case MODEST_TOOLBAR_BUTTON_DELETE:
-               on_menu_delete (self, 0, GTK_WIDGET (toolbar));
-               break;
-
-       default:
-               g_printerr ("modest: key %d pressed\n", button_id);
-       }
-}
-
-static ModestToolbar*
-toolbar_new (ModestMainWindow *self)
-{
-       int i;
-       ModestToolbar *toolbar;
-       GSList *buttons = NULL;
-       ModestMainWindowPrivate *priv;
-
-       ModestToolbarButton button_ids[] = {
-               MODEST_TOOLBAR_BUTTON_NEW_MAIL,
-               MODEST_TOOLBAR_BUTTON_REPLY,
-               MODEST_TOOLBAR_BUTTON_REPLY_ALL,
-               MODEST_TOOLBAR_BUTTON_FORWARD,
-               MODEST_TOOLBAR_SEPARATOR,
-               MODEST_TOOLBAR_BUTTON_SEND_RECEIVE,
-               MODEST_TOOLBAR_SEPARATOR,
-               MODEST_TOOLBAR_BUTTON_PREV,
-               MODEST_TOOLBAR_BUTTON_NEXT,
-               MODEST_TOOLBAR_SEPARATOR,               
-               MODEST_TOOLBAR_BUTTON_DELETE
-       };              
-       
-       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-
-       for (i = 0 ; i != sizeof(button_ids) / sizeof(ModestToolbarButton); ++i)
-               buttons = g_slist_append (buttons, GINT_TO_POINTER(button_ids[i]));
-       
-       toolbar = modest_widget_factory_get_main_toolbar (priv->widget_factory, buttons);
-       g_slist_free (buttons);
-       
-       g_signal_connect (G_OBJECT(toolbar), "button_clicked",
-                         G_CALLBACK(on_toolbar_button_clicked), self);
-       
-       return toolbar;
-}
-
-
-
-static void
 restore_sizes (ModestMainWindow *self)
 {
        ModestConf *conf;
 restore_sizes (ModestMainWindow *self)
 {
        ModestConf *conf;
@@ -596,11 +204,15 @@ restore_sizes (ModestMainWindow *self)
        conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory);
 
        modest_widget_memory_restore (conf,G_OBJECT(self),
        conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory);
 
        modest_widget_memory_restore (conf,G_OBJECT(self),
-                                              "modest-main-window");
+                                     "modest-main-window");
+       modest_widget_memory_restore (conf, G_OBJECT(priv->folder_paned),
+                                     "modest-folder-paned");
        modest_widget_memory_restore (conf, G_OBJECT(priv->msg_paned),
        modest_widget_memory_restore (conf, G_OBJECT(priv->msg_paned),
-                                              "modest-msg-paned");
+                                     "modest-msg-paned");
        modest_widget_memory_restore (conf, G_OBJECT(priv->main_paned),
        modest_widget_memory_restore (conf, G_OBJECT(priv->main_paned),
-                                              "modest-main-paned");
+                                     "modest-main-paned");
+       modest_widget_memory_restore (conf, G_OBJECT(priv->header_view),
+                                     "header-view");
 }
 
 
 }
 
 
@@ -613,12 +225,14 @@ save_sizes (ModestMainWindow *self)
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
        conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory);
        
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
        conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory);
        
-       modest_widget_memory_save (conf,G_OBJECT(self),
-                                           "modest-main-window");
+       modest_widget_memory_save (conf,G_OBJECT(self), "modest-main-window");
+       modest_widget_memory_save (conf, G_OBJECT(priv->folder_paned),
+                                  "modest-folder-paned");
        modest_widget_memory_save (conf, G_OBJECT(priv->msg_paned),
        modest_widget_memory_save (conf, G_OBJECT(priv->msg_paned),
-                                           "modest-msg-paned");
+                                  "modest-msg-paned");
        modest_widget_memory_save (conf, G_OBJECT(priv->main_paned),
        modest_widget_memory_save (conf, G_OBJECT(priv->main_paned),
-                                           "modest-main-paned");
+                                  "modest-main-paned");
+       modest_widget_memory_save (conf, G_OBJECT(priv->header_view), "header-view");
 }
 
 static GtkWidget*
 }
 
 static GtkWidget*
@@ -651,22 +265,33 @@ on_delete_event (GtkWidget *widget, GdkEvent  *event, ModestMainWindow *self)
 
 
 GtkWidget*
 
 
 GtkWidget*
-modest_main_window_new (ModestWidgetFactory *widget_factory)
+modest_main_window_new (ModestWidgetFactory *widget_factory,
+                       GtkUIManager *ui_manager)
 {
        GObject *obj;
        ModestMainWindowPrivate *priv;
 {
        GObject *obj;
        ModestMainWindowPrivate *priv;
-       
        GtkWidget *main_vbox;
        GtkWidget *status_hbox;
        GtkWidget *main_vbox;
        GtkWidget *status_hbox;
-       GtkWidget *header_win, *folder_win, *favorites_win;
+       GtkWidget *header_win, *folder_win;
        
        g_return_val_if_fail (widget_factory, NULL);
 
        obj  = g_object_new(MODEST_TYPE_MAIN_WINDOW, NULL);
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj);
 
        
        g_return_val_if_fail (widget_factory, NULL);
 
        obj  = g_object_new(MODEST_TYPE_MAIN_WINDOW, NULL);
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj);
 
-       g_object_ref (widget_factory);
-       priv->widget_factory = widget_factory;
+       priv->widget_factory = g_object_ref (widget_factory);
+       priv->ui_manager = g_object_ref (ui_manager);
+
+       /* Add accelerators */
+       gtk_window_add_accel_group (GTK_WINDOW (obj), 
+                                   gtk_ui_manager_get_accel_group (priv->ui_manager));
+
+
+       /* Toolbar / Menubar */
+       priv->toolbar = gtk_ui_manager_get_widget (priv->ui_manager, "/ToolBar");
+       priv->menubar = gtk_ui_manager_get_widget (priv->ui_manager, "/MenuBar");
+
+       gtk_toolbar_set_tooltips (GTK_TOOLBAR (priv->toolbar), TRUE);
 
        /* widgets from factory */
        priv->folder_view = modest_widget_factory_get_folder_view (widget_factory);
 
        /* widgets from factory */
        priv->folder_view = modest_widget_factory_get_folder_view (widget_factory);
@@ -676,26 +301,21 @@ modest_main_window_new (ModestWidgetFactory *widget_factory)
        folder_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->folder_view),
                                                 FALSE);
        header_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->header_view),
        folder_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->folder_view),
                                                 FALSE);
        header_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->header_view),
-                                                FALSE);                                
-       /*menu */
-       priv->menu = get_menu (MODEST_MAIN_WINDOW(obj));
-       hildon_window_set_menu (HILDON_WINDOW(obj), GTK_MENU(priv->menu));
-       
-       priv->toolbar = GTK_WIDGET(toolbar_new (MODEST_MAIN_WINDOW(obj)));
-       
+                                                FALSE);                           
+
        /* paned */
        /* paned */
+       priv->folder_paned = gtk_vpaned_new ();
        priv->msg_paned = gtk_vpaned_new ();
        priv->main_paned = gtk_hpaned_new ();
        priv->msg_paned = gtk_vpaned_new ();
        priv->main_paned = gtk_hpaned_new ();
-
        gtk_paned_add1 (GTK_PANED(priv->main_paned), folder_win);
        gtk_paned_add2 (GTK_PANED(priv->main_paned), priv->msg_paned);
        gtk_paned_add1 (GTK_PANED(priv->main_paned), folder_win);
        gtk_paned_add2 (GTK_PANED(priv->main_paned), priv->msg_paned);
-
        gtk_paned_add1 (GTK_PANED(priv->msg_paned), header_win);
        gtk_paned_add2 (GTK_PANED(priv->msg_paned), GTK_WIDGET(priv->msg_preview));
 
        gtk_widget_show (GTK_WIDGET(priv->header_view));
        gtk_tree_view_columns_autosize (GTK_TREE_VIEW(priv->header_view));
 
        gtk_paned_add1 (GTK_PANED(priv->msg_paned), header_win);
        gtk_paned_add2 (GTK_PANED(priv->msg_paned), GTK_WIDGET(priv->msg_preview));
 
        gtk_widget_show (GTK_WIDGET(priv->header_view));
        gtk_tree_view_columns_autosize (GTK_TREE_VIEW(priv->header_view));
 
+       
        /* status bar / progress */
        status_hbox = gtk_hbox_new (FALSE, 0);
        gtk_box_pack_start (GTK_BOX(status_hbox),
        /* status bar / progress */
        status_hbox = gtk_hbox_new (FALSE, 0);
        gtk_box_pack_start (GTK_BOX(status_hbox),
@@ -713,8 +333,9 @@ modest_main_window_new (ModestWidgetFactory *widget_factory)
 
        /* putting it all together... */
        main_vbox = gtk_vbox_new (FALSE, 6);
 
        /* putting it all together... */
        main_vbox = gtk_vbox_new (FALSE, 6);
+       gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0);
        gtk_box_pack_start (GTK_BOX(main_vbox), priv->main_paned, TRUE, TRUE,0);
        gtk_box_pack_start (GTK_BOX(main_vbox), priv->main_paned, TRUE, TRUE,0);
-       gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0);        
        gtk_box_pack_start (GTK_BOX(main_vbox), status_hbox, FALSE, FALSE, 0);
        
        gtk_container_add (GTK_CONTAINER(obj), main_vbox);
        gtk_box_pack_start (GTK_BOX(main_vbox), status_hbox, FALSE, FALSE, 0);
        
        gtk_container_add (GTK_CONTAINER(obj), main_vbox);
diff --git a/src/maemo/modest-main-window.h b/src/maemo/modest-main-window.h
deleted file mode 100644 (file)
index 9164e90..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* modest-main-window.h */
-/* insert (c)/licensing information) */
-
-#ifndef __MODEST_MAIN_WINDOW_H__
-#define __MODEST_MAIN_WINDOW_H__
-
-#include <hildon-widgets/hildon-window.h>
-#include <modest-widget-factory.h>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif /*HAVE_CONFIG_H*/
-
-G_BEGIN_DECLS
-
-/* convenience macros */
-#define MODEST_TYPE_MAIN_WINDOW             (modest_main_window_get_type())
-#define MODEST_MAIN_WINDOW(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_MAIN_WINDOW,ModestMainWindow))
-#define MODEST_MAIN_WINDOW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_MAIN_WINDOW,GtkWindow))
-#define MODEST_IS_MAIN_WINDOW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_MAIN_WINDOW))
-#define MODEST_IS_MAIN_WINDOW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_MAIN_WINDOW))
-#define MODEST_MAIN_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_MAIN_WINDOW,ModestMainWindowClass))
-
-typedef struct _ModestMainWindow      ModestMainWindow;
-typedef struct _ModestMainWindowClass ModestMainWindowClass;
-
-struct _ModestMainWindow {
-        HildonWindow parent;
-       /* insert public members, if any */
-};
-
-struct _ModestMainWindowClass {
-       HildonWindowClass parent_class;
-       /* insert signal callback declarations, eg. */
-       /* void (* my_event) (ModestMainWindow* obj); */
-};
-
-/* member functions */
-GType        modest_main_window_get_type    (void) G_GNUC_CONST;
-
-
-GtkWidget*   modest_main_window_new         (ModestWidgetFactory *factory);
-
-G_END_DECLS
-
-#endif /* __MODEST_MAIN_WINDOW_H__ */
-
diff --git a/src/maemo/modest-ui.c b/src/maemo/modest-ui.c
deleted file mode 100644 (file)
index a457f1a..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-/* Copyright (c) 2006, Nokia Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * * Neither the name of the Nokia Corporation nor the names of its
- *   contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <gtk/gtk.h>
-#include <glade/glade.h>
-#include <glib/gi18n.h>
-#include <string.h>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif /*HAVE_CONFIG_H*/
-
-#include <hildon-widgets/hildon-program.h>
-
-#include <modest-ui.h>
-#include <modest-account-mgr.h>
-#include <modest-widget-factory.h>
-#include <modest-main-window.h>
-#include <modest-tny-platform-factory.h>
-
-
-/* 'private'/'protected' functions */
-static void   modest_ui_class_init     (ModestUIClass *klass);
-static void   modest_ui_init           (ModestUI *obj);
-static void   modest_ui_finalize       (GObject *obj);
-
-gchar *on_password_requested (TnyAccountIface *, const gchar *, gboolean *);
-
-
-typedef struct _ModestUIPrivate ModestUIPrivate;
-struct _ModestUIPrivate {
-       ModestWidgetFactory    *widget_factory; 
-       GtkWidget              *main_window;
-       HildonProgram          *hildon_program;
-};
-
-#define MODEST_UI_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
-                                       MODEST_TYPE_UI, \
-                                       ModestUIPrivate))
-
-
-/* list my signals */
-enum {
-       /* MY_SIGNAL_1, */
-       /* MY_SIGNAL_2, */
-       LAST_SIGNAL
-};
-
-/* globals */
-static GObjectClass *parent_class = NULL;
-
-
-GType
-modest_ui_get_type (void)
-{
-       static GType my_type = 0;
-       if (!my_type) {
-               static const GTypeInfo my_info = {
-                       sizeof(ModestUIClass),
-                       NULL,           /* base init */
-                       NULL,           /* base finalize */
-                       (GClassInitFunc) modest_ui_class_init,
-                       NULL,           /* class finalize */
-                       NULL,           /* class data */
-                       sizeof(ModestUI),
-                       1,              /* n_preallocs */
-                       (GInstanceInitFunc) modest_ui_init,
-                       NULL
-               };
-               my_type = g_type_register_static (G_TYPE_OBJECT,
-                                                 "ModestUI",
-                                                 &my_info, 0);
-       }
-       return my_type;
-}
-
-
-static void
-modest_ui_class_init (ModestUIClass *klass)
-{
-       GObjectClass *gobject_class;
-       gobject_class = (GObjectClass*) klass;
-
-       parent_class            = g_type_class_peek_parent (klass);
-       gobject_class->finalize = modest_ui_finalize;
-
-       g_type_class_add_private (gobject_class, sizeof(ModestUIPrivate));
-
-}
-
-
-static void
-modest_ui_init (ModestUI *obj)
-{
-       ModestUIPrivate *priv;
-
-       priv = MODEST_UI_GET_PRIVATE(obj);
-
-       priv->widget_factory = NULL;
-
-       priv->main_window    = NULL;
-}
-
-
-static void
-modest_ui_finalize (GObject *obj)
-{
-       
-       ModestUIPrivate *priv = MODEST_UI_GET_PRIVATE(obj);
-
-       if (priv->widget_factory) {
-               g_object_unref (G_OBJECT(priv->widget_factory));
-               priv->widget_factory = NULL;
-       }
-}
-
-
-ModestUI*
-modest_ui_new (void)
-{
-       GObject *obj;
-       ModestUIPrivate *priv;
-       TnyPlatformFactory *fact;
-       ModestAccountMgr *account_mgr;
-       TnyAccountStore *account_store;
-
-       obj  = g_object_new(MODEST_TYPE_UI, NULL);
-       priv = MODEST_UI_GET_PRIVATE(obj);
-
-       /* Get the platform-dependent instances */
-       fact = modest_tny_platform_factory_get_instance ();
-       
-       account_mgr = modest_tny_platform_factory_get_modest_account_mgr_instance (fact);
-       if (!account_mgr) {
-               g_printerr ("modest: could not create ModestAccountMgr instance\n");
-               g_object_unref (obj);
-               return NULL;
-        }
-
-       account_store = tny_platform_factory_new_account_store (fact);
-       if (!account_store) {
-               g_printerr ("modest: could not initialze ModestTnyAccountStore instance\n");
-               return NULL;
-        }
-
-       priv->widget_factory = modest_widget_factory_new ();
-       if (!priv->widget_factory) {
-               g_printerr ("modest: could not initialize widget factory\n");
-               return NULL;
-       }
-
-       g_set_application_name ("Modest");
-       
-       priv->hildon_program = HILDON_PROGRAM (hildon_program_get_instance());
-       if (!priv->hildon_program) {
-               g_printerr ("modest: could not initialize HildonProgram instance\n");
-               return NULL;
-       }
-
-       return MODEST_UI(obj);
-}
-
-static gboolean
-on_main_window_destroy (GtkObject *widget, ModestUI *self)
-{
-       /* FIXME: check if there any viewer/editing windows opened */
-       gtk_main_quit ();
-       return FALSE;
-}
-
-
-GtkWidget*
-modest_ui_main_window (ModestUI *modest_ui)
-{
-       ModestUIPrivate *priv;
-
-       g_return_val_if_fail (modest_ui, NULL);
-       priv = MODEST_UI_GET_PRIVATE(modest_ui);
-
-       if (!priv->main_window) {
-               priv->main_window =
-                       modest_main_window_new (priv->widget_factory);
-               g_signal_connect (G_OBJECT(priv->main_window), "destroy",
-                                 G_CALLBACK(on_main_window_destroy), modest_ui);
-
-       }
-               
-       if (!priv->main_window)
-               g_printerr ("modest: could not create main window\n");
-
-       hildon_program_add_window (priv->hildon_program, priv->main_window);
-       
-       return priv->main_window;
-}
index 4d269bf..e71c044 100644 (file)
@@ -42,7 +42,8 @@ typedef enum _ModestErrorDomain {
 typedef enum _ModestErrorCode {
         MODEST_MAIL_OPERATION_ERROR_BAD_ACCOUNT,
         MODEST_MAIL_OPERATION_ERROR_MISSING_PARAMETER,
 typedef enum _ModestErrorCode {
         MODEST_MAIL_OPERATION_ERROR_BAD_ACCOUNT,
         MODEST_MAIL_OPERATION_ERROR_MISSING_PARAMETER,
-       MODEST_MAIL_OPERATION_ERROR_OPERATION_CANCELED
+       MODEST_MAIL_OPERATION_ERROR_OPERATION_CANCELED,
+       MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND
 } ModestErrorCode;
 
 G_END_DECLS
 } ModestErrorCode;
 
 G_END_DECLS
index 9a99a59..6eefdf6 100644 (file)
@@ -880,7 +880,19 @@ modest_mail_operation_remove_msg (ModestMailOperation *self,
                store_account = TNY_STORE_ACCOUNT (tny_folder_get_account (folder));
                trash_folder = modest_mail_operation_find_trash_folder (self, store_account);
 
                store_account = TNY_STORE_ACCOUNT (tny_folder_get_account (folder));
                trash_folder = modest_mail_operation_find_trash_folder (self, store_account);
 
-               modest_mail_operation_move_msg (self, header, trash_folder);
+               if (trash_folder) {
+                       modest_mail_operation_move_msg (self, header, trash_folder);
+/*                     g_object_unref (trash_folder); */
+               } else {
+                       ModestMailOperationPrivate *priv;
+
+                       /* Set status failed and set an error */
+                       priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+                       priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+                       g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
+                                    MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND,
+                                    _("Error trying to delete a message. Trash folder not found"));
+               }
 
                g_object_unref (G_OBJECT (store_account));
        } else {
 
                g_object_unref (G_OBJECT (store_account));
        } else {
@@ -966,17 +978,6 @@ get_content_type(const gchar *s)
        return g_string_free(type, FALSE);
 }
 
        return g_string_free(type, FALSE);
 }
 
-static GQuark 
-modest_error_quark (void)
-{
-       static GQuark err_q = 0;
-       
-       if (err_q == 0)
-               err_q = g_quark_from_static_string ("modest-error-quark");
-       
-       return err_q;
-}
-
 static void
 add_attachments (TnyMsg *msg, GList *attachments_list)
 {
 static void
 add_attachments (TnyMsg *msg, GList *attachments_list)
 {
index 2f85ae8..3b59c39 100644 (file)
@@ -63,7 +63,8 @@
 static gboolean hildon_init (); /* NOP if HILDON is not defined */
 
 static int start_ui (const gchar* mailto, const gchar *cc,
 static gboolean hildon_init (); /* NOP if HILDON is not defined */
 
 static int start_ui (const gchar* mailto, const gchar *cc,
-                    const gchar *bcc, const gchar* subject, const gchar *body);
+                    const gchar *bcc, const gchar* subject, const gchar *body,
+                    TnyAccountStore *account_store);
 
 static int send_mail (const gchar* mailto, const gchar *cc, const gchar *bcc,
                      const gchar* subject, const gchar *body);
 
 static int send_mail (const gchar* mailto, const gchar *cc, const gchar *bcc,
                      const gchar* subject, const gchar *body);
@@ -71,9 +72,10 @@ static int send_mail (const gchar* mailto, const gchar *cc, const gchar *bcc,
 int
 main (int argc, char *argv[])
 {
 int
 main (int argc, char *argv[])
 {
-       GOptionContext   *context        = NULL;
-       TnyPlatformFactory *fact         = NULL;
-       ModestConf       *modest_conf    = NULL;
+       GOptionContext     *context       = NULL;
+       TnyPlatformFactory *fact          = NULL;
+       TnyAccountStore    *account_store = NULL;
+       ModestConf         *modest_conf   = NULL;
 
        GError *err = NULL;
        int retval  = MODEST_ERR_NONE;
 
        GError *err = NULL;
        int retval  = MODEST_ERR_NONE;
@@ -99,7 +101,7 @@ main (int argc, char *argv[])
                { NULL, 0, 0, 0, NULL, NULL, NULL }
        };
 
                { NULL, 0, 0, 0, NULL, NULL, NULL }
        };
 
-       bindtextdomain (GETTEXT_PACKAGE, MODESTLOCALEDIR);
+       bindtextdomain (GETTEXT_PACKAGE, MODEST_LOCALEDIR);
        bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
        textdomain (GETTEXT_PACKAGE);
 
        bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
        textdomain (GETTEXT_PACKAGE);
 
@@ -118,8 +120,11 @@ main (int argc, char *argv[])
                goto cleanup;
        }
        g_option_context_free (context);
                goto cleanup;
        }
        g_option_context_free (context);
-       
+
+       /* Get platform factory */      
        fact = modest_tny_platform_factory_get_instance ();
        fact = modest_tny_platform_factory_get_instance ();
+
+       /* Check modest conf */
        modest_conf = modest_tny_platform_factory_get_modest_conf_instance (fact);
        if (!modest_conf) {
                g_printerr ("modest: failed to initialize config system, exiting\n");
        modest_conf = modest_tny_platform_factory_get_modest_conf_instance (fact);
        if (!modest_conf) {
                g_printerr ("modest: failed to initialize config system, exiting\n");
@@ -127,6 +132,14 @@ main (int argc, char *argv[])
                goto cleanup;
        }
 
                goto cleanup;
        }
 
+       /* Get the account store */
+       account_store = tny_platform_factory_new_account_store (fact);
+       if (!account_store) {
+               g_printerr ("modest: could not initialize a ModestTnyAccountStore instance\n");
+               retval = MODEST_ERR_RUN;
+               goto cleanup;
+        }
+
        if (debug)
                g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING);
        
        if (debug)
                g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING);
        
@@ -135,7 +148,7 @@ main (int argc, char *argv[])
        
        if (!batch) {
                gtk_init (&argc, &argv);
        
        if (!batch) {
                gtk_init (&argc, &argv);
-               retval = start_ui (mailto, cc, bcc, subject, body);
+               retval = start_ui (mailto, cc, bcc, subject, body, account_store);
        } else 
                retval = send_mail (mailto, cc, bcc, subject, body);
                
        } else 
                retval = send_mail (mailto, cc, bcc, subject, body);
                
@@ -148,7 +161,8 @@ cleanup:
 
 static int
 start_ui (const gchar* mailto, const gchar *cc, const gchar *bcc,
 
 static int
 start_ui (const gchar* mailto, const gchar *cc, const gchar *bcc,
-         const gchar* subject, const gchar *body)
+         const gchar* subject, const gchar *body,
+         TnyAccountStore *account_store)
 {
 
        ModestUI *modest_ui;
 {
 
        ModestUI *modest_ui;
@@ -158,7 +172,7 @@ start_ui (const gchar* mailto, const gchar *cc, const gchar *bcc,
        GtkWidget *win;
        #endif
        
        GtkWidget *win;
        #endif
        
-       modest_ui = MODEST_UI(modest_ui_new ());
+       modest_ui = MODEST_UI(modest_ui_new (account_store));
        if (!modest_ui) {
                g_printerr ("modest: failed to initialize ui, exiting\n");
                retval = MODEST_ERR_UI;
        if (!modest_ui) {
                g_printerr ("modest: failed to initialize ui, exiting\n");
                retval = MODEST_ERR_UI;
@@ -186,9 +200,17 @@ start_ui (const gchar* mailto, const gchar *cc, const gchar *bcc,
                win = modest_ui_main_window (modest_ui);
        
        if (win) {
                win = modest_ui_main_window (modest_ui);
        
        if (win) {
+               TnyDevice *device;
+
                gtk_widget_show (win);
                gtk_widget_show (win);
+       
+               /* Go online */
+               device = tny_account_store_get_device (account_store);
+               tny_device_force_online (device);
+               g_object_unref (G_OBJECT (device));
+
                gtk_main();
                gtk_main();
-       }       
+       }
 cleanup:
        if (modest_ui)
                g_object_unref (modest_ui);
 cleanup:
        if (modest_ui)
                g_object_unref (modest_ui);
index 08e57db..56c83a5 100644 (file)
@@ -169,7 +169,7 @@ gchar* modest_text_utils_get_display_address (gchar *address);
  * 
  * Returns: the length of the  prefix, or 0 if there is none
  */
  * 
  * Returns: the length of the  prefix, or 0 if there is none
  */
-gint modest_text_utils_get_subject_prefix_len (const gchar *sub);
+gint modest_text_utils_get_subject_prefix_len (const gchar *subject);
 
 
 /**
 
 
 /**
index bce0157..561e0f8 100644 (file)
@@ -217,7 +217,7 @@ get_password (TnyAccount *account, const gchar *prompt, gboolean *cancel)
        gchar *pwd = NULL;
        gboolean already_asked;
        
        gchar *pwd = NULL;
        gboolean already_asked;
        
-       g_return_val_if_fail (account, NULL);
+       gdk_threads_enter ();
 
        key           = tny_account_get_id (account);
        account_store = TNY_ACCOUNT_STORE(get_account_store_for_account (account));
 
        key           = tny_account_get_id (account);
        account_store = TNY_ACCOUNT_STORE(get_account_store_for_account (account));
@@ -226,7 +226,7 @@ get_password (TnyAccount *account, const gchar *prompt, gboolean *cancel)
         priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
 
        /* is it in the hash? if it's already there, it must be wrong... */
         priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
 
        /* is it in the hash? if it's already there, it must be wrong... */
-       already_asked = g_hash_table_lookup_extended (priv->password_hash, 
+       already_asked = g_hash_table_lookup_extended (priv->password_hash,
                                                      key, NULL, (gpointer *) &pwd);
 
        /* if the password is not already there, try ModestConf */
                                                      key, NULL, (gpointer *) &pwd);
 
        /* if the password is not already there, try ModestConf */
@@ -245,8 +245,6 @@ get_password (TnyAccount *account, const gchar *prompt, gboolean *cancel)
                gboolean remember;
                pwd = NULL;
 
                gboolean remember;
                pwd = NULL;
 
-               gdk_threads_enter ();
-       
                g_signal_emit (G_OBJECT(self), signals[PASSWORD_REQUESTED_SIGNAL], 0,
                               name, &pwd, cancel, &remember);
 
                g_signal_emit (G_OBJECT(self), signals[PASSWORD_REQUESTED_SIGNAL], 0,
                               name, &pwd, cancel, &remember);
 
@@ -254,7 +252,7 @@ get_password (TnyAccount *account, const gchar *prompt, gboolean *cancel)
                        if (remember)
                                modest_account_mgr_set_string (priv->account_mgr,
                                                               key, MODEST_ACCOUNT_PASSWORD,
                        if (remember)
                                modest_account_mgr_set_string (priv->account_mgr,
                                                               key, MODEST_ACCOUNT_PASSWORD,
-                                                              pwd, 
+                                                              pwd,
                                                               TRUE, NULL);
                        /* We need to dup the string even knowing that
                           it's already a dup of the contents of an
                                                               TRUE, NULL);
                        /* We need to dup the string even knowing that
                           it's already a dup of the contents of an
@@ -266,10 +264,11 @@ get_password (TnyAccount *account, const gchar *prompt, gboolean *cancel)
                        g_free (pwd);
                        pwd = NULL;
                }
                        g_free (pwd);
                        pwd = NULL;
                }
-               gdk_threads_leave ();
        } else
                *cancel = FALSE;
 
        } else
                *cancel = FALSE;
 
+       gdk_threads_leave ();
+
        return pwd;
 }
 
        return pwd;
 }
 
@@ -302,8 +301,6 @@ forget_password (TnyAccount *account) {
                                  TRUE, NULL);
 }
 
                                  TRUE, NULL);
 }
 
-
-
 /* create a tnyaccount for the server account connected to the account with name 'key'
  */
 static TnyAccount*
 /* create a tnyaccount for the server account connected to the account with name 'key'
  */
 static TnyAccount*
@@ -496,7 +493,7 @@ modest_tny_account_store_new (ModestAccountMgr *account_mgr) {
                g_object_unref (obj);
                return NULL;
        }
                g_object_unref (obj);
                return NULL;
        }
-       tny_device_force_online (priv->device);
+/*     tny_device_force_online (priv->device); */
        
        priv->tny_session_camel = tny_session_camel_new (TNY_ACCOUNT_STORE(obj));
 
        
        priv->tny_session_camel = tny_session_camel_new (TNY_ACCOUNT_STORE(obj));
 
index 3512312..1e3ae1e 100644 (file)
 /* modest-tny-platform-factory.c */
 #include <config.h>
 
 /* modest-tny-platform-factory.c */
 #include <config.h>
 
+#include <tny-camel-header.h>
+#include <tny-camel-mime-part.h>
+#include <tny-camel-msg.h>
+
 /* MODES_PLATFORM_ID: 1 ==> gtk, 2==> maemo */
 #if MODEST_PLATFORM_ID==1   
 #include <tny-gnome-device.h>
 /* MODES_PLATFORM_ID: 1 ==> gtk, 2==> maemo */
 #if MODEST_PLATFORM_ID==1   
 #include <tny-gnome-device.h>
diff --git a/src/modest-ui.c b/src/modest-ui.c
new file mode 100644 (file)
index 0000000..ab6e035
--- /dev/null
@@ -0,0 +1,1226 @@
+/* Copyright (c) 2006, Nokia Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Nokia Corporation nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <glib/gi18n.h>
+#include <string.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /*HAVE_CONFIG_H*/
+
+#include <glib/gi18n.h>
+#include <gtk/gtkuimanager.h>
+#include <tny-error.h>
+#include <tny-simple-list.h>
+#include "modest-ui.h"
+#include "modest-tny-account-store.h"
+#include "modest-account-mgr.h"
+#include "modest-widget-factory.h"
+#include "modest-tny-platform-factory.h"
+
+#include "modest-edit-msg-window.h"
+#include "modest-account-view-window.h"
+#include "modest-icon-names.h"
+#include "modest-main-window.h"
+
+typedef struct _ModestUIPrivate ModestUIPrivate;
+struct _ModestUIPrivate {
+       ModestWidgetFactory  *widget_factory;   
+       TnyAccountStore      *account_store;
+       GtkWidget            *main_window;
+};
+
+#define MODEST_UI_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
+                                       MODEST_TYPE_UI, \
+                                       ModestUIPrivate))
+
+typedef struct _GetMsgAsyncHelper {
+       ModestUIPrivate *priv;
+       TnyIterator *iter;
+       GFunc func;
+       gpointer user_data;
+} GetMsgAsyncHelper;
+
+typedef enum _ReplyForwardAction {
+       ACTION_REPLY,
+       ACTION_REPLY_TO_ALL,
+       ACTION_FORWARD
+} ReplyForwardAction;
+
+typedef struct _ReplyForwardHelper {
+       guint reply_forward_type;
+       ReplyForwardAction action;
+       gchar *from;
+} ReplyForwardHelper;
+
+/* globals */
+static GObjectClass *parent_class = NULL;
+
+/* 'private'/'protected' functions */
+static void   modest_ui_class_init     (ModestUIClass *klass);
+static void   modest_ui_init           (ModestUI *obj);
+static void   modest_ui_finalize       (GObject *obj);
+
+static void   register_stock_icons        ();
+static void   connect_signals             (ModestUI *self);
+static void   connect_main_window_signals (ModestUI *self);
+static GtkUIManager *create_ui_manager ();
+
+static void   reply_forward_func (gpointer data, gpointer user_data);
+static void   read_msg_func      (gpointer data, gpointer user_data);
+static void   get_msg_cb         (TnyFolder *folder, 
+                                 TnyMsg *msg, 
+                                 GError **err, 
+                                 gpointer user_data);
+
+static void   reply_forward      (GtkWidget *widget,
+                                 ReplyForwardAction action,
+                                 ModestUIPrivate *priv);
+
+/* Menu & toolbar actions */
+static void     modest_ui_actions_on_about         (GtkWidget *widget, ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_delete        (GtkWidget *widget, ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_quit          (GtkWidget *widget, ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_accounts      (GtkWidget *widget, ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_new_msg       (GtkWidget *widget, ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_reply         (GtkWidget *widget, ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_forward       (GtkWidget *widget, ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_reply_all     (GtkWidget *widget, ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_next          (GtkWidget *widget, ModestUIPrivate *priv);
+
+/* Widget actions */
+static void     modest_ui_actions_on_header_selected          (ModestHeaderView *folder_view, 
+                                                              TnyHeader *header,
+                                                              ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
+                                                              TnyFolder *folder, 
+                                                              gboolean selected,
+                                                              ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_password_requested       (ModestTnyAccountStore *account_store, 
+                                                              const gchar* account_name,
+                                                              gchar **password, 
+                                                              gboolean *cancel, 
+                                                              gboolean *remember, 
+                                                              ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_connection_changed       (TnyDevice *device, 
+                                                              gboolean online,
+                                                              ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_online_toggle_toggled    (GtkToggleButton *toggle,
+                                                              ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_item_not_found           (ModestHeaderView *header_view,
+                                                              ModestItemType type,
+                                                              ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_header_status_update     (ModestHeaderView *header_view, 
+                                                              const gchar *msg,
+                                                              gint num, 
+                                                              gint total, 
+                                                              ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_msg_link_hover           (ModestMsgView *msgview, 
+                                                              const gchar* link,
+                                                              ModestUIPrivate *priv);
+
+
+static void     modest_ui_actions_on_msg_link_clicked         (ModestMsgView *msgview, 
+                                                              const gchar* link,
+                                                              ModestUIPrivate *priv);
+
+static void     modest_ui_actions_on_msg_attachment_clicked   (ModestMsgView *msgview, 
+                                                              int index,
+                                                              ModestUIPrivate *priv);
+
+
+/* Action entries */
+static const GtkActionEntry modest_action_entries [] = {
+
+       /* Toplevel */
+       { "File", NULL, N_("_File") },
+       { "Edit", NULL, N_("_Edit") },
+       { "Actions", NULL, N_("_Actions") },
+       { "Options", NULL, N_("_Options") },
+       { "Help", NULL, N_("_Help") },
+
+       /* FILE menu */
+       { "FileNew",    GTK_STOCK_NEW,     N_("_New"),     "<CTRL>N", N_("Compose new message"),  G_CALLBACK (modest_ui_actions_on_new_msg) },
+       { "FileOpen",   GTK_STOCK_OPEN,    N_("_Open"),    "<CTRL>O", N_("Open a message"),       NULL },
+       { "FileSave",   GTK_STOCK_SAVE,    N_("_Save"),    "<CTRL>S", N_("Save a message"),       NULL },
+       { "FileSaveAs", GTK_STOCK_SAVE_AS, N_("Save _As"), NULL,      N_("Save a message as"),    NULL },
+       { "FileQuit",   GTK_STOCK_QUIT,    N_("_Quit"),    "<CTRL>Q", N_("Exit the application"), G_CALLBACK (modest_ui_actions_on_quit) },
+
+       /* EDIT menu */
+       { "EditUndo",        GTK_STOCK_UNDO,   N_("_Undo"), "<CTRL>Z",        N_("Undo last action"),  NULL },
+       { "EditRedo",        GTK_STOCK_REDO,   N_("_Redo"), "<shift><CTRL>Z", N_("Redo previous action"),  NULL },
+       { "EditCut",         GTK_STOCK_CUT,    N_("Cut"),   "<CTRL>X",        N_("_Cut"), NULL   },
+       { "EditCopy",        GTK_STOCK_COPY,   N_("Copy"),  "<CTRL>C",        N_("Copy"), NULL },
+       { "EditPaste",       GTK_STOCK_PASTE,  N_("Paste"), "<CTRL>V",        N_("Paste"), NULL },
+       { "EditDelete",      GTK_STOCK_DELETE, N_("_Delete"),      "<CTRL>Q",         N_("Delete"), NULL },
+       { "EditSelectAll",   NULL,             N_("Select all"),   "<CTRL>A",         N_("Select all"), NULL },
+       { "EditDeselectAll", NULL,             N_("Deselect all"), "<Shift><CTRL>A",  N_("Deselect all"), NULL },
+
+       /* ACTIONS menu */
+       { "ActionsNew",         MODEST_STOCK_MAIL_SEND, N_("_New Message"),   NULL, N_("Compose a new message"), G_CALLBACK (modest_ui_actions_on_new_msg) },
+       { "ActionsReply",       MODEST_STOCK_REPLY, N_("_Reply"),         NULL, N_("Reply to a message"), G_CALLBACK (modest_ui_actions_on_reply) },
+       { "ActionsReplyAll",    MODEST_STOCK_REPLY_ALL, N_("Reply to all"),   NULL, N_("Reply to all"), G_CALLBACK (modest_ui_actions_on_reply_all) },
+       { "ActionsForward",     MODEST_STOCK_FORWARD, N_("_Forward"),       NULL, N_("Forward a message"), G_CALLBACK (modest_ui_actions_on_forward) },
+       { "ActionsBounce",      NULL, N_("_Bounce"),        NULL, N_("Bounce a message"),          NULL },
+       { "ActionsSendReceive", MODEST_STOCK_SEND_RECEIVE, N_("Send/Receive"),   NULL, N_("Send and receive messages"), NULL },
+       { "ActionsDelete",      MODEST_STOCK_DELETE, N_("Delete message"), NULL, N_("Delete messages"), G_CALLBACK (modest_ui_actions_on_delete) },
+
+       /* GOTO menu */
+       { "GotoPrevious", MODEST_STOCK_PREV, N_("Previous"), NULL, N_("Go to previous message"), NULL },
+       { "GotoNext",     MODEST_STOCK_NEXT, N_("Next"),     NULL, N_("Go to next message"), G_CALLBACK (modest_ui_actions_on_next) },
+
+       /* OPTIONS menu */
+       { "OptionsAccounts",  NULL, N_("_Accounts"), NULL, N_("Manage accounts"), G_CALLBACK (modest_ui_actions_on_accounts) },
+       { "OptionsContacts",  NULL, N_("_Contacts"), NULL, N_("Manage contacts"), NULL },
+       
+       /* HELP menu */
+       { "HelpAbout", GTK_STOCK_ABOUT, N_("About"), NULL, N_("About Modest"), G_CALLBACK (modest_ui_actions_on_about) },
+};
+
+GType
+modest_ui_get_type (void)
+{
+       static GType my_type = 0;
+       if (!my_type) {
+               static const GTypeInfo my_info = {
+                       sizeof(ModestUIClass),
+                       NULL,           /* base init */
+                       NULL,           /* base finalize */
+                       (GClassInitFunc) modest_ui_class_init,
+                       NULL,           /* class finalize */
+                       NULL,           /* class data */
+                       sizeof(ModestUI),
+                       1,              /* n_preallocs */
+                       (GInstanceInitFunc) modest_ui_init,
+                       NULL
+               };
+               my_type = g_type_register_static (G_TYPE_OBJECT,
+                                                 "ModestUI",
+                                                 &my_info, 0);
+       }
+       return my_type;
+}
+
+
+static void
+modest_ui_class_init (ModestUIClass *klass)
+{
+       GObjectClass *gobject_class;
+       gobject_class = (GObjectClass*) klass;
+
+       parent_class            = g_type_class_peek_parent (klass);
+       gobject_class->finalize = modest_ui_finalize;
+
+       g_type_class_add_private (gobject_class, sizeof(ModestUIPrivate));
+
+}
+
+
+static void
+modest_ui_init (ModestUI *obj)
+{
+       ModestUIPrivate *priv;
+
+       priv = MODEST_UI_GET_PRIVATE(obj);
+
+       priv->widget_factory = NULL;
+       priv->main_window    = NULL;
+       priv->account_store  = NULL;
+}
+
+
+static void
+modest_ui_finalize (GObject *obj)
+{
+       
+       ModestUIPrivate *priv = MODEST_UI_GET_PRIVATE(obj);
+       
+       if (priv->widget_factory) {
+               g_object_unref (G_OBJECT(priv->widget_factory));
+               priv->widget_factory = NULL;
+       }
+       
+       G_OBJECT_CLASS(parent_class)->finalize (obj);
+}
+
+
+ModestUI*
+modest_ui_new (TnyAccountStore *account_store)
+{
+       GObject *obj;
+       ModestUIPrivate *priv;
+       TnyPlatformFactory *fact;
+       ModestAccountMgr *account_mgr;
+
+       obj  = g_object_new(MODEST_TYPE_UI, NULL);
+       priv = MODEST_UI_GET_PRIVATE(obj);
+
+       /* Get the platform-dependent instances */
+       fact = modest_tny_platform_factory_get_instance ();
+       
+       priv->account_store = account_store;
+
+       account_mgr = modest_tny_platform_factory_get_modest_account_mgr_instance (fact);
+       if (!account_mgr) {
+               g_printerr ("modest: could not create ModestAccountMgr instance\n");
+               g_object_unref (obj);
+               return NULL;
+        }
+
+       priv->widget_factory = modest_widget_factory_new ();
+       if (!priv->widget_factory) {
+               g_printerr ("modest: could not initialize widget factory\n");
+               return NULL;
+       }
+
+       /* Connect signals */
+       connect_signals (MODEST_UI (obj));
+               
+       return MODEST_UI(obj);
+}
+
+static gboolean
+on_main_window_destroy (GtkObject *widget, ModestUI *self)
+{
+       /* FIXME: check if there any viewer/editing windows opened */
+       gtk_main_quit ();
+       return FALSE;
+}
+
+
+GtkWidget*
+modest_ui_main_window (ModestUI *self)
+{
+       ModestUIPrivate *priv;
+       GtkUIManager *ui_manager;
+
+       g_return_val_if_fail (self, NULL);
+       priv = MODEST_UI_GET_PRIVATE(self);
+
+       if (!priv->main_window) {
+               TnyDevice *device;
+
+               /* Register our own icons as stock icons in order to
+                  use them with the UI manager */
+               register_stock_icons ();
+
+               /* Create UI manager */ 
+               ui_manager = create_ui_manager (self);
+
+               /* Create main window */
+               priv->main_window = modest_main_window_new (priv->widget_factory, ui_manager);
+               g_signal_connect (G_OBJECT(priv->main_window), "destroy",
+                                 G_CALLBACK(on_main_window_destroy), self);
+
+               /* Connect Main Window signals */
+               connect_main_window_signals (self);
+
+               g_object_unref (G_OBJECT (ui_manager));
+       }
+               
+       if (!priv->main_window)
+               g_printerr ("modest: could not create main window\n");
+       
+       return priv->main_window;
+}
+
+static GtkUIManager *
+create_ui_manager (ModestUI *self)
+{
+       GtkUIManager *ui_manager;
+       GtkActionGroup *action_group;
+       GError *error = NULL;
+       ModestUIPrivate *priv;
+
+       priv = MODEST_UI_GET_PRIVATE(self);
+
+       /* Create UI manager */
+       ui_manager = gtk_ui_manager_new();
+
+       /* Create action group */
+       action_group = gtk_action_group_new ("ModestMainWindowActions");
+       gtk_action_group_add_actions (action_group,
+                                     modest_action_entries,
+                                     G_N_ELEMENTS (modest_action_entries),
+                                     priv);
+       gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
+       g_object_unref (action_group);
+
+       /* Load the UI definition */
+       gtk_ui_manager_add_ui_from_file (ui_manager, MODEST_UIDIR "modest-ui.xml", &error);
+       if (error != NULL) {
+               g_warning ("Could not merge modest-ui.xml: %s", error->message);
+               g_error_free (error);
+       }
+       return ui_manager;
+}
+
+/* 
+ *  This function registers our custom toolbar icons, so they can be
+ *  themed. The idea of this function was taken from the gtk-demo
+ */
+static void
+register_stock_icons ()
+{
+       static gboolean registered = FALSE;
+  
+       if (!registered) {
+               GdkPixbuf *pixbuf;
+               GtkIconFactory *factory;
+               gchar *filename;
+               gint i;
+
+               static GtkStockItem items[] = {
+                       { MODEST_STOCK_MAIL_SEND, "send mail", 0, 0, NULL },
+                       { MODEST_STOCK_NEW_MAIL, "new mail", 0, 0, NULL },
+                       { MODEST_STOCK_SEND_RECEIVE, "send receive", 0, 0, NULL },
+                       { MODEST_STOCK_REPLY, "reply", 0, 0, NULL },
+                       { MODEST_STOCK_REPLY_ALL, "reply all", 0, 0, NULL },
+                       { MODEST_STOCK_FORWARD, "forward", 0, 0, NULL },
+                       { MODEST_STOCK_DELETE, "delete", 0, 0, NULL },
+                       { MODEST_STOCK_NEXT, "next", 0, 0, NULL },
+                       { MODEST_STOCK_PREV, "prev", 0, 0, NULL },
+                       { MODEST_STOCK_STOP, "stop", 0, 0, NULL }
+               };
+      
+               static gchar *items_names [] = {
+                       MODEST_TOOLBAR_ICON_MAIL_SEND,
+                       MODEST_TOOLBAR_ICON_NEW_MAIL,           
+                       MODEST_TOOLBAR_ICON_SEND_RECEIVE,
+                       MODEST_TOOLBAR_ICON_REPLY,      
+                       MODEST_TOOLBAR_ICON_REPLY_ALL,
+                       MODEST_TOOLBAR_ICON_FORWARD,
+                       MODEST_TOOLBAR_ICON_DELETE,
+                       MODEST_TOOLBAR_ICON_NEXT,
+                       MODEST_TOOLBAR_ICON_PREV,
+                       MODEST_TOOLBAR_ICON_STOP
+               };
+
+               registered = TRUE;
+
+               /* Register our stock items */
+               gtk_stock_add (items, G_N_ELEMENTS (items));
+      
+               /* Add our custom icon factory to the list of defaults */
+               factory = gtk_icon_factory_new ();
+               gtk_icon_factory_add_default (factory);
+
+               /* Register icons to accompany stock items */
+               for (i = 0; i < G_N_ELEMENTS (items); i++) {
+                       pixbuf = NULL;
+                       pixbuf = gdk_pixbuf_new_from_file (items_names[i], NULL);
+
+                       if (pixbuf != NULL) {
+                               GtkIconSet *icon_set;
+                               GdkPixbuf *transparent;
+
+                               transparent = gdk_pixbuf_add_alpha (pixbuf, TRUE, 0xff, 0xff, 0xff);
+
+                               icon_set = gtk_icon_set_new_from_pixbuf (transparent);
+                               gtk_icon_factory_add (factory, items[i].stock_id, icon_set);
+                               gtk_icon_set_unref (icon_set);
+                               g_object_unref (pixbuf);
+                               g_object_unref (transparent);
+                       }
+                       else
+                               g_warning ("failed to load %s icon", items_names[i]);
+               }
+               /* Drop our reference to the factory, GTK will hold a reference. */
+               g_object_unref (factory);
+       }
+}
+
+/* FIXME: uninit these as well */
+static void
+connect_signals (ModestUI *self)
+{
+       TnyDevice *device;
+       ModestUIPrivate *priv;
+       ModestFolderView *folder_view;
+       ModestHeaderView *header_view;
+       ModestMsgView *msg_view;
+       GtkWidget *toggle;
+       
+       priv = MODEST_UI_GET_PRIVATE(self);
+
+       folder_view = modest_widget_factory_get_folder_view (priv->widget_factory);
+       header_view = modest_widget_factory_get_header_view (priv->widget_factory);
+       msg_view    = modest_widget_factory_get_msg_preview (priv->widget_factory);
+       toggle      = modest_widget_factory_get_online_toggle (priv->widget_factory);
+       device      = tny_account_store_get_device (priv->account_store);
+
+       /* folder view */
+       g_signal_connect (G_OBJECT(folder_view), "folder_selection_changed",
+                         G_CALLBACK(modest_ui_actions_on_folder_selection_changed),
+                         priv);
+/*     g_signal_connect (G_OBJECT(folder_view), "key-press-event", */
+/*                       G_CALLBACK(on_folder_key_press_event), priv->widget_factory); */
+
+       /* header view */
+       g_signal_connect (G_OBJECT(header_view), "status_update",
+                         G_CALLBACK(modest_ui_actions_on_header_status_update), 
+                         priv);
+       g_signal_connect (G_OBJECT(header_view), "header_selected",
+                         G_CALLBACK(modest_ui_actions_on_header_selected), 
+                         priv);
+       g_signal_connect (G_OBJECT(header_view), "item_not_found",
+                         G_CALLBACK(modest_ui_actions_on_item_not_found), 
+                         priv);
+
+       
+       /* msg preview */
+       g_signal_connect (G_OBJECT(msg_view), "link_clicked",
+                         G_CALLBACK(modest_ui_actions_on_msg_link_clicked), 
+                         priv);
+       g_signal_connect (G_OBJECT(msg_view), "link_hover",
+                         G_CALLBACK(modest_ui_actions_on_msg_link_hover), 
+                         priv);
+       g_signal_connect (G_OBJECT(msg_view), "attachment_clicked",
+                         G_CALLBACK(modest_ui_actions_on_msg_attachment_clicked), 
+                         priv);
+
+       /* Device */
+       g_signal_connect (G_OBJECT(device), "connection_changed",
+                         G_CALLBACK(modest_ui_actions_on_connection_changed), 
+                         priv);
+       g_signal_connect (G_OBJECT(toggle), "toggled",
+                         G_CALLBACK(modest_ui_actions_on_online_toggle_toggled),
+                         priv);
+               
+       /* Init toggle in correct state */
+       modest_ui_actions_on_connection_changed (device,
+                                                tny_device_is_online (device),
+                                                priv);
+}
+
+
+static void
+connect_main_window_signals (ModestUI *self)
+{
+       ModestUIPrivate *priv;
+       
+       priv = MODEST_UI_GET_PRIVATE(self);
+
+       /* account store */
+       g_signal_connect (G_OBJECT (priv->account_store), 
+                         "password_requested",
+                         G_CALLBACK(modest_ui_actions_on_password_requested),
+                         priv);
+}
+
+/* ***************************************************************** */
+/*                M O D E S T    U I    A C T I O N S                */
+/* ***************************************************************** */
+static void     
+modest_ui_actions_on_about (GtkWidget *widget, 
+                           ModestUIPrivate *priv)
+{
+       GtkWidget *about;
+       const gchar *authors[] = {
+               "Dirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>",
+               NULL
+       };      
+       about = gtk_about_dialog_new ();
+       gtk_about_dialog_set_name (GTK_ABOUT_DIALOG(about), PACKAGE_NAME);
+       gtk_about_dialog_set_version (GTK_ABOUT_DIALOG(about),PACKAGE_VERSION);
+       gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG(about),
+                                       _("Copyright (c) 2006, Nokia Corporation\n"
+                                         "All rights reserved."));
+       gtk_about_dialog_set_comments (GTK_ABOUT_DIALOG(about),
+                                      _("a modest e-mail client\n\n"
+                                        "design and implementation: Dirk-Jan C. Binnema\n"
+                                        "contributions from the fine people at KernelConcepts and Igalia\n"
+                                        "uses the tinymail email framework written by Philip van Hoof"));
+       gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(about), authors);
+       gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org");
+
+       gtk_dialog_run (GTK_DIALOG (about));
+       gtk_widget_destroy(about);
+}
+
+static void
+modest_ui_actions_on_delete (GtkWidget *widget, 
+                            ModestUIPrivate *priv)
+{
+       ModestWidgetFactory *widget_factory;
+       ModestHeaderView *header_view;
+       TnyList *header_list;
+       TnyIterator *iter;
+       GtkTreeModel *model;
+
+       header_view = modest_widget_factory_get_header_view (priv->widget_factory);
+       header_list = modest_header_view_get_selected_headers (header_view);
+       
+       if (header_list) {
+               iter = tny_list_create_iterator (header_list);
+               model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+               if (GTK_IS_TREE_MODEL_SORT (model))
+                       model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (model));
+               do {
+                       TnyHeader *header;
+                       ModestMailOperation *mail_op;
+
+                       header = TNY_HEADER (tny_iterator_get_current (iter));
+                       /* TODO: thick grain mail operation involving
+                          a list of objects. Composite pattern ??? */
+                       mail_op = modest_mail_operation_new ();
+
+                       /* TODO: add confirmation dialog */
+
+                       /* Move to trash */
+                       modest_mail_operation_remove_msg (mail_op, header, TRUE);
+
+                       /* Remove from tree model */
+                       if (modest_mail_operation_get_status (mail_op) == 
+                           MODEST_MAIL_OPERATION_STATUS_SUCCESS)
+                               tny_list_remove (TNY_LIST (model), G_OBJECT (header));
+                       else {
+                               /* TODO: error handling management */
+                               const GError *error;
+                               error = modest_mail_operation_get_error (mail_op);
+                               g_warning (error->message);
+                       }
+
+                       g_object_unref (G_OBJECT (mail_op));
+                       g_object_unref (header);
+                       tny_iterator_next (iter);
+
+               } while (!tny_iterator_is_done (iter));
+       }
+}
+
+static void
+modest_ui_actions_on_quit (GtkWidget *widget, 
+                          ModestUIPrivate *priv)
+{
+       /* FIXME: save size of main window */
+/*     save_sizes (main_window); */
+       gtk_widget_destroy (GTK_WIDGET (priv->main_window));
+}
+
+static void
+modest_ui_actions_on_accounts (GtkWidget *widget, 
+                              ModestUIPrivate *priv)
+{
+       GtkWidget *account_win;
+
+       account_win = modest_account_view_window_new (priv->widget_factory);
+
+       gtk_window_set_transient_for (GTK_WINDOW (account_win),
+                                     GTK_WINDOW (priv->main_window));
+                                     
+       gtk_widget_show (account_win);
+}
+
+static void
+modest_ui_actions_on_new_msg (GtkWidget *widget, 
+                             ModestUIPrivate *priv)
+{
+       GtkWidget *msg_win;
+
+       msg_win = modest_edit_msg_window_new (priv->widget_factory,
+                                             MODEST_EDIT_TYPE_NEW);
+       gtk_widget_show (msg_win);
+}
+
+static void
+reply_forward_func (gpointer data, gpointer user_data)
+{
+       TnyHeader *new_header;
+       TnyMsg *msg, *new_msg;
+       GetMsgAsyncHelper *helper;
+       ReplyForwardHelper *rf_helper;
+       GtkWidget *msg_win;
+       ModestEditType edit_type;
+
+       msg = TNY_MSG (data);
+       helper = (GetMsgAsyncHelper *) user_data;
+       rf_helper = (ReplyForwardHelper *) helper->user_data;
+
+       /* Create reply mail */
+       switch (rf_helper->action) {
+       case ACTION_REPLY:
+               new_msg = 
+                       modest_mail_operation_create_reply_mail (msg, 
+                                                                rf_helper->from, 
+                                                                rf_helper->reply_forward_type,
+                                                                MODEST_MAIL_OPERATION_REPLY_MODE_SENDER);
+       case ACTION_REPLY_TO_ALL:
+               new_msg = 
+                       modest_mail_operation_create_reply_mail (msg, rf_helper->from, rf_helper->reply_forward_type,
+                                                                MODEST_MAIL_OPERATION_REPLY_MODE_ALL);
+               edit_type = MODEST_EDIT_TYPE_REPLY;
+               break;
+       case ACTION_FORWARD:
+               new_msg = 
+                       modest_mail_operation_create_forward_mail (msg, rf_helper->from, rf_helper->reply_forward_type);
+               edit_type = MODEST_EDIT_TYPE_FORWARD;
+               break;
+       }
+
+       /* Set from */
+       new_header = tny_msg_get_header (new_msg);
+       tny_header_set_from (new_header, rf_helper->from);
+       g_object_unref (G_OBJECT (new_header));
+               
+       /* Show edit window */
+       msg_win = modest_edit_msg_window_new (helper->priv->widget_factory,
+                                             edit_type);
+       modest_edit_msg_window_set_msg (MODEST_EDIT_MSG_WINDOW (msg_win),
+                                       new_msg);
+       gtk_widget_show (msg_win);
+       
+       /* Clean */
+       g_object_unref (new_msg);
+       g_free (rf_helper->from);
+       g_slice_free (ReplyForwardHelper, rf_helper);
+}
+
+/*
+ * Common code for the reply and forward actions
+ */
+static void
+reply_forward (GtkWidget *widget,
+              ReplyForwardAction action,
+              ModestUIPrivate *priv)
+{
+       ModestHeaderView *header_view;
+       TnyList *header_list;
+       guint reply_forward_type;
+       ModestConf *conf;
+       TnyPlatformFactory *plat_factory;
+       TnyHeader *header;
+       TnyFolder *folder;
+       gchar *from, *key;
+       ModestFolderView *folder_view;
+       GetMsgAsyncHelper *helper;
+       ReplyForwardHelper *rf_helper;
+
+       /* Get ModestConf */
+       plat_factory = modest_tny_platform_factory_get_instance ();
+       conf = modest_tny_platform_factory_get_modest_conf_instance (plat_factory);
+
+       /* Get reply or forward type */
+       key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, 
+                              (action == ACTION_FORWARD) ? MODEST_CONF_FORWARD_TYPE : MODEST_CONF_REPLY_TYPE);
+       reply_forward_type = modest_conf_get_int (conf, key, NULL);
+       g_free (key);
+
+       /* Get the list of headers */
+       header_view = modest_widget_factory_get_header_view (priv->widget_factory);
+       header_list = modest_header_view_get_selected_headers (header_view);
+
+       if (!header_list)
+               return;
+
+       /* We assume that we can only select messages of the
+          same folder and that we reply all of them from the
+          same account. In fact the interface currently only
+          allows single selection */
+
+       /* TODO: get the from string from account */
+       from = g_strdup ("Invalid");
+       
+       /* Fill helpers */
+       rf_helper = g_slice_new0 (ReplyForwardHelper);
+       rf_helper->reply_forward_type = reply_forward_type;
+       rf_helper->action = action;
+       rf_helper->from = from;
+       
+       helper = g_slice_new0 (GetMsgAsyncHelper);
+       helper->priv = priv;
+       helper->func = reply_forward_func;
+       helper->iter = tny_list_create_iterator (header_list);
+       helper->user_data = rf_helper;
+       
+       header = TNY_HEADER (tny_iterator_get_current (helper->iter));
+       folder = tny_header_get_folder (header);
+       
+       /* The callback will call it per each header */
+       tny_folder_get_msg_async (folder, header, get_msg_cb, helper);
+       
+       /* Clean */
+       g_object_unref (G_OBJECT (folder));
+}
+
+static void
+modest_ui_actions_on_reply (GtkWidget *widget,
+                           ModestUIPrivate *priv)
+{
+       reply_forward (widget, ACTION_REPLY, priv);
+}
+
+static void
+modest_ui_actions_on_forward (GtkWidget *widget,
+                             ModestUIPrivate *priv)
+{
+       reply_forward (widget, ACTION_FORWARD, priv);
+}
+
+static void
+modest_ui_actions_on_reply_all (GtkWidget *widget,
+                               ModestUIPrivate *priv)
+{
+       reply_forward (widget, ACTION_REPLY_TO_ALL, priv);
+}
+
+static void 
+modest_ui_actions_on_next (GtkWidget *widget, 
+                          ModestUIPrivate *priv)
+{
+       ModestHeaderView *header_view;
+
+       header_view = modest_widget_factory_get_header_view (priv->widget_factory);
+       modest_header_view_select_next (header_view);
+}
+
+/*
+ * Marks a message as read and passes it to the msg preview widget
+ */
+static void
+read_msg_func (gpointer data, gpointer user_data)
+{
+       ModestMsgView *msg_view;
+       TnyMsg *msg;
+       TnyHeader *header;
+       GetMsgAsyncHelper *helper;
+       TnyHeaderFlags header_flags;
+
+       msg = TNY_MSG (data);
+       helper = (GetMsgAsyncHelper *) user_data;
+
+       /* mark message as seen; _set_flags crashes, bug in tinymail? */
+       header = TNY_HEADER (tny_iterator_get_current (helper->iter));
+       header_flags = tny_header_get_flags (header);
+       tny_header_set_flags (header, header_flags | TNY_HEADER_FLAG_SEEN);
+       g_object_unref (G_OBJECT (header));
+
+       /* Set message on msg view */
+       msg_view = modest_widget_factory_get_msg_preview (helper->priv->widget_factory);
+       modest_msg_view_set_message (msg_view, msg);
+}
+
+/*
+ * This function is a generic handler for the tny_folder_get_msg_async
+ * call. It expects as user_data a #GetMsgAsyncHelper. This helper
+ * contains a user provided function that is called inside this
+ * method. This will allow us to use this callback in many different
+ * places. This callback performs the common actions for the
+ * get_msg_async call, more specific actions will be done by the user
+ * function
+ */
+static void
+get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data)
+{
+       GetMsgAsyncHelper *helper;
+
+       helper = (GetMsgAsyncHelper *) user_data;
+
+       if (*err && ((*err)->code == TNY_FOLDER_ERROR_GET_MSG)) {
+               ModestHeaderView *header_view;
+
+               header_view = modest_widget_factory_get_header_view (helper->priv->widget_factory);
+               modest_ui_actions_on_item_not_found (header_view, MODEST_ITEM_TYPE_MESSAGE, helper->priv);
+               return;
+       }
+
+       if (!msg)
+               return;
+
+       /* Call user function */
+       helper->func (msg, user_data);
+
+       /* Process next element (if exists) */
+       tny_iterator_next (helper->iter);
+       if (tny_iterator_is_done (helper->iter)) {
+               TnyList *headers;
+               headers = tny_iterator_get_list (helper->iter);
+               /* Free resources */
+               g_object_unref (G_OBJECT (headers));
+               g_object_unref (G_OBJECT (helper->iter));
+               g_slice_free (GetMsgAsyncHelper, helper);
+       } else
+               tny_folder_get_msg_async (folder, 
+                                         TNY_HEADER (tny_iterator_get_current (helper->iter)), 
+                                         get_msg_cb, helper);
+}
+
+static void 
+modest_ui_actions_on_header_selected (ModestHeaderView *folder_view, 
+                                     TnyHeader *header,
+                                     ModestUIPrivate *priv)
+{
+       TnyFolder *folder;
+       GetMsgAsyncHelper *helper;
+       TnyList *list;
+       TnyIterator *iter;
+
+       if (!header)
+               return;
+
+       folder = tny_header_get_folder (TNY_HEADER(header));
+
+       /* Create list */
+       list = tny_simple_list_new ();
+       tny_list_prepend (list, G_OBJECT (header));
+
+       /* Fill helper data */
+       helper = g_slice_new0 (GetMsgAsyncHelper);
+       helper->priv = priv;
+       helper->iter = tny_list_create_iterator (list);
+       helper->func = read_msg_func;
+
+       tny_folder_get_msg_async (TNY_FOLDER(folder),
+                                 header,
+                                 get_msg_cb,
+                                 helper);
+
+       /* Frees */
+       g_object_unref (G_OBJECT (folder));
+}
+
+static void 
+modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
+                                              TnyFolder *folder, 
+                                              gboolean selected,
+                                              ModestUIPrivate *priv)
+{
+       GtkLabel *folder_info_label;
+       TnyPlatformFactory *factory;
+       gchar *txt;     
+       ModestConf *conf;
+       ModestHeaderView *header_view;
+
+       folder_info_label = 
+               GTK_LABEL (modest_widget_factory_get_folder_info_label (priv->widget_factory));
+
+       if (!folder) {
+               gtk_label_set_label (GTK_LABEL(folder_info_label), "");
+               return;
+       }
+
+       factory = modest_tny_platform_factory_get_instance ();
+       header_view = modest_widget_factory_get_header_view (priv->widget_factory);
+       conf = modest_tny_platform_factory_get_modest_conf_instance (factory);
+
+       if (!selected) { /* the folder was unselected; save it's settings  */
+               modest_widget_memory_save (conf, G_OBJECT (header_view),
+                                          "header-view");
+       } else {  /* the folder was selected */
+               guint num, unread;
+               num    = tny_folder_get_all_count    (folder);
+               unread = tny_folder_get_unread_count (folder);
+                       
+               txt = g_strdup_printf (_("%d %s, %d unread"),
+                                      num, num==1 ? _("item") : _("items"), unread);           
+               gtk_label_set_label (GTK_LABEL(folder_info_label), txt);
+               g_free (txt);
+                       
+               modest_header_view_set_folder (header_view, folder);
+               modest_widget_memory_restore (conf, G_OBJECT(header_view),
+                                             "header-view");
+       }
+}
+
+static void
+modest_ui_actions_on_password_requested (ModestTnyAccountStore *account_store, 
+                                        const gchar* account_name,
+                                        gchar **password, 
+                                        gboolean *cancel, 
+                                        gboolean *remember, 
+                                        ModestUIPrivate *priv)
+{
+       gchar *txt;
+       GtkWidget *dialog, *entry, *remember_pass_check;
+
+       dialog = gtk_dialog_new_with_buttons (_("Password requested"),
+                                             GTK_WINDOW (priv->main_window),
+                                             GTK_DIALOG_MODAL,
+                                             GTK_STOCK_CANCEL,
+                                             GTK_RESPONSE_REJECT,
+                                             GTK_STOCK_OK,
+                                             GTK_RESPONSE_ACCEPT,
+                                             NULL);
+
+       txt = g_strdup_printf (_("Please enter your password for %s"), account_name);
+       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), gtk_label_new(txt),
+                           FALSE, FALSE, 0);
+       g_free (txt);
+
+       entry = gtk_entry_new_with_max_length (40);
+       gtk_entry_set_visibility (GTK_ENTRY(entry), FALSE);
+       gtk_entry_set_invisible_char (GTK_ENTRY(entry), 0x2022); /* bullet unichar */
+       
+       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry,
+                           TRUE, FALSE, 0);    
+
+       remember_pass_check = gtk_check_button_new_with_label (_("Remember password"));
+       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), remember_pass_check,
+                           TRUE, FALSE, 0);
+
+       gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
+       
+       if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+               *password = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry)));
+               *cancel   = FALSE;
+       } else {
+               *password = NULL;
+               *cancel   = TRUE;
+       }
+
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (remember_pass_check)))
+               *remember = TRUE;
+       else
+               *remember = FALSE;
+
+       gtk_widget_destroy (dialog);
+
+       while (gtk_events_pending ())
+               gtk_main_iteration ();
+}
+
+/****************************************************/
+/*
+ * below some stuff to clearup statusbar messages after 1,5 seconds....
+ */
+typedef struct {
+       GtkWidget *status_bar;
+       GtkWidget *progress_bar;
+       guint     msg_id;
+} StatusRemoveData;
+
+static gboolean
+on_statusbar_remove_msg (StatusRemoveData *data)
+{
+       /* we need to test types, as this callback maybe called after the
+        * widgets have been destroyed
+        */
+       if (GTK_IS_STATUSBAR(data->status_bar)) 
+               gtk_statusbar_remove (GTK_STATUSBAR(data->status_bar),
+                                     0, data->msg_id);
+       if (GTK_IS_PROGRESS_BAR(data->progress_bar))
+               gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(data->progress_bar),
+                                              1.0);
+       g_free (data);
+       return FALSE;
+}
+
+static void
+statusbar_push (ModestWidgetFactory *factory, guint context_id, const gchar *msg)
+{
+       guint id;
+       StatusRemoveData *data;
+       GtkWidget *status_bar, *progress_bar;
+       
+       if (!msg)
+               return;
+
+       progress_bar = modest_widget_factory_get_progress_bar (factory);
+       status_bar   = modest_widget_factory_get_status_bar (factory);
+       
+       id = gtk_statusbar_push (GTK_STATUSBAR(status_bar), 0, msg);
+
+       data = g_new (StatusRemoveData, 1);
+       data->status_bar   = status_bar;
+       data->progress_bar = progress_bar;
+       data->msg_id     = id;
+
+       g_timeout_add (1500, (GSourceFunc)on_statusbar_remove_msg, data);
+}
+/****************************************************************************/
+
+static void
+modest_ui_actions_on_connection_changed (TnyDevice *device, 
+                                        gboolean online,
+                                        ModestUIPrivate *priv)
+{
+       GtkWidget *online_toggle;
+       ModestHeaderView *header_view;
+
+       header_view   = modest_widget_factory_get_header_view (priv->widget_factory);
+       online_toggle = modest_widget_factory_get_online_toggle (priv->widget_factory);
+
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(online_toggle),
+                                     online);
+       gtk_button_set_label (GTK_BUTTON(online_toggle),
+                             online ? _("Online") : _("Offline"));
+
+       statusbar_push (priv->widget_factory, 0, 
+                       online ? _("Modest went online") : _("Modest went offline"));
+
+       /* If Modest has became online and the header view has a
+          header selected then show it */
+       if (online) {
+               GtkTreeSelection *selected;
+
+               selected = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view));
+               _modest_header_view_change_selection (selected, header_view);
+       }
+}
+
+static void
+modest_ui_actions_on_online_toggle_toggled (GtkToggleButton *toggle,
+                                           ModestUIPrivate *priv)
+{
+       gboolean online;
+       TnyDevice *device;
+
+       online  = gtk_toggle_button_get_active (toggle);
+       device = tny_account_store_get_device (priv->account_store);
+
+       if (online)
+               tny_device_force_online (device);
+       else
+               tny_device_force_offline (device);
+}
+
+static void 
+modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,
+                                    ModestItemType type,
+                                    ModestUIPrivate *priv)
+{
+       GtkWidget *dialog;
+       gchar *txt, *item;
+       gboolean online;
+       TnyDevice *device;
+
+       item = (type == MODEST_ITEM_TYPE_FOLDER) ? "folder" : "message";
+       device = tny_account_store_get_device (priv->account_store);
+       
+       gdk_threads_enter ();
+       online = tny_device_is_online (device);
+
+       if (online) {
+               /* already online -- the item is simply not there... */
+               dialog = gtk_message_dialog_new (GTK_WINDOW (priv->main_window),
+                                                GTK_DIALOG_MODAL,
+                                                GTK_MESSAGE_WARNING,
+                                                GTK_BUTTONS_OK,
+                                                _("The %s you selected cannot be found"),
+                                                item);
+               gtk_dialog_run (GTK_DIALOG(dialog));
+       } else {
+
+               dialog = gtk_dialog_new_with_buttons (_("Connection requested"),
+                                                     GTK_WINDOW (priv->main_window),
+                                                     GTK_DIALOG_MODAL,
+                                                     GTK_STOCK_CANCEL,
+                                                     GTK_RESPONSE_REJECT,
+                                                     GTK_STOCK_OK,
+                                                     GTK_RESPONSE_ACCEPT,
+                                                     NULL);
+
+               txt = g_strdup_printf (_("This %s is not available in offline mode.\n"
+                                        "Do you want to get online?"), item);
+               gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), 
+                                   gtk_label_new (txt), FALSE, FALSE, 0);
+               gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
+               g_free (txt);
+
+               gtk_window_set_default_size (GTK_WINDOW(dialog), 300, 300);
+               if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+                       tny_device_force_online (device);
+               }
+       }
+       gtk_widget_destroy (dialog);
+       gdk_threads_leave ();
+}
+
+static void
+modest_ui_actions_on_header_status_update (ModestHeaderView *header_view, const gchar *msg,
+                                          gint num, gint total, ModestUIPrivate *priv)
+{
+       GtkWidget *progress_bar;
+       
+       progress_bar = modest_widget_factory_get_progress_bar (priv->widget_factory);
+
+       if (total != 0)
+               gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(progress_bar),
+                                              (gdouble)num/(gdouble)total);
+       else
+               gtk_progress_bar_pulse (GTK_PROGRESS_BAR(progress_bar));
+
+       statusbar_push (priv->widget_factory, 0, msg);
+}
+
+
+static void
+modest_ui_actions_on_msg_link_hover (ModestMsgView *msgview, const gchar* link,
+                                    ModestUIPrivate *priv)
+{
+       
+       statusbar_push (priv->widget_factory, 0, link);
+
+       /* TODO: do something */
+}      
+
+
+static void
+modest_ui_actions_on_msg_link_clicked (ModestMsgView *msgview, const gchar* link,
+                                      ModestUIPrivate *priv)
+{
+       gchar *msg;
+       msg = g_strdup_printf (_("Opening %s..."), link);
+
+       statusbar_push (priv->widget_factory, 0, msg);
+       g_free (msg);
+
+       /* TODO: do something */
+}
+
+static void
+modest_ui_actions_on_msg_attachment_clicked (ModestMsgView *msgview, int index,
+                                            ModestUIPrivate *priv)
+{
+       gchar *msg;
+       
+       msg = g_strdup_printf (_("Opening attachment %d..."), index);
+       statusbar_push (priv->widget_factory, 0, msg);
+       
+       g_free (msg);
+
+       /* TODO: do something */
+}
index 57c811c..20a9b40 100644 (file)
@@ -31,9 +31,7 @@
 #define __MODEST_UI_H__
 
 #include <glib-object.h>
 #define __MODEST_UI_H__
 
 #include <glib-object.h>
-#include <gtk/gtkcontainer.h>
-#include "modest-conf.h"
-#include "widgets/modest-msg-view.h"
+#include <tny-account-store.h>
 
 G_BEGIN_DECLS
 
 
 G_BEGIN_DECLS
 
@@ -59,7 +57,6 @@ struct _ModestUIClass {
        /* void (* my_event) (ModestUI* obj); */
 };
 
        /* void (* my_event) (ModestUI* obj); */
 };
 
-
 /**
  * modest_ui_get_type:
  * 
 /**
  * modest_ui_get_type:
  * 
@@ -71,19 +68,26 @@ GType        modest_ui_get_type        (void) G_GNUC_CONST;
 
 /**
  * modest_ui_new:
 
 /**
  * modest_ui_new:
+ * @account_store: a #TnyAccountStore
  *  
  * Returns: a new ModestUI, or NULL in case of error
  */
  *  
  * Returns: a new ModestUI, or NULL in case of error
  */
-ModestUI*     modest_ui_new             (void);
+ModestUI*     modest_ui_new            (TnyAccountStore *account_store);
 
 
 /**
  * modest_ui_main_window:
  * @modest_ui: a ModestUI instance 
  *  
 
 
 /**
  * modest_ui_main_window:
  * @modest_ui: a ModestUI instance 
  *  
- * Returns: a new main window, or NULL in case of error
+ * Creates an new main window and returns it. If there is already a
+ * main window then the current one is returned and no new window is
+ * created
+ *
+ * Returns: a #ModestMainWindow, or NULL in case of error
  */
  */
-GtkWidget *modest_ui_main_window (ModestUI *modest_ui);
+GtkWidget*    modest_ui_main_window    (ModestUI *modest_ui);
+
+
 
 G_END_DECLS
 #endif /* __MODEST_UI_H__ */
 
 G_END_DECLS
 #endif /* __MODEST_UI_H__ */
index 92ed3ec..cf0c97c 100644 (file)
@@ -48,35 +48,6 @@ static void modest_widget_factory_init          (ModestWidgetFactory *obj);
 static void modest_widget_factory_finalize      (GObject *obj);
 
 
 static void modest_widget_factory_finalize      (GObject *obj);
 
 
-/* callbacks */
-static void on_folder_selection_changed         (ModestFolderView *folder_view,
-                                                TnyFolder *folder, gboolean selected,
-                                                ModestWidgetFactory *self);
-static void on_folder_key_press_event  (ModestFolderView *header_view, 
-                                       GdkEventKey *event, 
-                                       gpointer user_data);
-static void on_message_selected        (ModestHeaderView *header_view, TnyMsg *msg,
-                                       ModestWidgetFactory *self);
-static void on_header_status_update    (ModestHeaderView *header_view, const gchar *msg,
-                                       gint num, gint total, ModestWidgetFactory *self);
-static void on_msg_link_hover          (ModestMsgView *msgview, const gchar* link,
-                                       ModestWidgetFactory *self);
-static void on_msg_link_clicked        (ModestMsgView *msgview, const gchar* link,
-                                       ModestWidgetFactory *self);
-static void on_msg_attachment_clicked  (ModestMsgView *msgview, int index,
-                                       ModestWidgetFactory *self);
-
-static void on_connection_changed (TnyDevice *device, gboolean online,
-                                  ModestWidgetFactory *self);
-static void on_online_toggle_toggled (GtkToggleButton *toggle, ModestWidgetFactory *factory);
-
-static void on_password_requested (ModestTnyAccountStore *account_store, const gchar* account_name,
-                                  gchar **password, gboolean *cancel, gboolean *remember, ModestWidgetFactory *self);
-
-static void on_item_not_found     (ModestHeaderView* header_view, ModestItemType type,
-                                  ModestWidgetFactory *self);
-
-
 /* list my signals */
 enum {
        /* MY_SIGNAL_1, */
 /* list my signals */
 enum {
        /* MY_SIGNAL_1, */
@@ -94,7 +65,6 @@ struct _ModestWidgetFactoryPrivate {
        ModestHeaderView            *header_view;
        ModestFolderView            *folder_view;
        ModestMsgView               *msg_preview;
        ModestHeaderView            *header_view;
        ModestFolderView            *folder_view;
        ModestMsgView               *msg_preview;
-       ModestToolbar               *main_toolbar, *edit_toolbar;
 
        GtkWidget                   *progress_bar;
        GtkWidget                   *status_bar;
 
        GtkWidget                   *progress_bar;
        GtkWidget                   *status_bar;
@@ -181,58 +151,6 @@ modest_widget_factory_finalize (GObject *obj)
 }
 
 
 }
 
 
-
-/* FIXME: uninit these as well */
-static void
-init_signals (ModestWidgetFactory *self)
-{
-       TnyDevice *device;
-       ModestWidgetFactoryPrivate *priv;
-       
-       priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
-
-       /* folder view */
-       g_signal_connect (G_OBJECT(priv->folder_view), "folder_selection_changed",
-                         G_CALLBACK(on_folder_selection_changed), self);
-       g_signal_connect (G_OBJECT(priv->folder_view), "key-press-event",
-                         G_CALLBACK(on_folder_key_press_event), self);
-
-       /* header view */
-       g_signal_connect (G_OBJECT(priv->header_view), "status_update",
-                         G_CALLBACK(on_header_status_update), self);
-       g_signal_connect (G_OBJECT(priv->header_view), "message_selected",
-                         G_CALLBACK(on_message_selected), self);
-       g_signal_connect (G_OBJECT(priv->header_view), "item_not_found",
-                         G_CALLBACK(on_item_not_found), self);
-
-       
-       /* msg preview */
-       g_signal_connect (G_OBJECT(priv->msg_preview), "link_clicked",
-                         G_CALLBACK(on_msg_link_clicked), self);
-       g_signal_connect (G_OBJECT(priv->msg_preview), "link_hover",
-                         G_CALLBACK(on_msg_link_hover), self);
-       g_signal_connect (G_OBJECT(priv->msg_preview), "attachment_clicked",
-                         G_CALLBACK(on_msg_attachment_clicked), self);
-
-       /* account store */     
-       g_signal_connect (G_OBJECT (priv->account_store), "password_requested",
-                         G_CALLBACK(on_password_requested), self);     
-
-       /* FIXME: const casting is evil ==> tinymail */
-       device = (TnyDevice*) tny_account_store_get_device (priv->account_store);
-       if (device) {
-               g_signal_connect (G_OBJECT(device), "connection_changed",
-                                 G_CALLBACK(on_connection_changed), self);
-               g_signal_connect (G_OBJECT(priv->online_toggle), "toggled",
-                                 G_CALLBACK(on_online_toggle_toggled), self);
-               
-               /* init toggle in correct state */
-               on_connection_changed (device,
-                                      tny_device_is_online (device),
-                                      self);
-       }
-}
-
 static gboolean
 init_widgets (ModestWidgetFactory *self)
 {
 static gboolean
 init_widgets (ModestWidgetFactory *self)
 {
@@ -276,7 +194,7 @@ init_widgets (ModestWidgetFactory *self)
           the current folder */
        priv->folder_info_label = gtk_label_new (NULL);
        
           the current folder */
        priv->folder_info_label = gtk_label_new (NULL);
        
-       init_signals (self);
+/*     init_signals (self); */
        
        return TRUE;
 }
        
        return TRUE;
 }
@@ -450,376 +368,41 @@ modest_widget_factory_get_folder_info_label (ModestWidgetFactory *self)
        return MODEST_WIDGET_FACTORY_GET_PRIVATE(self)->folder_info_label;
 }
 
        return MODEST_WIDGET_FACTORY_GET_PRIVATE(self)->folder_info_label;
 }
 
-ModestToolbar*
-modest_widget_factory_get_main_toolbar (ModestWidgetFactory *self, 
-                                       GSList *items)
-{
-       ModestWidgetFactoryPrivate *priv;
-       priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
-
-       if (priv->main_toolbar)
-               return priv->main_toolbar;
-
-       priv->main_toolbar = modest_toolbar_new (items);
-       if (!priv->main_toolbar) {
-               g_printerr ("modest: failed to create main toolbar\n");
-               return NULL;
-       }
-       
-       return priv->main_toolbar;
-}
-
-
-ModestToolbar*
-modest_widget_factory_get_edit_toolbar (ModestWidgetFactory *self, 
-                                       GSList *items)
-{
-       return modest_toolbar_new (items);
-}
-
-
-
-static void
-on_folder_selection_changed (ModestFolderView *folder_view, TnyFolder *folder,
-                            gboolean selected,
-                            ModestWidgetFactory *self)
-{
-       ModestWidgetFactoryPrivate *priv;
-       gchar *txt;     
-
-       priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
-
-       if (folder) {
-               ModestConf *conf;
-               
-               conf = modest_tny_platform_factory_get_modest_conf_instance (priv->fact);
-
-               if (!selected) { /* the folder was unselected; save it's settings  */
-                       modest_widget_memory_save (conf, G_OBJECT (priv->header_view),
-                                                  "header-view");
-               } else {  /* the folder was selected */
-                       guint num, unread;
-                       num    = tny_folder_get_all_count    (folder);
-                       unread = tny_folder_get_unread_count (folder);
-                       
-                       txt = g_strdup_printf (_("%d %s, %d unread"),
-                                              num, num==1 ? _("item") : _("items"), unread);           
-                       gtk_label_set_label (GTK_LABEL(priv->folder_info_label), txt);
-                       g_free (txt);
-                       
-                       modest_header_view_set_folder (priv->header_view, folder);
-                       modest_widget_memory_restore (conf, G_OBJECT(priv->header_view),
-                                                             "header-view");
-               }
-       } else
-               gtk_label_set_label (GTK_LABEL(priv->folder_info_label), "");
-}
 
 /*********************** Test code ********************/
 
 /*********************** Test code ********************/
-static void
-on_folder_key_press_event (ModestFolderView *folder_view, GdkEventKey *event, gpointer user_data)
-{
-       GtkTreeSelection *selection;
-       GtkTreeModel *model;
-       GtkTreeIter iter;
-       TnyFolderStore *folder;
-       gint type;
-       ModestMailOperation *mail_op;
-
-       selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
-       gtk_tree_selection_get_selected (selection, &model, &iter);
-       
-       gtk_tree_model_get (model, &iter, 
-                           TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, &type, 
-                           TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &folder, 
-                           -1);
-
-       mail_op = modest_mail_operation_new ();
-
-       if (event->keyval == GDK_C || event->keyval == GDK_c) {
-               if (type != TNY_FOLDER_TYPE_ROOT)
-                       modest_mail_operation_create_folder (mail_op, folder, "New");
-       } else if (event->keyval == GDK_D || event->keyval == GDK_d) {
-               if (type != TNY_FOLDER_TYPE_ROOT)
-                       modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), FALSE);
-       } else if (event->keyval == GDK_N || event->keyval == GDK_n) {
-               if (type != TNY_FOLDER_TYPE_ROOT)
-                       modest_mail_operation_rename_folder (mail_op, TNY_FOLDER (folder), "New Name");
-       } else if (event->keyval == GDK_T || event->keyval == GDK_t) {
-               if (type != TNY_FOLDER_TYPE_ROOT)
-                       modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), TRUE);
-       }
-
-       g_object_unref (G_OBJECT (mail_op));
-}
-/****************************************************/
-
-static void
-on_message_selected (ModestHeaderView *folder_view, TnyMsg *msg,
-                    ModestWidgetFactory *self)
-{      
-       ModestWidgetFactoryPrivate *priv;
-       priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
-       
-       modest_msg_view_set_message (priv->msg_preview, msg);
-}
-
-
-/*
- * below some stuff to clearup statusbar messages after 1,5 seconds....
- */
-typedef struct {
-       GtkWidget *status_bar;
-       GtkWidget *progress_bar;
-       guint     msg_id;
-} StatusRemoveData;
-
-
-static gboolean
-on_statusbar_remove_msg (StatusRemoveData *data)
-{
-       /* we need to test types, as this callback maybe called after the
-        * widgets have been destroyed
-        */
-       if (GTK_IS_STATUSBAR(data->status_bar)) 
-               gtk_statusbar_remove (GTK_STATUSBAR(data->status_bar),
-                                     0, data->msg_id);
-       if (GTK_IS_PROGRESS_BAR(data->progress_bar))
-               gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(data->progress_bar),
-                                              1.0);
-       g_free (data);
-       return FALSE;
-}
-
-
-static void
-statusbar_push (ModestWidgetFactory *self, guint context_id, const gchar *msg)
-{
-       guint id;
-       StatusRemoveData *data;
-       ModestWidgetFactoryPrivate *priv;
-       
-       priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
-       
-       if (!msg)
-               return;
-       
-       id = gtk_statusbar_push (GTK_STATUSBAR(priv->status_bar), 0, msg);
-
-       data = g_new (StatusRemoveData, 1);
-       data->status_bar   = priv->status_bar;
-       data->progress_bar = priv->progress_bar;
-       data->msg_id     = id;
-
-       g_timeout_add (1500, (GSourceFunc)on_statusbar_remove_msg, data);
-}
-/****************************************************************************/
-
-
-static void
-on_header_status_update (ModestHeaderView *header_view, const gchar *msg,
-                        gint num, gint total, ModestWidgetFactory *self)
-{
-       ModestWidgetFactoryPrivate *priv;
-       
-       priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
-
-       if (total != 0)
-               gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(priv->progress_bar),
-                                              (gdouble)num/(gdouble)total);
-       else
-               gtk_progress_bar_pulse (GTK_PROGRESS_BAR(priv->progress_bar));
-
-       statusbar_push (self, 0, msg);
-}
-
-
-static void
-on_msg_link_hover (ModestMsgView *msgview, const gchar* link,
-                  ModestWidgetFactory *self)
-{
-       ModestWidgetFactoryPrivate *priv;
-       priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
-       
-       statusbar_push (self, 0, link);
-
-}      
-
-
-static void
-on_msg_link_clicked  (ModestMsgView *msgview, const gchar* link,
-                     ModestWidgetFactory *self)
-{
-       gchar *msg;
-       msg = g_strdup_printf (_("Opening %s..."), link);
-       statusbar_push (self, 0, msg);
-       g_free (msg);
-}
-
-static void
-on_msg_attachment_clicked  (ModestMsgView *msgview, int index,
-                           ModestWidgetFactory *self)
-{
-       gchar *msg;
-       
-       msg = g_strdup_printf (_("Opening attachment %d..."), index);
-       statusbar_push (self, 0, msg);
-       
-       g_free (msg);
-}
-
-
-static void
-on_connection_changed (TnyDevice *device, gboolean online,
-                      ModestWidgetFactory *self)
-{
-       ModestWidgetFactoryPrivate *priv;
-
-       priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
-
-       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(priv->online_toggle),
-                                     online);
-       gtk_button_set_label (GTK_BUTTON(priv->online_toggle),
-                             online ? _("Online") : _("Offline"));
-
-       statusbar_push (self, 0, online ? _("Modest went online") : _("Modest went offline"));
-
-       /* If Modest has became online and the header view has a
-          header selected then show it */
-       if (online) {
-               GtkTreeSelection *selected;
-
-               selected = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->header_view));
-               _modest_header_view_change_selection (selected, priv->header_view);
-       }
-}
-
-
-static void
-on_online_toggle_toggled (GtkToggleButton *toggle, ModestWidgetFactory *self)
-{
-       gboolean online;
-       const TnyDevice *device;
-       ModestWidgetFactoryPrivate *priv;
-       
-       priv    = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
-       online  = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(priv->online_toggle));
-       device  = tny_account_store_get_device (priv->account_store); 
-
-       /* FIXME: const casting should not be necessary ==> tinymail */
-       if (online)  /* we're moving to online state */
-               tny_device_force_online ((TnyDevice*)device);
-       else  /* we're moving to offline state */
-               tny_device_force_offline ((TnyDevice*)device);
-}
-
-
-static void
-on_item_not_found (ModestHeaderView* header_view, ModestItemType type,
-                  ModestWidgetFactory *self)
-{
-       /* FIXME ==> ask from UI... */
-       GtkWidget *dialog, *window;
-       gchar *txt;
-       gboolean online;
-       gchar *item = type == MODEST_ITEM_TYPE_FOLDER ? "folder" : "message";
-       
-       TnyDevice *device;
-       ModestWidgetFactoryPrivate *priv;
-       
-       priv    = MODEST_WIDGET_FACTORY_GET_PRIVATE(self);
-       device  = tny_account_store_get_device (priv->account_store);
-       
-       gdk_threads_enter ();
-       online = tny_device_is_online (device);
-       /* FIXME: get main window */
-       window = NULL;
-       if (online) {
-               /* already online -- the item is simply not there... */
-               dialog = gtk_message_dialog_new (window,
-                                                GTK_DIALOG_MODAL,
-                                                GTK_MESSAGE_WARNING,
-                                                GTK_BUTTONS_OK,
-                                                _("The %s you selected cannot be found"),
-                                                item);
-               gtk_dialog_run (GTK_DIALOG(dialog));
-       } else {
-
-               dialog = gtk_dialog_new_with_buttons (_("Connection requested"),
-                                                     window,
-                                                     GTK_DIALOG_MODAL,
-                                                     GTK_STOCK_CANCEL,
-                                                     GTK_RESPONSE_REJECT,
-                                                     GTK_STOCK_OK,
-                                                     GTK_RESPONSE_ACCEPT,
-                                                     NULL);
-
-               txt = g_strdup_printf (_("This %s is not available in offline mode.\n"
-                                        "Do you want to get online?"), item);
-               gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), 
-                                   gtk_label_new (txt), FALSE, FALSE, 0);
-               gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
-               g_free (txt);
-
-               gtk_window_set_default_size (GTK_WINDOW(dialog), 300, 300);
-               if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
-                       tny_device_force_online (device);
-               }
-       }
-       gtk_widget_destroy (dialog);
-       gdk_threads_leave ();
-}
-
-
-
-static void
-on_password_requested (ModestTnyAccountStore *account_store, const gchar* account_name,
-                      gchar **password, gboolean *cancel, gboolean *remember, ModestWidgetFactory *self)
-{
-       gchar *txt;
-       GtkWidget *dialog, *entry, *remember_pass_check, *window;
-       
-       /* FIXME: get main window */
-       window = NULL;
-       dialog = gtk_dialog_new_with_buttons (_("Password requested"),
-                                             window,
-                                             GTK_DIALOG_MODAL,
-                                             GTK_STOCK_CANCEL,
-                                             GTK_RESPONSE_REJECT,
-                                             GTK_STOCK_OK,
-                                             GTK_RESPONSE_ACCEPT,
-                                             NULL);
-
-       txt = g_strdup_printf (_("Please enter your password for %s"), account_name);
-       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), gtk_label_new(txt),
-                           FALSE, FALSE, 0);
-       g_free (txt);
-
-       entry = gtk_entry_new_with_max_length (40);
-       gtk_entry_set_visibility (GTK_ENTRY(entry), FALSE);
-       gtk_entry_set_invisible_char (GTK_ENTRY(entry), 0x2022); /* bullet unichar */
-       
-       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry,
-                           TRUE, FALSE, 0);    
-
-       remember_pass_check = gtk_check_button_new_with_label (_("Remember password"));
-       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), remember_pass_check,
-                           TRUE, FALSE, 0);
-
-       gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
-       
-       if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
-               *password = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry)));
-               *cancel   = FALSE;
-       } else {
-               *password = NULL;
-               *cancel   = TRUE;
-       }
-       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (remember_pass_check)))
-               *remember = TRUE;
-       else
-               *remember = FALSE;
-
-       gtk_widget_destroy (dialog);
-}
-
+/* static void */
+/* on_folder_key_press_event (ModestFolderView *folder_view, GdkEventKey *event, gpointer user_data) */
+/* { */
+/*     GtkTreeSelection *selection; */
+/*     GtkTreeModel *model; */
+/*     GtkTreeIter iter; */
+/*     TnyFolderStore *folder; */
+/*     gint type; */
+/*     ModestMailOperation *mail_op; */
+
+/*     selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view)); */
+/*     gtk_tree_selection_get_selected (selection, &model, &iter); */
+       
+/*     gtk_tree_model_get (model, &iter,  */
+/*                         TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, &type,  */
+/*                         TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &folder,  */
+/*                         -1); */
+
+/*     mail_op = modest_mail_operation_new (); */
+
+/*     if (event->keyval == GDK_C || event->keyval == GDK_c) { */
+/*             if (type != TNY_FOLDER_TYPE_ROOT) */
+/*                     modest_mail_operation_create_folder (mail_op, folder, "New"); */
+/*     } else if (event->keyval == GDK_D || event->keyval == GDK_d) { */
+/*             if (type != TNY_FOLDER_TYPE_ROOT) */
+/*                     modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), FALSE); */
+/*     } else if (event->keyval == GDK_N || event->keyval == GDK_n) { */
+/*             if (type != TNY_FOLDER_TYPE_ROOT) */
+/*                     modest_mail_operation_rename_folder (mail_op, TNY_FOLDER (folder), "New Name"); */
+/*     } else if (event->keyval == GDK_T || event->keyval == GDK_t) { */
+/*             if (type != TNY_FOLDER_TYPE_ROOT) */
+/*                     modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), TRUE); */
+/*     } */
+
+/*     g_object_unref (G_OBJECT (mail_op)); */
+/* } */
index 07a3fe7..0eeb0bd 100644 (file)
@@ -36,7 +36,6 @@
 #include "widgets/modest-folder-view.h"
 #include "widgets/modest-msg-view.h"
 #include "widgets/modest-account-view.h"
 #include "widgets/modest-folder-view.h"
 #include "widgets/modest-msg-view.h"
 #include "widgets/modest-account-view.h"
-#include "widgets/modest-toolbar.h"
 #include "widgets/modest-combo-box.h"
 
 G_BEGIN_DECLS
 #include "widgets/modest-combo-box.h"
 
 G_BEGIN_DECLS
@@ -193,60 +192,27 @@ GtkWidget*     modest_widget_factory_get_status_bar (ModestWidgetFactory *self);
 GtkWidget*     modest_widget_factory_get_combo_box (ModestWidgetFactory *self,
                                                    ModestComboBoxType type);
 
 GtkWidget*     modest_widget_factory_get_combo_box (ModestWidgetFactory *self,
                                                    ModestComboBoxType type);
 
-
 /**
 /**
- * modest_widget_factory_get_online_combo
+ * modest_widget_factory_get_online_toggle
  * @self: a ModestWidgetFactory instance
  * @self: a ModestWidgetFactory instance
- * 
+ *
  * return a toggle which with one can see whether online/offline mode is active.
  * In case of auto-connect, this will automatically be sync'd with the
  * account_store / device
  * return a toggle which with one can see whether online/offline mode is active.
  * In case of auto-connect, this will automatically be sync'd with the
  * account_store / device
- *  
- * Returns: the combo box
+ *
+ * Returns: the toggle button
  */
 GtkWidget*  modest_widget_factory_get_online_toggle (ModestWidgetFactory *self);
 
  */
 GtkWidget*  modest_widget_factory_get_online_toggle (ModestWidgetFactory *self);
 
-
-
-
 /**
  * modest_widget_factory_get_folder_info_label
  * @self: a ModestWidgetFactory instance
 /**
  * modest_widget_factory_get_folder_info_label
  * @self: a ModestWidgetFactory instance
- * 
- * return a label with the number of items, unread items in the current folder
- *  
- * Returns: the label
- */
-GtkWidget* modest_widget_factory_get_folder_info_label (ModestWidgetFactory *self);
-
-
-/**
- * modest_widget_factory_get_main_toolbar
- * @self: a ModestWidgetFactory instance
- * @items: a list of ModestToolbarButtons (button_ids)
  *
  *
- * returns the main toolbar widget; their enabled/disabled state synchronized with
- * the other widgets. Note that after the first calling, this function will
- * always return the same toolbar, regardless of the items
- *  
- * Returns: the toolbar
- */
-ModestToolbar *modest_widget_factory_get_main_toolbar (ModestWidgetFactory *self, 
-                                                      GSList *items);
-
-/**
- * modest_widget_factory_get_edit_toolbar
- * @self: a ModestWidgetFactory instance
- * @items: a list of ModestToolbarButtons (button_ids)
+ * return a label with the number of items, unread items in the current folder
  *
  *
- * returns the toolbar widget for edit windows; the enabled/disabled
- * state synchronized with the other widgets.
- *  
- * Returns: the toolbar
+ * Returns: the label
  */
  */
-ModestToolbar *modest_widget_factory_get_edit_toolbar (ModestWidgetFactory *self, 
-                                                      GSList *items);
-
+GtkWidget*  modest_widget_factory_get_folder_info_label (ModestWidgetFactory *self);
 
 G_END_DECLS
 
 
 G_END_DECLS
 
diff --git a/src/ui/modest-ui.xml b/src/ui/modest-ui.xml
new file mode 100644 (file)
index 0000000..04ba930
--- /dev/null
@@ -0,0 +1,89 @@
+<!--
+ * Copyright (c) 2006, Nokia Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Nokia Corporation nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<ui>
+
+  <menubar name="MenuBar">
+    <menu name="FileMenu" action="File">
+      <menuitem name="FileNewMenu" action="FileNew"/>
+      <menuitem name="FileOpenMenu" action="FileOpen"/>
+      <separator/>
+      <menuitem name="FileSaveMenu" action="FileSave"/>
+      <menuitem name="FileSaveAsMenu" action="FileSaveAs"/>
+      <separator/>
+      <menuitem name="FileQuitMenu" action="FileQuit"/>
+    </menu>
+
+    <menu name="EditMenu" action="Edit">
+      <menuitem name="EditUndoMenu" action="EditUndo"/>
+      <menuitem name="EditRedoMenu" action="EditRedo"/>
+      <separator/>
+      <menuitem name="EditCutMenu" action="EditCut"/>
+      <menuitem name="EditCopyMenu" action="EditCopy"/>
+      <menuitem name="EditPasteMenu" action="EditPaste"/>
+      <menuitem name="EditDeleteMenu" action="EditDelete"/>
+      <separator/>
+      <menuitem name="EditSelectAllMenu" action="EditSelectAll"/>
+      <menuitem name="EditDeselectAllMenu" action="EditDeselectAll"/>
+    </menu>
+
+    <menu name="ActionsMenu" action="Actions">
+      <menuitem name="ActionsNewMenu" action="ActionsNew"/>
+      <menuitem name="ActionsReplyMenu" action="ActionsReply"/>
+      <menuitem name="ActionsForwardMenu" action="ActionsForward"/>
+      <menuitem name="ActionsBounceMenu" action="ActionsBounce"/>
+    </menu>
+
+    <menu name="OptionsMenu" action="Options">
+      <menuitem name="OptionsAccountsMenu" action="OptionsAccounts"/>
+      <menuitem name="OptionsContactsMenu" action="OptionsContacts"/>
+    </menu>
+
+    <menu name="HelpMenu" action="Help">
+      <menuitem name="HelpAboutMenu" action="HelpAbout"/>
+    </menu>
+  </menubar>
+
+  <toolbar name="ToolBar">
+    <toolitem action="ActionsNew"/>
+    <separator/>
+    <toolitem action="ActionsReply"/>
+    <toolitem action="ActionsReplyAll"/>
+    <toolitem action="ActionsForward"/>
+    <separator/>
+    <toolitem action="ActionsSendReceive"/>
+    <separator/>
+    <toolitem action="GotoPrevious"/>
+    <toolitem action="GotoNext"/>
+    <separator/>
+    <toolitem action="ActionsDelete"/>
+  </toolbar>
+
+</ui>
index d6ee292..8746c7d 100644 (file)
@@ -6,9 +6,10 @@ INCLUDES=\
        $(MODEST_GSTUFF_CFLAGS) \
        $(MODEST_LIBTINYMAIL_GNOME_DESKTOP_CFLAGS) \
        $(MODEST_LIBTINYMAIL_MAEMO_CFLAGS) \
        $(MODEST_GSTUFF_CFLAGS) \
        $(MODEST_LIBTINYMAIL_GNOME_DESKTOP_CFLAGS) \
        $(MODEST_LIBTINYMAIL_MAEMO_CFLAGS) \
-       -I${top_srcdir}/src/$(MODEST_PLATFORM) \
-       -DPREFIX=\"@prefix@\" \
+       -I ${top_srcdir}/src/$(MODEST_PLATFORM) \
        -I ${top_srcdir}/src \
        -I ${top_srcdir}/src \
+       -DPREFIX=\"@prefix@\" \
+       -DPIXMAP_PREFIX=\"${datadir}/pixmaps/modest/\" \
        -Wall
 
 noinst_LTLIBRARIES=\
        -Wall
 
 noinst_LTLIBRARIES=\
@@ -24,8 +25,8 @@ libmodest_widgets_la_SOURCES=   \
        modest-header-view-priv.h \
        modest-msg-view.c       \
        modest-msg-view.h       \
        modest-header-view-priv.h \
        modest-msg-view.c       \
        modest-msg-view.h       \
-       modest-toolbar.h        \
-       modest-toolbar.c        \
+       modest-toolbar.c        \
+       modest-toolbar.h        \
        modest-combo-box.c      \
        modest-combo-box.h
  
        modest-combo-box.c      \
        modest-combo-box.h
  
diff --git a/src/widgets/modest-edit-msg-window.h b/src/widgets/modest-edit-msg-window.h
new file mode 100644 (file)
index 0000000..63cf77e
--- /dev/null
@@ -0,0 +1,92 @@
+/* Copyright (c) 2006, Nokia Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Nokia Corporation nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MODEST_EDIT_MSG_WINDOW_H__
+#define __MODEST_EDIT_MSG_WINDOW_H__
+
+#include <gtk/gtk.h>
+#include <tny-msg.h>
+#include "modest-conf.h"
+#include "modest-widget-factory.h"
+
+G_BEGIN_DECLS
+
+/* convenience macros */
+#define MODEST_TYPE_EDIT_MSG_WINDOW             (modest_edit_msg_window_get_type())
+#define MODEST_EDIT_MSG_WINDOW(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_EDIT_MSG_WINDOW,ModestEditMsgWindow))
+#define MODEST_EDIT_MSG_WINDOW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_EDIT_MSG_WINDOW,GtkWindow))
+#define MODEST_IS_EDIT_MSG_WINDOW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_EDIT_MSG_WINDOW))
+#define MODEST_IS_EDIT_MSG_WINDOW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_EDIT_MSG_WINDOW))
+#define MODEST_EDIT_MSG_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_EDIT_MSG_WINDOW,ModestEditMsgWindowClass))
+
+typedef struct _ModestEditMsgWindow      ModestEditMsgWindow;
+typedef struct _ModestEditMsgWindowClass ModestEditMsgWindowClass;
+
+struct _ModestEditMsgWindow {
+        GtkWindow parent;
+       /* insert public members, if any */
+};
+
+struct _ModestEditMsgWindowClass {
+       GtkWindowClass parent_class;
+       /* insert signal callback declarations, eg. */
+       /* void (* my_event) (ModestEditMsgWindow* obj); */
+};
+
+
+typedef enum _ModestEditType {
+       MODEST_EDIT_TYPE_NEW,
+       MODEST_EDIT_TYPE_REPLY,
+       MODEST_EDIT_TYPE_FORWARD,
+       MODEST_EDIT_TYPE_VIEW,
+       
+       MODEST_EDIT_TYPE_NUM
+} ModestEditType;
+/* typedef enum _ModestEditType ModestEditType; */
+
+
+/* member functions */
+GType        modest_edit_msg_window_get_type    (void) G_GNUC_CONST;
+
+GtkWidget*   modest_edit_msg_window_new         (ModestWidgetFactory *factory,
+                                                ModestEditType type);
+
+/**
+ * modest_edit_msg_window_set_msg:
+ * @self: a #ModestEditMsgWindow
+ * @msg: a #TnyMsg
+ * 
+ * shows the message @msg in a #ModestEditMsgWindow
+ **/
+void         modest_edit_msg_window_set_msg     (ModestEditMsgWindow *self, 
+                                                TnyMsg *msg);
+G_END_DECLS
+
+#endif /* __MODEST_EDIT_MSG_WINDOW_H__ */
+
index be893a7..9ae28e1 100644 (file)
@@ -58,7 +58,6 @@ static void         on_subscription_changed  (TnyStoreAccount *store_account, Tn
 
 static gboolean     modest_folder_view_update_model     (ModestFolderView *self,
                                                         TnyAccountStore *account_store);
 
 static gboolean     modest_folder_view_update_model     (ModestFolderView *self,
                                                         TnyAccountStore *account_store);
-static const gchar *get_account_name_from_folder        (GtkTreeModel *model, GtkTreeIter iter);
 
 static void         modest_folder_view_disconnect_store_account_handlers (GtkTreeView *self);
 
 
 static void         modest_folder_view_disconnect_store_account_handlers (GtkTreeView *self);
 
@@ -468,21 +467,6 @@ modest_folder_view_new (ModestTnyAccountStore *account_store,
 }
 
 
 }
 
 
-const gchar *
-modest_folder_view_get_selected_account (ModestFolderView *self)
-{
-       GtkTreeModel *model;
-       GtkTreeIter iter;
-       ModestFolderViewPrivate *priv;
-       
-       g_return_val_if_fail (self, NULL);
-       priv = MODEST_FOLDER_VIEW_GET_PRIVATE(self);
-
-       gtk_tree_selection_get_selected (priv->cur_selection, &model, &iter);
-
-       return get_account_name_from_folder (model, iter);
-}
-
 static gboolean
 update_model_empty (ModestFolderView *self)
 {
 static gboolean
 update_model_empty (ModestFolderView *self)
 {
@@ -662,26 +646,3 @@ modest_folder_view_update_model (ModestFolderView *self, TnyAccountStore *accoun
 
        return retval;
 }
 
        return retval;
 }
-
-
-/* ugly */
-static const gchar *
-get_account_name_from_folder (GtkTreeModel *model, GtkTreeIter iter)
-{
-       GtkTreePath *path;
-       GtkTreeIter new_iter;
-       TnyFolder *account_folder;
-       gint depth, i;
-
-       path = gtk_tree_model_get_path (model, &iter);
-       depth = gtk_tree_path_get_depth (path);
-
-       for (i = 1; i < depth; ++i)
-               gtk_tree_path_up (path);
-
-       gtk_tree_model_get_iter (model, &new_iter, path);
-       gtk_tree_model_get (model, &new_iter, 
-                           TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &account_folder, 
-                           -1);
-       return tny_account_get_name (TNY_ACCOUNT (account_folder));
-}
index 02ebd2f..d08cdd7 100644 (file)
@@ -47,7 +47,7 @@ static void on_selection_changed (GtkTreeSelection *sel, gpointer user_data);
 #define MODEST_HEADER_VIEW_PTR "modest-header-view"
 
 enum {
 #define MODEST_HEADER_VIEW_PTR "modest-header-view"
 
 enum {
-       MESSAGE_SELECTED_SIGNAL,
+       HEADER_SELECTED_SIGNAL,
        ITEM_NOT_FOUND_SIGNAL,
        STATUS_UPDATE_SIGNAL,
        LAST_SIGNAL
        ITEM_NOT_FOUND_SIGNAL,
        STATUS_UPDATE_SIGNAL,
        LAST_SIGNAL
@@ -67,11 +67,6 @@ struct _ModestHeaderViewPrivate {
                                                MODEST_TYPE_HEADER_VIEW, \
                                                 ModestHeaderViewPrivate))
 
                                                MODEST_TYPE_HEADER_VIEW, \
                                                 ModestHeaderViewPrivate))
 
-typedef struct _GetMsgAsyncHelper {
-       ModestHeaderView *self;
-       TnyHeader *header;
-} GetMsgAsyncHelper;
-
 /* globals */
 static GObjectClass *parent_class = NULL;
 
 /* globals */
 static GObjectClass *parent_class = NULL;
 
@@ -113,11 +108,11 @@ modest_header_view_class_init (ModestHeaderViewClass *klass)
        
        g_type_class_add_private (gobject_class, sizeof(ModestHeaderViewPrivate));
        
        
        g_type_class_add_private (gobject_class, sizeof(ModestHeaderViewPrivate));
        
-       signals[MESSAGE_SELECTED_SIGNAL] = 
-               g_signal_new ("message_selected",
+       signals[HEADER_SELECTED_SIGNAL] = 
+               g_signal_new ("header_selected",
                              G_TYPE_FROM_CLASS (gobject_class),
                              G_SIGNAL_RUN_FIRST,
                              G_TYPE_FROM_CLASS (gobject_class),
                              G_SIGNAL_RUN_FIRST,
-                             G_STRUCT_OFFSET (ModestHeaderViewClass,message_selected),
+                             G_STRUCT_OFFSET (ModestHeaderViewClass,header_selected),
                              NULL, NULL,
                              g_cclosure_marshal_VOID__POINTER,
                              G_TYPE_NONE, 1, G_TYPE_POINTER);
                              NULL, NULL,
                              g_cclosure_marshal_VOID__POINTER,
                              G_TYPE_NONE, 1, G_TYPE_POINTER);
@@ -131,14 +126,14 @@ modest_header_view_class_init (ModestHeaderViewClass *klass)
                              g_cclosure_marshal_VOID__INT,
                              G_TYPE_NONE, 1, G_TYPE_INT);
 
                              g_cclosure_marshal_VOID__INT,
                              G_TYPE_NONE, 1, G_TYPE_INT);
 
-       signals[STATUS_UPDATE_SIGNAL] = 
+       signals[STATUS_UPDATE_SIGNAL] =
                g_signal_new ("status_update",
                              G_TYPE_FROM_CLASS (gobject_class),
                              G_SIGNAL_RUN_FIRST,
                g_signal_new ("status_update",
                              G_TYPE_FROM_CLASS (gobject_class),
                              G_SIGNAL_RUN_FIRST,
-                             G_STRUCT_OFFSET (ModestHeaderViewClass,message_selected),
+                             G_STRUCT_OFFSET (ModestHeaderViewClass,status_update),
                              NULL, NULL,
                              modest_marshal_VOID__STRING_INT_INT,
                              NULL, NULL,
                              modest_marshal_VOID__STRING_INT_INT,
-                             G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT);   
+                             G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT);
 }
 
 static void
 }
 
 static void
@@ -539,6 +534,20 @@ modest_header_view_get_selected_headers (ModestHeaderView *self)
        return header_list;
 }
 
        return header_list;
 }
 
+void 
+modest_header_view_select_next (ModestHeaderView *self)
+{
+       GtkTreeSelection *sel;
+       GtkTreeIter iter;
+       GtkTreeModel *model;
+
+       sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (self));
+       if (sel) {
+               gtk_tree_selection_get_selected (sel, &model, &iter);
+               gtk_tree_model_iter_next (model, &iter);
+               gtk_tree_selection_select_iter (sel, &iter);
+       }
+}
 
 GList*
 modest_header_view_get_columns (ModestHeaderView *self)
 
 GList*
 modest_header_view_get_columns (ModestHeaderView *self)
@@ -547,9 +556,6 @@ modest_header_view_get_columns (ModestHeaderView *self)
        return gtk_tree_view_get_columns (GTK_TREE_VIEW(self)); 
 }
 
        return gtk_tree_view_get_columns (GTK_TREE_VIEW(self)); 
 }
 
-
-
-
 gboolean
 modest_header_view_set_style (ModestHeaderView *self,
                              ModestHeaderViewStyle style)
 gboolean
 modest_header_view_set_style (ModestHeaderView *self,
                              ModestHeaderViewStyle style)
@@ -704,6 +710,7 @@ on_refresh_folder (TnyFolder *folder, gboolean cancelled, GError **err,
        GtkTreeModel *sortable; 
        ModestHeaderView *self;
        ModestHeaderViewPrivate *priv;
        GtkTreeModel *sortable; 
        ModestHeaderView *self;
        ModestHeaderViewPrivate *priv;
+       GError *error = NULL;
 
        if (cancelled)
                return;
 
        if (cancelled)
                return;
@@ -722,13 +729,19 @@ on_refresh_folder (TnyFolder *folder, gboolean cancelled, GError **err,
                        g_object_unref (priv->headers);
 
                priv->headers = TNY_LIST(tny_gtk_header_list_model_new ());
                        g_object_unref (priv->headers);
 
                priv->headers = TNY_LIST(tny_gtk_header_list_model_new ());
-               tny_folder_get_headers (folder, priv->headers, FALSE, NULL); /* FIXME */
-               
+               tny_folder_get_headers (folder, priv->headers, FALSE, &error); /* FIXME */
+               if (error) {
+                       g_signal_emit (G_OBJECT(self), signals[ITEM_NOT_FOUND_SIGNAL],
+                                      0, MODEST_ITEM_TYPE_MESSAGE);
+                       g_print (error->message);
+                       g_error_free (error);
+                       return;
+               }
+
                tny_gtk_header_list_model_set_folder
                        (TNY_GTK_HEADER_LIST_MODEL(priv->headers),folder, TRUE); /*async*/
                tny_gtk_header_list_model_set_folder
                        (TNY_GTK_HEADER_LIST_MODEL(priv->headers),folder, TRUE); /*async*/
-                       
-               sortable = gtk_tree_model_sort_new_with_model
-                       (GTK_TREE_MODEL(priv->headers));
+
+               sortable = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL(priv->headers));
 
                /* install our special sorting functions */
                cursor = cols = gtk_tree_view_get_columns (GTK_TREE_VIEW(self));
 
                /* install our special sorting functions */
                cursor = cols = gtk_tree_view_get_columns (GTK_TREE_VIEW(self));
@@ -746,7 +759,6 @@ on_refresh_folder (TnyFolder *folder, gboolean cancelled, GError **err,
                gtk_tree_view_set_model (GTK_TREE_VIEW (self), sortable);
                gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(self),TRUE);
                gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(self), TRUE);
                gtk_tree_view_set_model (GTK_TREE_VIEW (self), sortable);
                gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(self),TRUE);
                gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(self), TRUE);
-               /* no need to unref sortable */ 
        }
 }
 
        }
 }
 
@@ -795,36 +807,12 @@ modest_header_view_set_folder (ModestHeaderView *self, TnyFolder *folder)
        }
        
        /* no message selected */
        }
        
        /* no message selected */
-       g_signal_emit (G_OBJECT(self), signals[MESSAGE_SELECTED_SIGNAL], 0,
+       g_signal_emit (G_OBJECT(self), signals[HEADER_SELECTED_SIGNAL], 0,
                       NULL);
        return TRUE;
 }
 
 static void
                       NULL);
        return TRUE;
 }
 
 static void
-get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data)
-{
-       GetMsgAsyncHelper *helper;
-       TnyHeaderFlags header_flags;
-
-       helper = (GetMsgAsyncHelper *) user_data;
-
-       if (msg) {
-               g_signal_emit (G_OBJECT(helper->self), signals[MESSAGE_SELECTED_SIGNAL], 0,
-                              msg);
-       
-               /* mark message as seen; _set_flags crashes, bug in tinymail? */
-               header_flags = tny_header_get_flags (helper->header);
-               tny_header_set_flags (helper->header, header_flags | TNY_HEADER_FLAG_SEEN);
-       } else {
-               g_signal_emit (G_OBJECT(helper->self), signals[ITEM_NOT_FOUND_SIGNAL], 
-                              0, MODEST_ITEM_TYPE_MESSAGE);
-       }
-
-       /* Frees */
-       g_slice_free (GetMsgAsyncHelper, helper);
-}
-
-static void
 on_selection_changed (GtkTreeSelection *sel, gpointer user_data)
 {
        GtkTreeModel *model;
 on_selection_changed (GtkTreeSelection *sel, gpointer user_data)
 {
        GtkTreeModel *model;
@@ -832,8 +820,6 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data)
        GtkTreeIter iter;
        ModestHeaderView *self;
        ModestHeaderViewPrivate *priv;
        GtkTreeIter iter;
        ModestHeaderView *self;
        ModestHeaderViewPrivate *priv;
-       TnyFolder *folder;
-       GetMsgAsyncHelper *helper;
        
        g_return_if_fail (sel);
        g_return_if_fail (user_data);
        
        g_return_if_fail (sel);
        g_return_if_fail (user_data);
@@ -847,31 +833,11 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data)
        gtk_tree_model_get (model, &iter,
                            TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                            &header, -1);
        gtk_tree_model_get (model, &iter,
                            TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                            &header, -1);
-       
-       if (!header) {
-               g_printerr ("modest: cannot find header\n");
-               return;
-       }
-
-       folder = tny_header_get_folder (TNY_HEADER(header));
-       if (!folder) {
-               g_signal_emit (G_OBJECT(self), signals[ITEM_NOT_FOUND_SIGNAL], 0,
-                              MODEST_ITEM_TYPE_FOLDER);
-               return;
-       }
-
-       helper = g_slice_new0 (GetMsgAsyncHelper);
-       helper->self = self;
-       helper->header = header;
-
-       /* Get message asynchronously. The callback will issue a
-          signal if the message was retrieved correctly and then will
-          set the header flags as read. */
-       tny_folder_get_msg_async (TNY_FOLDER(folder), 
-                                 header, get_msg_cb, helper);
 
 
-       /* Frees */
-       g_object_unref (G_OBJECT (folder));
+       /* Emit signal */
+       g_signal_emit (G_OBJECT(self), 
+                      signals[HEADER_SELECTED_SIGNAL], 
+                      0, header);
 }
 
 
 }
 
 
index c8abdf0..9048171 100644 (file)
@@ -84,9 +84,9 @@ typedef enum _ModestItemType {
 struct _ModestHeaderViewClass {
        GtkTreeViewClass parent_class;
 
 struct _ModestHeaderViewClass {
        GtkTreeViewClass parent_class;
 
-       void (*message_selected) (ModestHeaderView* self,
-                                 TnyMsg *msg,
-                                 gpointer user_data);
+       void (*header_selected) (ModestHeaderView* self,
+                                TnyHeader *header,
+                                gpointer user_data);
 
        void (*item_not_found) (ModestHeaderView* self,
                                ModestItemType type,
 
        void (*item_not_found) (ModestHeaderView* self,
                                ModestItemType type,
@@ -209,6 +209,15 @@ ModestHeaderViewStyle   modest_header_view_get_style (ModestHeaderView *self);
  */
 TnyList* modest_header_view_get_selected_headers (ModestHeaderView *self);
 
  */
 TnyList* modest_header_view_get_selected_headers (ModestHeaderView *self);
 
+
+/**
+ * modest_header_view_select_next:
+ * @self: a #ModestHeaderView
+ * 
+ * Selects the header next to the current selected one
+ **/
+void     modest_header_view_select_next          (ModestHeaderView *self);
+
 G_END_DECLS
 
 
 G_END_DECLS
 
 
diff --git a/src/widgets/modest-icon-names.h b/src/widgets/modest-icon-names.h
new file mode 100644 (file)
index 0000000..f503e9a
--- /dev/null
@@ -0,0 +1,90 @@
+/* Copyright (c) 2006, Nokia Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Nokia Corporation nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/* modest-icon-names.h */
+
+/*
+ * FIXME: this should go the front-end dirs,
+ * with specific icons
+ */
+
+#ifndef __MODEST_ICON_NAMES_H__
+#define __MODEST_ICON_NAMES_H__
+
+/* icons */
+
+#define MODEST_APP_ICON                                PIXMAP_PREFIX "modest.png"
+
+#define MODEST_HEADER_ICON_READ                        PIXMAP_PREFIX "qgn_list_messagin_mail.png"
+#define MODEST_HEADER_ICON_UNREAD              PIXMAP_PREFIX "qgn_list_messagin_mail_unread.png"
+#define MODEST_HEADER_ICON_DELETED             PIXMAP_PREFIX "qgn_list_messagin_mail_deleted.png"
+#define MODEST_HEADER_ICON_ATTACH              PIXMAP_PREFIX "qgn_list_gene_attacpap.png"
+
+#define MODEST_FOLDER_ICON_OPEN                        PIXMAP_PREFIX "qgn_list_gene_fldr_opn.png"
+#define MODEST_FOLDER_ICON_CLOSED              PIXMAP_PREFIX "qgn_list_gene_fldr_cls.png"
+
+#define MODEST_FOLDER_ICON_ACCOUNT             PIXMAP_PREFIX "qgn_addr_icon_user_group.png"
+#define MODEST_FOLDER_ICON_INBOX               PIXMAP_PREFIX "qgn_list_messagin_inbox.png"
+#define MODEST_FOLDER_ICON_OUTBOX              PIXMAP_PREFIX "qgn_list_messagin_outbox.png"
+#define MODEST_FOLDER_ICON_SENT                        PIXMAP_PREFIX "qgn_list_messagin_sent.png"
+#define MODEST_FOLDER_ICON_TRASH               PIXMAP_PREFIX "qgn_list_messagin_mail_deleted.png"
+#define MODEST_FOLDER_ICON_JUNK                        PIXMAP_PREFIX "qgn_list_messagin_mail_deleted.png"
+#define MODEST_FOLDER_ICON_DRAFTS              PIXMAP_PREFIX "qgn_list_messagin_drafts.png"
+#define MODEST_FOLDER_ICON_NORMAL              PIXMAP_PREFIX "qgn_list_gene_fldr_cls.png"
+
+#define MODEST_FOLDER_ICON_CONTACTS            PIXMAP_PREFIX "qgn_addr_icon_user_group.png"
+#define MODEST_FOLDER_ICON_NOTES               PIXMAP_PREFIX "qgn_list_messagin_viewer.png"
+#define MODEST_FOLDER_ICON_CALENDAR            PIXMAP_PREFIX "qgn_widg_datedit.png"
+
+/* toolbar */
+#define  MODEST_TOOLBAR_ICON_MAIL_SEND         PIXMAP_PREFIX "qgn_list_messagin_sent.png"
+#define  MODEST_TOOLBAR_ICON_NEW_MAIL          PIXMAP_PREFIX "qgn_list_messagin_editor.png"
+#define  MODEST_TOOLBAR_ICON_SEND_RECEIVE      PIXMAP_PREFIX "gtk-refresh.png"
+#define  MODEST_TOOLBAR_ICON_REPLY             PIXMAP_PREFIX "mail-reply-sender.png"
+#define  MODEST_TOOLBAR_ICON_REPLY_ALL         PIXMAP_PREFIX "mail-reply-all.png"
+#define  MODEST_TOOLBAR_ICON_FORWARD           PIXMAP_PREFIX "mail-forward.png"
+#define  MODEST_TOOLBAR_ICON_DELETE            PIXMAP_PREFIX "mail-mark-junk.png"
+#define  MODEST_TOOLBAR_ICON_NEXT              PIXMAP_PREFIX "forward.png"
+#define  MODEST_TOOLBAR_ICON_PREV              PIXMAP_PREFIX "back.png"
+#define  MODEST_TOOLBAR_ICON_STOP              PIXMAP_PREFIX "stock-stop.svg"
+
+/* Stock icon names */
+#define  MODEST_STOCK_MAIL_SEND           "modest-stock-mail-send"
+#define  MODEST_STOCK_NEW_MAIL    "modest-stock-new-mail"
+#define  MODEST_STOCK_SEND_RECEIVE "modest-stock-send-receive"
+#define  MODEST_STOCK_REPLY        "modest-stock-reply"
+#define  MODEST_STOCK_REPLY_ALL           "modest-stock-reply-all"
+#define  MODEST_STOCK_FORWARD      "modest-stock-forward"
+#define  MODEST_STOCK_DELETE       "modest-stock-delete"
+#define  MODEST_STOCK_NEXT         "modest-stock-next"
+#define  MODEST_STOCK_PREV         "modest-stock-prev"
+#define  MODEST_STOCK_STOP         "modest-stock-stop"
+
+#endif  /*__MODEST_ICON_NAMES_H__*/
diff --git a/src/widgets/modest-main-window.h b/src/widgets/modest-main-window.h
new file mode 100644 (file)
index 0000000..120da4a
--- /dev/null
@@ -0,0 +1,47 @@
+/* modest-main-window.h */
+/* insert (c)/licensing information) */
+
+#ifndef __MODEST_MAIN_WINDOW_H__
+#define __MODEST_MAIN_WINDOW_H__
+
+#include <gtk/gtkwindow.h>
+#include <modest-widget-factory.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /*HAVE_CONFIG_H*/
+
+G_BEGIN_DECLS
+
+/* convenience macros */
+#define MODEST_TYPE_MAIN_WINDOW             (modest_main_window_get_type())
+#define MODEST_MAIN_WINDOW(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_MAIN_WINDOW,ModestMainWindow))
+#define MODEST_MAIN_WINDOW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_MAIN_WINDOW,GtkWindow))
+#define MODEST_IS_MAIN_WINDOW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_MAIN_WINDOW))
+#define MODEST_IS_MAIN_WINDOW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_MAIN_WINDOW))
+#define MODEST_MAIN_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_MAIN_WINDOW,ModestMainWindowClass))
+
+typedef struct _ModestMainWindow      ModestMainWindow;
+typedef struct _ModestMainWindowClass ModestMainWindowClass;
+
+struct _ModestMainWindow {
+        GtkWindow parent;
+       /* insert public members, if any */
+};
+
+struct _ModestMainWindowClass {
+       GtkWindowClass parent_class;
+       /* insert signal callback declarations, eg. */
+       /* void (* my_event) (ModestMainWindow* obj); */
+};
+
+/* member functions */
+GType modest_main_window_get_type (void) G_GNUC_CONST;
+
+
+GtkWidget* modest_main_window_new (ModestWidgetFactory *factory,
+                                  GtkUIManager *ui_manager);
+
+G_END_DECLS
+
+#endif /* __MODEST_MAIN_WINDOW_H__ */
index 76013b6..729d5f8 100644 (file)
@@ -30,7 +30,7 @@
 #include <check.h>
 #include <stdlib.h>
 #include <string.h>
 #include <check.h>
 #include <stdlib.h>
 #include <string.h>
-#include <modest-text-utils.h>
+#include "modest-text-utils.h"
 
 typedef struct {
        const gchar *original;
 
 typedef struct {
        const gchar *original;
@@ -47,7 +47,7 @@ typedef struct {
  *  - Test 4: Check issues in tests 1, 2 and 3 together
  *  - Test 5: Check with an empty address
  */
  *  - Test 4: Check issues in tests 1, 2 and 3 together
  *  - Test 5: Check with an empty address
  */
-START_TEST (test_display_address_regular)
+START_TEST (test_get_display_address_regular)
 {
        gint i;
        const StringPair tests[] = {
 {
        gint i;
        const StringPair tests[] = {
@@ -76,7 +76,7 @@ END_TEST
  * Test invalid usage of modest_text_utils_get_display_address
  *  - Test 1: Check with NULL address (should return NULL)
  */
  * Test invalid usage of modest_text_utils_get_display_address
  *  - Test 1: Check with NULL address (should return NULL)
  */
-START_TEST (test_display_address_invalid)
+START_TEST (test_get_display_address_invalid)
 {
        /* Test 1 */
        fail_unless (modest_text_utils_get_display_address (NULL) == NULL,
 {
        /* Test 1 */
        fail_unless (modest_text_utils_get_display_address (NULL) == NULL,
@@ -765,8 +765,8 @@ text_utils_suite (void)
 
        /* Tests case for "display adress" */
        tc = tcase_create ("display_adress");
 
        /* Tests case for "display adress" */
        tc = tcase_create ("display_adress");
-       tcase_add_test (tc, test_display_address_regular);
-       tcase_add_test (tc, test_display_address_invalid);
+       tcase_add_test (tc, test_get_display_address_regular);
+       tcase_add_test (tc, test_get_display_address_invalid);
        suite_add_tcase (suite, tc);
 
        /* Test case for "derived subject" */
        suite_add_tcase (suite, tc);
 
        /* Test case for "derived subject" */