+2007-03-21 [colin] 2.8.1cvs32
+
+ * claws-mail-40x40.png
+ * claws-mail-26x26.png
+ * src/account.c
+ * src/addressbook.c
+ * src/compose.c
+ * src/folderview.c
+ * src/folderview.h
+ * src/main.c
+ * src/mainwindow.c
+ * src/mainwindow.h
+ * src/messageview.c
+ * src/prefs_account.c
+ * src/prefs_common.c
+ * src/summary_search.c
+ * src/summaryview.c
+ * src/summaryview.h
+ * src/gtk/authors.h
+ * src/gtk/gtkutils.c
+ * src/gtk/gtkutils.h
+ * src/gtk/logwindow.c
+ * src/gtk/menu.c
+ * src/gtk/prefswindow.c
+ Add Maemo port (patch mainly by Jean-Luc Biort)
+ Add a new 'Little screen' layout to help on such
+ platforms (patch by me)
+ Make some default preferences different (more
+ adapted) on Maemo (patch by me)
+
2007-03-21 [wwp] 2.8.1cvs31
* src/prefs_logging.c
( cvs diff -u -r 1.1.4.6 -r 1.1.4.7 src/etpan/Makefile.am; cvs diff -u -r 1.1.4.74 -r 1.1.4.75 src/etpan/imap-thread.c; ) > 2.8.1cvs29.patchset
( cvs diff -u -r 1.155.2.54 -r 1.155.2.55 src/Makefile.am; cvs diff -u -r 1.60.2.29 -r 1.60.2.30 src/filtering.c; cvs diff -u -r 1.21.2.12 -r 1.21.2.13 src/filtering.h; cvs diff -u -r 1.213.2.136 -r 1.213.2.137 src/folder.c; cvs diff -u -r 1.207.2.151 -r 1.207.2.152 src/folderview.c; cvs diff -u -r 1.179.2.159 -r 1.179.2.160 src/imap.c; cvs diff -u -r 1.149.2.67 -r 1.149.2.68 src/inc.c; cvs diff -u -r 1.115.2.144 -r 1.115.2.145 src/main.c; cvs diff -u -r 1.274.2.177 -r 1.274.2.178 src/mainwindow.c; cvs diff -u -r 1.39.2.33 -r 1.39.2.34 src/mainwindow.h; cvs diff -u -r 1.75.2.38 -r 1.75.2.39 src/matcher.c; cvs diff -u -r 1.94.2.126 -r 1.94.2.127 src/messageview.c; cvs diff -u -r 1.101.2.36 -r 1.101.2.37 src/news.c; cvs diff -u -r 1.56.2.47 -r 1.56.2.48 src/pop.c; cvs diff -u -r 1.204.2.123 -r 1.204.2.124 src/prefs_common.c; cvs diff -u -r 1.103.2.77 -r 1.103.2.78 src/prefs_common.h; diff -u /dev/null src/prefs_logging.c; diff -u /dev/null src/prefs_logging.h; cvs diff -u -r 1.1.2.21 -r 1.1.2.22 src/prefs_other.c; cvs diff -u -r 1.150.2.93 -r 1.150.2.94 src/procmsg.c; cvs diff -u -r 1.17.2.37 -r 1.17.2.38 src/send_message.c; cvs diff -u -r 1.395.2.286 -r 1.395.2.287 src/summaryview.c; cvs diff -u -r 1.6.2.9 -r 1.6.2.10 src/common/log.c; cvs diff -u -r 1.4.2.5 -r 1.4.2.6 src/common/log.h; cvs diff -u -r 1.6.2.12 -r 1.6.2.13 src/common/nntp.c; cvs diff -u -r 1.23.2.13 -r 1.23.2.14 src/common/session.c; cvs diff -u -r 1.11.2.20 -r 1.11.2.21 src/common/smtp.c; cvs diff -u -r 1.13.2.27 -r 1.13.2.28 src/common/socket.c; cvs diff -u -r 1.1.4.75 -r 1.1.4.76 src/etpan/imap-thread.c; cvs diff -u -r 1.1.4.27 -r 1.1.4.28 src/gtk/logwindow.c; cvs diff -u -r 1.1.4.12 -r 1.1.4.13 src/gtk/logwindow.h; cvs diff -u -r 1.1.2.27 -r 1.1.2.28 src/plugins/bogofilter/bogofilter.c; cvs diff -u -r 1.18.2.48 -r 1.18.2.49 src/plugins/spamassassin/spamassassin.c; ) > 2.8.1cvs30.patchset
( cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/prefs_logging.c; cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/prefs_logging.h; ) > 2.8.1cvs31.patchset
+( diff -u /dev/null claws-mail-40x40.png; diff -u /dev/null claws-mail-26x26.png; cvs diff -u -r 1.61.2.60 -r 1.61.2.61 src/account.c; cvs diff -u -r 1.60.2.83 -r 1.60.2.84 src/addressbook.c; cvs diff -u -r 1.382.2.361 -r 1.382.2.362 src/compose.c; cvs diff -u -r 1.207.2.152 -r 1.207.2.153 src/folderview.c; cvs diff -u -r 1.20.2.18 -r 1.20.2.19 src/folderview.h; cvs diff -u -r 1.115.2.145 -r 1.115.2.146 src/main.c; cvs diff -u -r 1.274.2.178 -r 1.274.2.179 src/mainwindow.c; cvs diff -u -r 1.39.2.34 -r 1.39.2.35 src/mainwindow.h; cvs diff -u -r 1.94.2.127 -r 1.94.2.128 src/messageview.c; cvs diff -u -r 1.105.2.88 -r 1.105.2.89 src/prefs_account.c; cvs diff -u -r 1.204.2.124 -r 1.204.2.125 src/prefs_common.c; cvs diff -u -r 1.15.2.44 -r 1.15.2.45 src/summary_search.c; cvs diff -u -r 1.395.2.287 -r 1.395.2.288 src/summaryview.c; cvs diff -u -r 1.68.2.33 -r 1.68.2.34 src/summaryview.h; cvs diff -u -r 1.1.2.33 -r 1.1.2.34 src/gtk/authors.h; cvs diff -u -r 1.5.2.55 -r 1.5.2.56 src/gtk/gtkutils.c; cvs diff -u -r 1.4.2.32 -r 1.4.2.33 src/gtk/gtkutils.h; cvs diff -u -r 1.1.4.28 -r 1.1.4.29 src/gtk/logwindow.c; cvs diff -u -r 1.5.2.21 -r 1.5.2.22 src/gtk/menu.c; cvs diff -u -r 1.12.2.32 -r 1.12.2.33 src/gtk/prefswindow.c; ) > 2.8.1cvs32.patchset
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=31
+EXTRA_VERSION=32
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
AC_MSG_RESULT($ac_cv_enable_crash_dialog)
fi
+dnl Maemo platform
+AC_ARG_ENABLE(maemo,
+ [ --enable-maemo Build for the Maemo platform [default=no]],
+ [ac_cv_enable_maemo=$enableval], [ac_cv_enable_maemo=no])
+if test $ac_cv_enable_maemo = yes; then
+ AC_MSG_CHECKING([whether to build for Maemo])
+ if test $ac_cv_enable_maemo = yes; then
+ AC_DEFINE(MAEMO, 1, Build for Maemo)
+ fi
+ AC_MSG_RESULT($ac_cv_enable_maemo)
+fi
+
dnl Check for X-Face support
AC_ARG_ENABLE(compface,
[ --disable-compface Do not use compface (X-Face)],
echo "LibSM : $ac_cv_enable_libsm"
echo "Manual : $ac_cv_enable_manual"
echo "Plugins : $PLUGINS"
+echo "Maemo build : $ac_cv_enable_maemo"
echo "Config dir : $ac_cv_with_config_dir"
echo ""
echo "The binary will be installed in $prefix/bin"
gtk_window_set_modal (GTK_WINDOW (window), TRUE);
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (account_delete_event), NULL);
+#ifdef MAEMO
+ maemo_connect_key_press_to_mainwindow(GTK_WINDOW(window));
+#else
g_signal_connect (G_OBJECT (window), "key_press_event",
G_CALLBACK (account_key_pressed), NULL);
+#endif
MANAGE_WINDOW_SIGNALS_CONNECT (window);
gtk_widget_realize(window);
if (!geometry.min_height) {
geometry.min_width = 500;
- geometry.min_height = 350;
+ geometry.min_height = 380;
}
gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry,
edit_account.window = window;
edit_account.list_view = list_view;
edit_account.close_btn = close_btn;
+#ifdef MAEMO
+ maemo_window_full_screen_if_needed(GTK_WINDOW(edit_account.window));
+#endif
}
static void account_edit_prefs(GtkWidget *widget, gpointer data)
}
gtk_widget_show_all(addrbook.window);
+#ifdef MAEMO
+ maemo_window_full_screen_if_needed(GTK_WINDOW(addrbook.window));
+ maemo_connect_key_press_to_mainwindow(GTK_WINDOW(addrbook.window));
+#endif
if (!prefs_common.addressbook_use_editaddress_dialog)
addressbook_edit_person_widgetset_hide();
static gboolean attach_key_pressed (GtkWidget *widget,
GdkEventKey *event,
gpointer data);
-
static void compose_send_cb (gpointer data,
guint action,
GtkWidget *widget);
compose->tooltips = gtk_tooltips_new();
window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "compose");
+
gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
gtk_widget_set_size_request(window, -1, prefs_common.compose_height);
}
gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL,
&geometry, GDK_HINT_MIN_SIZE);
-
+
+#ifndef MAEMO
if (compose_force_window_origin)
gtk_widget_set_uposition(window, prefs_common.compose_x,
prefs_common.compose_y);
-
+#endif
g_signal_connect(G_OBJECT(window), "delete_event",
G_CALLBACK(compose_delete_cb), compose);
MANAGE_WINDOW_SIGNALS_CONNECT(window);
paned = gtk_vpaned_new();
gtk_paned_set_gutter_size(GTK_PANED(paned), 12);
gtk_container_add(GTK_CONTAINER(vbox2), paned);
+#ifdef MAEMO
+ if( maemo_mainwindow_is_fullscreen(mainwindow_get_mainwindow()->window) )
+ gtk_widget_set_size_request(edit_vbox, -1, mode == COMPOSE_NEW ? 300 : 280);
+ else
+ gtk_widget_set_size_request(edit_vbox, -1, mode == COMPOSE_NEW ? 250 : 230);
+ gtk_paned_add1(GTK_PANED(paned), edit_vbox);
+ gtk_paned_add2(GTK_PANED(paned), notebook);
+#else
gtk_paned_add1(GTK_PANED(paned), notebook);
gtk_paned_add2(GTK_PANED(paned), edit_vbox);
+#endif
gtk_widget_show_all(paned);
gtk_widget_realize(window);
} else {
gtk_widget_show(window);
+#ifdef MAEMO
+ maemo_window_full_screen_if_needed(GTK_WINDOW(window));
+ maemo_connect_key_press_to_mainwindow(GTK_WINDOW(window));
+#endif
}
return compose;
return FALSE;
}
+void folderview_close_opened(FolderView *folderview)
+{
+ if (folderview->opened) {
+ FolderItem *olditem;
+
+ olditem = gtk_ctree_node_get_row_data(folderview->ctree, folderview->opened);
+ if (olditem) {
+ gchar *buf = g_strdup_printf(_("Closing Folder %s..."),
+ olditem->path ? olditem->path:olditem->name);
+ /* will be null if we just moved the previously opened folder */
+ STATUSBAR_PUSH(folderview->mainwin, buf);
+ main_window_cursor_wait(folderview->mainwin);
+ g_free(buf);
+ summary_save_prefs_to_folderitem(folderview->summaryview, olditem);
+ summary_show(folderview->summaryview, NULL);
+ folder_item_close(olditem);
+ main_window_cursor_normal(folderview->mainwin);
+ STATUSBAR_POP(folderview->mainwin);
+ }
+ }
+ folderview->opened = NULL;
+}
static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
gint column, FolderView *folderview)
{
/* Save cache for old folder */
/* We don't want to lose all caches if sylpheed crashed */
- if (folderview->opened) {
- FolderItem *olditem;
-
- olditem = gtk_ctree_node_get_row_data(ctree, folderview->opened);
- if (olditem) {
- buf = g_strdup_printf(_("Closing Folder %s..."),
- olditem->path ? olditem->path:olditem->name);
- /* will be null if we just moved the previously opened folder */
- STATUSBAR_PUSH(folderview->mainwin, buf);
- main_window_cursor_wait(folderview->mainwin);
- g_free(buf);
- summary_save_prefs_to_folderitem(folderview->summaryview, olditem);
- summary_show(folderview->summaryview, NULL);
- folder_item_close(olditem);
- main_window_cursor_normal(folderview->mainwin);
- STATUSBAR_POP(folderview->mainwin);
- }
- }
+ folderview_close_opened(folderview);
/* CLAWS: set compose button type: news folder items
* always have a news folder as parent */
GdkDragContext *drag_context,
guint time,
FolderItem *item);
+void folderview_close_opened (FolderView *folderview);
#endif /* __FOLDERVIEW_H__ */
"Paul Mangan <paul@claws-mail.org>",
"Martin Schaaf <mascha1@users.sf.net>",
"Fabien Vantard <fzzzzz@gmail.com>",
+"Fabien Vantard <fzzzzz@gmail.com>",
NULL
};
"Fabio Junior Beneditto",
"M. Benkmann",
"Wilbert Berendsen",
+"Jean-Luc Biord",
"Eugene Brevdo",
"André Filipe de Assunção e Brito",
"Henrik Carlqvist",
return gtk_tree_model_iter_nth_child(model, iter, NULL, count - 1);
}
+#ifdef MAEMO
+HildonWindow *gtkut_window_new (GtkWindowType type,
+ const gchar *class)
+{
+ HildonWindow *window = HILDON_WINDOW(hildon_window_new());
+ gtk_window_set_role(GTK_WINDOW(window), class);
+ hildon_program_add_window(hildon_program(), window);
+ return window;
+}
+#else
GtkWidget *gtkut_window_new (GtkWindowType type,
const gchar *class)
{
gtk_window_set_role(GTK_WINDOW(window), class);
return window;
}
+#endif
# include <wchar.h>
#endif
+#ifdef MAEMO
+#include <hildon-widgets/hildon-program.h>
+#include <gtk/gtkmain.h>
+#endif
+
typedef struct _ComboButton ComboButton;
struct _ComboButton
GtkWidget *label_window_create(const gchar *str);
void gtkut_window_popup (GtkWidget *window);
+#ifdef MAEMO
+HildonWindow *gtkut_window_new (GtkWindowType type,
+ const gchar *class);
+#else
GtkWidget *gtkut_window_new (GtkWindowType type,
const gchar *class);
+#endif
void gtkut_widget_get_uposition (GtkWidget *widget,
gint *px,
gtk_text_view_scroll_mark_onscreen(text, mark);
gtk_widget_show(logwin->window);
+#ifdef MAEMO
+ maemo_window_full_screen_if_needed(GTK_WINDOW(logwin->window));
+ maemo_connect_key_press_to_mainwindow(GTK_WINDOW(logwin->window));
+#endif
}
static void log_window_jump_to_error(LogWindow *logwin)
#include "menu.h"
#include "utils.h"
+#ifdef MAEMO
+#include <hildon-widgets/hildon-program.h>
+#include <gtk/gtkmain.h>
+#endif
+
static void connect_accel_change_signals(GtkWidget* widget, GtkWidget *wid2) ;
guint n_entries, const gchar *path, gpointer data)
{
GtkItemFactory *factory;
-
+ GtkWidget *menubar;
+
+#ifdef MAEMO
+ factory = gtk_item_factory_new(GTK_TYPE_MENU, path, NULL);
+#else
factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, path, NULL);
+#endif
gtk_item_factory_set_translate_func(factory, menu_translate,
NULL, NULL);
gtk_item_factory_create_items(factory, n_entries, entries, data);
gtk_window_add_accel_group (GTK_WINDOW (window), factory->accel_group);
- return gtk_item_factory_get_widget(factory, path);
+ menubar = gtk_item_factory_get_widget(factory, path);
+#ifdef MAEMO
+ hildon_window_set_menu(HILDON_WINDOW(window), GTK_MENU(menubar));
+#endif
+ return menubar;
}
GtkWidget *menu_create_items(GtkItemFactoryEntry *entries,
G_CALLBACK(apply_button_clicked), prefswindow);
g_signal_connect(G_OBJECT(prefswindow->window), "delete_event",
G_CALLBACK(window_closed), prefswindow);
+
+#ifdef MAEMO
+ maemo_connect_key_press_to_mainwindow(GTK_WINDOW(prefswindow->window));
+#else
g_signal_connect(G_OBJECT(prefswindow->window), "key_press_event",
G_CALLBACK(prefswindow_key_pressed), &(prefswindow->window));
+#endif
+
/* connect to callback only if we hhave non-NULL pointers to store size to */
if (prefswindow->save_width && prefswindow->save_height) {
g_signal_connect(G_OBJECT(prefswindow->window), "size_allocate",
geometry.min_height = 550;
}
}
-
gtk_window_set_geometry_hints(GTK_WINDOW(prefswindow->window), NULL, &geometry,
GDK_HINT_MIN_SIZE);
if (prefswindow->save_width && prefswindow->save_height) {
}
gtk_widget_show(prefswindow->window);
+#ifdef MAEMO
+ maemo_window_full_screen_if_needed(GTK_WINDOW(prefswindow->window));
+#endif
}
void prefswindow_open(const gchar *title, GSList *prefs_pages, gpointer data,
#include "timing.h"
+#ifdef MAEMO
+#include <hildon-widgets/hildon-program.h>
+#include <gtk/gtkmain.h>
+#include <libosso.h>
+
+#define OSSO_EXAMPLE_NAME "claws-mail"
+#define OSSO_EXAMPLE_SERVICE "org.maemo."OSSO_EXAMPLE_NAME
+#define OSSO_EXAMPLE_OBJECT "/org/maemo/"OSSO_EXAMPLE_NAME
+#define OSSO_EXAMPLE_IFACE "org.maemo."OSSO_EXAMPLE_NAME
+
+typedef struct _AppData AppData;
+struct _AppData {
+ HildonProgram *program;
+ HildonWindow *window;
+ osso_context_t *osso_context;
+};
+#endif
+
gchar *prog_version;
gchar *argv0;
}
static MainWindow *static_mainwindow;
+
+#ifdef MAEMO
+static HildonProgram *static_hildonprogram;
+void exit_event_handler(gboolean die_now, gpointer data)
+{
+ AppData *appdata;
+ appdata = (AppData *) data;
+ /* Do whatever application needs to do before exiting */
+ exit_claws(static_mainwindow);
+ hildon_banner_show_information(GTK_WIDGET(appdata->window), NULL,
+ _("Exiting..."));
+
+}
+
+/* Callback for normal D-BUS messages */
+gint dbus_req_handler(const gchar * interface, const gchar * method,
+ GArray * arguments, gpointer data,
+ osso_rpc_t * retval)
+{
+ AppData *appdata;
+ appdata = (AppData *) data;
+
+ osso_system_note_infoprint(appdata->osso_context, method, retval);
+ osso_rpc_free_val(retval);
+
+ return OSSO_OK;
+}
+#endif
static gboolean emergency_exit = FALSE;
#ifdef HAVE_STARTUP_NOTIFICATION
int main(int argc, char *argv[])
{
+#ifdef MAEMO
+ osso_context_t *osso_context;
+ osso_return_t result;
+#endif
gchar *userrc;
MainWindow *mainwin;
FolderView *folderview;
gtk_set_locale();
gtk_init(&argc, &argv);
+#ifdef MAEMO
+ osso_context = osso_initialize(PACKAGE, VERSION, TRUE, NULL);
+ if (osso_context == NULL) {
+ return OSSO_ERROR;
+ }
+ static_hildonprogram = HILDON_PROGRAM(hildon_program_get_instance());
+#endif
gdk_rgb_init();
gtk_widget_set_default_colormap(gdk_rgb_get_colormap());
gtk_widget_set_default_visual(gdk_rgb_get_visual());
news_gtk_init();
mainwin = main_window_create();
+#ifdef MAEMO
+ AppData *appdata;
+ appdata = g_new0(AppData, 1);
+ appdata->program = static_hildonprogram;
+ appdata->window = mainwin->window;
+ appdata->osso_context = osso_context;
+ result = osso_rpc_set_cb_f(appdata->osso_context,
+ OSSO_EXAMPLE_SERVICE,
+ OSSO_EXAMPLE_OBJECT,
+ OSSO_EXAMPLE_IFACE,
+ dbus_req_handler, appdata);
+ if (result != OSSO_OK) {
+ return OSSO_ERROR;
+ }
+ /* Add handler for Exit D-BUS messages */
+ result = osso_application_set_exit_cb(appdata->osso_context,
+ exit_event_handler,
+ (gpointer) appdata);
+ if (result != OSSO_OK) {
+ return OSSO_ERROR;
+ }
+#endif
manage_window_focus_in(mainwin->window, NULL, NULL);
folderview = mainwin->folderview;
gtk_main();
+#ifdef MAEMO
+ osso_deinitialize(osso_context);
+#endif
exit_claws(mainwin);
return 0;
sigprocmask(SIG_UNBLOCK, &mask, 0);
#endif /* !G_OS_WIN32 */
}
+
+#ifdef MAEMO
+HildonProgram *hildon_program()
+{
+ return static_hildonprogram;
+}
+#endif
{N_("/_View/Layout/_Three columns"), NULL, set_layout_cb, VERTICAL_LAYOUT, "/View/Layout/Standard"},
{N_("/_View/Layout/_Wide message"), NULL, set_layout_cb, WIDE_LAYOUT, "/View/Layout/Standard"},
{N_("/_View/Layout/W_ide message list"),NULL, set_layout_cb, WIDE_MSGLIST_LAYOUT, "/View/Layout/Standard"},
+ {N_("/_View/Layout/_Little screen"), NULL, set_layout_cb, LITTLE_LAYOUT, "/View/Layout/Standard"},
{N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_View/_Sort"), NULL, NULL, 0, "<Branch>"},
{N_("/_View/_Sort/by _number"), NULL, sort_summary_cb, SORT_BY_NUMBER, "<RadioItem>"},
GDK_1+i, GDK_CONTROL_MASK,
GTK_ACCEL_LOCKED | GTK_ACCEL_VISIBLE);
}
-
gtk_widget_show(menu);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(label_menuitem), menu);
mainwin->colorlabel_menu = menu;
G_CALLBACK(mainwindow_visibility_event_cb), mainwin);
gtk_widget_add_events(GTK_WIDGET(window), GDK_VISIBILITY_NOTIFY_MASK);
- if (prefs_common.layout_mode == VERTICAL_LAYOUT)
+ if (prefs_common.layout_mode == VERTICAL_LAYOUT ||
+ prefs_common.layout_mode == LITTLE_LAYOUT) {
summary_relayout(mainwin->summaryview);
+ }
gtk_widget_show(mainwin->window);
gtk_widget_unref(message_wid);
}
-static void mainwin_reset_paned(GtkPaned *paned)
+void mainwindow_reset_paned(GtkPaned *paned)
{
gint min, max, mid;
+
+ if (gtk_paned_get_child1(GTK_PANED(paned)))
+ gtk_widget_show(gtk_paned_get_child1(GTK_PANED(paned)));
+ if (gtk_paned_get_child2(GTK_PANED(paned)))
+ gtk_widget_show(gtk_paned_get_child2(GTK_PANED(paned)));
+
+GTK_EVENTS_FLUSH();
g_object_get (G_OBJECT(paned),
"min-position",
&min, NULL);
"max-position",
&max, NULL);
mid = (min+max)/2;
-
gtk_paned_set_position(GTK_PANED(paned), mid);
}
+static void mainwin_paned_show_first(GtkPaned *paned)
+{
+ gint max;
+ g_object_get (G_OBJECT(paned),
+ "max-position",
+ &max, NULL);
+
+ if (gtk_paned_get_child1(GTK_PANED(paned)))
+ gtk_widget_show(gtk_paned_get_child1(GTK_PANED(paned)));
+ if (gtk_paned_get_child2(GTK_PANED(paned)))
+ gtk_widget_hide(gtk_paned_get_child2(GTK_PANED(paned)));
+ gtk_paned_set_position(GTK_PANED(paned), max);
+}
+
+static void mainwin_paned_show_last(GtkPaned *paned)
+{
+ gint min;
+ g_object_get (G_OBJECT(paned),
+ "min-position",
+ &min, NULL);
+
+ if (gtk_paned_get_child1(GTK_PANED(paned)))
+ gtk_widget_hide(gtk_paned_get_child1(GTK_PANED(paned)));
+ if (gtk_paned_get_child2(GTK_PANED(paned)))
+ gtk_widget_show(gtk_paned_get_child2(GTK_PANED(paned)));
+ gtk_paned_set_position(GTK_PANED(paned), min);
+}
+
void main_window_toggle_message_view(MainWindow *mainwin)
{
SummaryView *summaryview = mainwin->summaryview;
switch (prefs_common.layout_mode) {
case NORMAL_LAYOUT:
case VERTICAL_LAYOUT:
+ case LITTLE_LAYOUT:
ppaned = mainwin->vpaned;
container = mainwin->hpaned;
if (ppaned->parent != NULL) {
GtkWidget *vbox_body = mainwin->vbox_body;
GtkItemFactory *ifactory = mainwin->menu_factory;
GtkWidget *menuitem;
-
+ gboolean first_set = (mainwin->hpaned == NULL);
debug_print("Setting widgets... ");
- gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->folderview),
+ if (layout_mode == LITTLE_LAYOUT && first_set) {
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->folderview),
prefs_common.folderview_width,
prefs_common.folderview_height);
- gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->summaryview),
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->summaryview),
+ 0,0);
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->messageview),
+ 0,0);
+ } else {
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->folderview),
+ prefs_common.folderview_width,
+ prefs_common.folderview_height);
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->summaryview),
prefs_common.summaryview_width,
prefs_common.summaryview_height);
- gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->messageview),
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->messageview),
prefs_common.msgview_width,
prefs_common.msgview_height);
+ }
mainwin->messageview->statusbar = mainwin->statusbar;
mainwin->messageview->statusbar_cid = mainwin->messageview_cid;
gtk_widget_destroy(mainwin->hpaned);
}
- menu_set_sensitive(ifactory, "/View/Show or hide/Message view", (layout_mode != WIDE_MSGLIST_LAYOUT));
+ menu_set_sensitive(ifactory, "/View/Show or hide/Message view",
+ (layout_mode != WIDE_MSGLIST_LAYOUT && layout_mode != LITTLE_LAYOUT));
switch (layout_mode) {
case VERTICAL_LAYOUT:
case NORMAL_LAYOUT:
+ case LITTLE_LAYOUT:
hpaned = gtk_hpaned_new();
if (layout_mode == VERTICAL_LAYOUT)
vpaned = gtk_hpaned_new();
gtk_paned_add2(GTK_PANED(vpaned),
GTK_WIDGET_PTR(mainwin->messageview));
gtk_widget_show(vpaned);
+ if (layout_mode == LITTLE_LAYOUT && first_set) {
+ mainwin_paned_show_first(GTK_PANED(hpaned));
+ }
gtk_widget_queue_resize(vpaned);
break;
case WIDE_LAYOUT:
mainwin->hpaned = hpaned;
mainwin->vpaned = vpaned;
+ if (layout_mode == LITTLE_LAYOUT) {
+ if (mainwin->messageview->visible)
+ main_window_toggle_message_view(mainwin);
+ }
+
+ if (layout_mode == LITTLE_LAYOUT && first_set) {
+ gtk_widget_realize(mainwin->window);
+ gtk_widget_realize(mainwin->folderview->ctree);
+ gtk_widget_realize(mainwin->summaryview->hbox);
+ gtk_widget_realize(mainwin->summaryview->hbox_l);
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->folderview),
+ prefs_common.folderview_width,
+ prefs_common.folderview_height);
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->summaryview),
+ 0,0);
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->messageview),
+ 0,0);
+ gtk_widget_set_size_request(GTK_WIDGET(mainwin->window),
+ prefs_common.mainwin_width,
+ prefs_common.mainwin_height);
+ gtk_paned_set_position(GTK_PANED(mainwin->hpaned), 800);
+ }
/* remove headerview if not in prefs */
headerview_set_visibility(mainwin->messageview->headerview,
prefs_common.display_header_pane);
case WIDE_MSGLIST_LAYOUT:
SET_CHECK_MENU_ACTIVE("/View/Layout/Wide message list", TRUE);
break;
+ case LITTLE_LAYOUT:
+ SET_CHECK_MENU_ACTIVE("/View/Layout/Little screen", TRUE);
+ break;
}
#undef SET_CHECK_MENU_ACTIVE
gpointer data)
{
MainWindow *mainwin = (MainWindow *)data;
-
main_window_get_size(mainwin);
}
GtkWidget *widget)
{
LayoutType layout_mode = action;
-
+ LayoutType old_layout_mode = prefs_common.layout_mode;
if (mainwin->menu_lock_count) {
return;
}
return;
}
- if (!mainwin->messageview->visible)
+ if (!mainwin->messageview->visible && layout_mode != LITTLE_LAYOUT)
+ main_window_toggle_message_view(mainwin);
+ else if (mainwin->messageview->visible && layout_mode == LITTLE_LAYOUT)
main_window_toggle_message_view(mainwin);
main_window_separation_change(mainwin, layout_mode);
-
- mainwin_reset_paned(GTK_PANED(mainwin->vpaned));
+ mainwindow_reset_paned(GTK_PANED(mainwin->vpaned));
+ if (old_layout_mode == LITTLE_LAYOUT && layout_mode != LITTLE_LAYOUT) {
+ mainwindow_reset_paned(GTK_PANED(mainwin->hpaned));
+ }
+ if (old_layout_mode != LITTLE_LAYOUT && layout_mode == LITTLE_LAYOUT) {
+ mainwin_paned_show_first(GTK_PANED(mainwin->hpaned));
+ mainwindow_exit_folder(mainwin);
+ }
summary_relayout(mainwin->summaryview);
}
folderview_select_next_unread(mainwin->folderview, TRUE);
}
break;
+#ifdef MAEMO
+ case GDK_F6:
+ if (maemo_mainwindow_is_fullscreen(widget)) {
+ gtk_window_unfullscreen(GTK_WINDOW(widget));
+ } else {
+ gtk_window_fullscreen(GTK_WINDOW(widget));
+ }
+ break;
+#endif
default:
break;
}
g_free(tmp);
}
+
+void mainwindow_exit_folder(MainWindow *mainwin) {
+ if (prefs_common.layout_mode == LITTLE_LAYOUT) {
+ folderview_close_opened(mainwin->folderview);
+ mainwin_paned_show_first(GTK_PANED(mainwin->hpaned));
+ mainwin->in_folder = FALSE;
+ }
+}
+
+void mainwindow_enter_folder(MainWindow *mainwin) {
+ if (prefs_common.layout_mode == LITTLE_LAYOUT) {
+ mainwin_paned_show_last(GTK_PANED(mainwin->hpaned));
+ mainwin->in_folder = TRUE;
+ }
+}
+
+#ifdef MAEMO
+gboolean maemo_mainwindow_is_fullscreen(GtkWidget *widget)
+{
+ gint w, h;
+ gtk_window_get_size(GTK_WINDOW(widget), &w, &h);
+ return (w == 800);
+}
+
+void maemo_window_full_screen_if_needed (GtkWindow *window)
+{
+ if (maemo_mainwindow_is_fullscreen(mainwindow_get_mainwindow()->window)) {
+ gtk_window_fullscreen(GTK_WINDOW(window));
+ }
+}
+
+void maemo_connect_key_press_to_mainwindow (GtkWindow *window)
+{
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(mainwindow_key_pressed), mainwindow_get_mainwindow());
+}
+#endif
NORMAL_LAYOUT = 0,
VERTICAL_LAYOUT = 1 << 0,
WIDE_LAYOUT = 1 << 1,
- WIDE_MSGLIST_LAYOUT = 1 << 2
+ WIDE_MSGLIST_LAYOUT = 1 << 2,
+ LITTLE_LAYOUT
} LayoutType;
typedef enum
#ifdef HAVE_LIBSM
gpointer smc_conn;
#endif
+ gboolean in_folder;
};
MainWindow *main_window_create (void);
void mainwindow_jump_to (const gchar *target);
void mainwindow_show_error (void);
void mainwindow_clear_error (MainWindow *mainwin);
-gboolean mainwindow_is_obscured (void);
+gboolean mainwindow_is_obscured (void);
+void mainwindow_exit_folder (MainWindow *mainwin);
+void mainwindow_enter_folder (MainWindow *mainwin);
+void mainwindow_reset_paned (GtkPaned *paned);
+
+#ifdef MAEMO
+gboolean maemo_mainwindow_is_fullscreen (GtkWidget *widget);
+void maemo_window_full_screen_if_needed (GtkWindow *window);
+void maemo_connect_key_press_to_mainwindow (GtkWindow *window);
+#endif
+
#endif /* __MAINWINDOW_H__ */
msgview);
g_signal_connect(G_OBJECT(window), "delete_event",
G_CALLBACK(messageview_delete_cb), msgview);
+#ifdef MAEMO
+ maemo_connect_key_press_to_mainwindow(GTK_WINDOW(window));
+#else
g_signal_connect(G_OBJECT(window), "key_press_event",
G_CALLBACK(key_pressed), msgview);
-
+#endif
messageview_add_toolbar(msgview, window);
if (show) {
}
g_free(file);
+#ifdef MAEMO
+ maemo_window_full_screen_if_needed(GTK_WINDOW(messageview->window));
+#endif
return 0;
}
void messageview_clear(MessageView *messageview)
{
+ if (!messageview)
+ return;
procmsg_msginfo_free(messageview->msginfo);
messageview->msginfo = NULL;
messageview->filtered = FALSE;
debug_print("destroy messageview\n");
messageview_list = g_list_remove(messageview_list, messageview);
+ if (messageview->mainwin->summaryview->messageview == messageview)
+ messageview->mainwin->summaryview->messageview = NULL;
+
+ if (messageview->mainwin->summaryview->ext_messageview == messageview)
+ messageview->mainwin->summaryview->ext_messageview = NULL;
+
if (!messageview->deferred_destroy) {
hooks_unregister_hook(MSGINFO_UPDATE_HOOKLIST,
messageview->msginfo_update_callback_id);
&receive.rmmail_checkbtn,
prefs_set_data_from_toggle, prefs_set_toggle},
+#ifndef MAEMO
{"message_leave_time", "7", &tmp_ac_prefs.msg_leave_time, P_INT,
&receive.leave_time_entry,
prefs_set_data_from_entry, prefs_set_entry},
-
+#else
+ {"message_leave_time", "30", &tmp_ac_prefs.msg_leave_time, P_INT,
+ &receive.leave_time_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+#endif
{"get_all_mail", "FALSE", &tmp_ac_prefs.getall, P_BOOL,
&receive.getall_checkbtn,
prefs_set_data_from_toggle, prefs_set_toggle},
&prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
{"normal_font_gtk2", "Sans 9",
&prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
-
/* Message */
{"attach_save_directory", NULL,
&prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
P_BOOL, NULL, NULL, NULL},
{"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
NULL, NULL, NULL},
- {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
+ {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
NULL, NULL, NULL},
{"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
NULL, NULL, NULL},
NULL, NULL, NULL},
{"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
P_BOOL, NULL, NULL, NULL},
- {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
+ {"send_dialog_mode", "1", &prefs_common.send_dialog_mode, P_ENUM,
NULL, NULL, NULL},
{"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
NULL, NULL, NULL},
&prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
/* new fonts */
+#ifndef MAEMO
{"widget_font_gtk2", NULL,
&SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
{"message_font_gtk2", "Monospace 9",
&SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
{"normal_font_gtk2", "Sans 9",
&SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
-
+#else
+ {"widget_font_gtk2", NULL,
+ &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
+ {"message_font_gtk2", "Monospace 8",
+ &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
+ {"print_font_gtk2", "Monospace 8",
+ &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
+ {"small_font_gtk2", "Sans 8",
+ &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
+ {"normal_font_gtk2", "Sans 8",
+ &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
+#endif
/* custom colors */
{"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
NULL, NULL, NULL},
{"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
NULL, NULL, NULL},
+#ifndef MAEMO
{"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
NULL, NULL, NULL},
+#else
+ {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
+ NULL, NULL, NULL},
+#endif
{"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
NULL, NULL, NULL},
{"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
NULL, NULL, NULL},
+#ifndef MAEMO
{"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
NULL, NULL, NULL},
-
+#else
+ {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
+ NULL, NULL, NULL},
+#endif
{"summary_col_show_mark", "TRUE",
&prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
{"summary_col_show_unread", "TRUE",
&prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
- {"summary_col_show_mime", "TRUE",
- &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
{"summary_col_show_subject", "TRUE",
&prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
{"summary_col_show_from", "TRUE",
&prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
{"summary_col_show_date", "TRUE",
&prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
+ {"summary_col_show_mime", "TRUE",
+ &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
{"summary_col_show_size", "TRUE",
&prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
{"summary_col_show_number", "FALSE",
&prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
{"summary_col_size_mime", "10",
&prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
+#ifndef MAEMO
{"summary_col_size_subject", "200",
&prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
{"summary_col_size_from", "120",
&prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
{"summary_col_size_to", "120",
&prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
+#else
+ {"summary_col_size_subject", "300",
+ &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
+ {"summary_col_size_from", "150",
+ &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
+ {"summary_col_size_to", "150",
+ &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
+
+#endif
{"summary_col_size_date", "118",
&prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
{"summary_col_size_size", "45",
{"folder_col_pos_total", "3",
&prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
+#ifndef MAEMO
{"folder_col_size_folder", "120",
&prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
{"folder_col_size_new", "32",
&prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
{"folder_col_size_total", "32",
&prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
-
+#else
+ {"folder_col_size_folder", "400",
+ &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
+ {"folder_col_size_new", "32",
+ &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
+ {"folder_col_size_unread", "32",
+ &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
+ {"folder_col_size_total", "32",
+ &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
+#endif
{"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
NULL, NULL, NULL},
{"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
NULL, NULL, NULL},
{"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
NULL, NULL, NULL},
+#ifndef MAEMO
{"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
NULL, NULL, NULL},
{"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
NULL, NULL, NULL},
{"compose_height", "560", &prefs_common.compose_height, P_INT,
NULL, NULL, NULL},
+#else
+ {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
+ NULL, NULL, NULL},
+ {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
+ NULL, NULL, NULL},
+ {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
+ NULL, NULL, NULL},
+ {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
+ NULL, NULL, NULL},
+ {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
+ NULL, NULL, NULL},
+ {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
+ NULL, NULL, NULL},
+ {"compose_width", "700", &prefs_common.compose_width, P_INT,
+ NULL, NULL, NULL},
+ {"compose_height", "470", &prefs_common.compose_height, P_INT,
+ NULL, NULL, NULL},
+#endif
{"compose_x", "0", &prefs_common.compose_x, P_INT,
NULL, NULL, NULL},
{"compose_y", "0", &prefs_common.compose_y, P_INT,
&SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
/* Interface */
+#ifndef MAEMO
{"layout_mode", "0", &prefs_common.layout_mode, P_INT,
NULL, NULL, NULL},
-
+#else
+ {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
+ NULL, NULL, NULL},
+#endif
/* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
NULL, NULL, NULL}, */
{"always_show_message_when_selected", "FALSE",
NULL, NULL, NULL},
{"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
NULL, NULL, NULL},
+#ifndef MAEMO
{"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
NULL, NULL, NULL},
+#else
+ {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
+ NULL, NULL, NULL},
+#endif
{"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
P_INT, NULL, NULL, NULL},
gtk_container_set_border_width(GTK_CONTAINER (window), 8);
g_signal_connect(G_OBJECT(window), "delete_event",
G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+#ifdef MAEMO
+ maemo_connect_key_press_to_mainwindow(GTK_WINDOW(window));
+#else
g_signal_connect(G_OBJECT(window), "key_press_event",
G_CALLBACK(key_pressed), NULL);
+#endif
MANAGE_WINDOW_SIGNALS_CONNECT(window);
vbox1 = gtk_vbox_new (FALSE, 0);
search_window.stop_btn = stop_btn;
search_window.matcher_list = NULL;
search_window.is_searching = is_searching;
+#ifdef MAEMO
+ maemo_window_full_screen_if_needed(GTK_WINDOW(search_window.window));
+#endif
}
static void summary_search_execute(gboolean backward, gboolean search_all)
static gint summary_toggle_pressed (GtkWidget *eventbox,
GdkEventButton *event,
SummaryView *summaryview);
+static gint summary_folder_eventbox_pressed
+ (GtkWidget *eventbox,
+ GdkEventButton *event,
+ SummaryView *summaryview);
static gboolean summary_button_pressed (GtkWidget *ctree,
GdkEventButton *event,
SummaryView *summaryview);
gint y,
guint time,
SummaryView *summaryview);
-
+static void summary_drag_end(GtkWidget *widget,
+ GdkDragContext *drag_context,
+ SummaryView *summaryview);
/* custom compare functions for sorting */
static gint summary_cmp_by_mark (GtkCList *clist,
MsgInfo *msg);
static gboolean summary_update_msg (gpointer source, gpointer data);
-static gboolean summary_update_folder_item_name(gpointer source, gpointer data);
+static gboolean summary_update_folder_item_hook(gpointer source, gpointer data);
+static gboolean summary_update_folder_hook(gpointer source, gpointer data);
GtkTargetEntry summary_drag_types[2] =
{
GtkWidget *toggle_arrow;
GtkWidget *popupmenu;
GtkWidget *toggle_search;
- GtkTooltips *search_tip;
GtkItemFactory *popupfactory;
gint n_entries;
QuickSearch *quicksearch;
debug_print("Creating summary view...\n");
summaryview = g_new0(SummaryView, 1);
+ summaryview->tips = gtk_tooltips_new();
#define SUMMARY_VBOX_SPACING 3
vbox = gtk_vbox_new(FALSE, SUMMARY_VBOX_SPACING);
stat_box2 = gtk_hbox_new(FALSE, 0);
gtk_widget_show(stat_box2);
- search_tip = gtk_tooltips_new();
toggle_search = gtk_toggle_button_new();
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_search),
prefs_common.show_searchbar);
gtk_widget_show(toggle_search);
- gtk_tooltips_set_tip(GTK_TOOLTIPS(search_tip),
+ gtk_tooltips_set_tip(GTK_TOOLTIPS(summaryview->tips),
toggle_search,
_("Toggle quick search bar"), NULL);
hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, summary_update_msg, (gpointer) summaryview);
summaryview->folder_item_update_callback_id =
hooks_register_hook(FOLDER_ITEM_UPDATE_HOOKLIST,
- summary_update_folder_item_name,
+ summary_update_folder_item_hook,
+ (gpointer) summaryview);
+ summaryview->folder_update_callback_id =
+ hooks_register_hook(FOLDER_UPDATE_HOOKLIST,
+ summary_update_folder_hook,
(gpointer) summaryview);
summaryview->target_list = gtk_target_list_new(summary_drag_types, 2);
else
quicksearch_hide(quicksearch);
- if (prefs_common.layout_mode == WIDE_MSGLIST_LAYOUT)
+ if (prefs_common.layout_mode == WIDE_MSGLIST_LAYOUT ||
+ prefs_common.layout_mode == LITTLE_LAYOUT)
gtk_widget_hide(summaryview->toggle_eventbox);
return summaryview;
gtk_box_pack_end(GTK_BOX(summaryview->stat_box), summaryview->statlabel_msgs, FALSE, FALSE, 4);
gtk_widget_show_all(summaryview->stat_box);
gtk_widget_show_all(summaryview->stat_box2);
- if (prefs_common.layout_mode == WIDE_MSGLIST_LAYOUT)
+ if (prefs_common.layout_mode == WIDE_MSGLIST_LAYOUT ||
+ prefs_common.layout_mode == LITTLE_LAYOUT)
gtk_widget_hide(summaryview->toggle_eventbox);
else
gtk_widget_show(summaryview->toggle_eventbox);
break;
case VERTICAL_LAYOUT:
+ case LITTLE_LAYOUT:
gtk_box_pack_start(GTK_BOX(summaryview->stat_box), summaryview->hbox_l, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(summaryview->stat_box2), summaryview->statlabel_msgs, FALSE, FALSE, 4);
gtk_widget_show_all(summaryview->stat_box);
gtk_widget_show_all(summaryview->stat_box2);
- gtk_widget_show(summaryview->toggle_eventbox);
+ if (prefs_common.layout_mode == LITTLE_LAYOUT)
+ gtk_widget_hide(summaryview->toggle_eventbox);
+ else
+ gtk_widget_show(summaryview->toggle_eventbox);
+
break;
}
gtk_widget_unref(summaryview->hbox_l);
pango_font_description_free(font_desc);
}
+static void summary_set_folder_pixmap(SummaryView *summaryview, StockPixmap icon)
+{
+ GtkWidget *pixmap;
+ if (!summaryview->folder_pixmap_eventbox) {
+ summaryview->folder_pixmap_eventbox = gtk_event_box_new();
+ gtk_widget_show(summaryview->folder_pixmap_eventbox);
+ gtk_box_pack_start(GTK_BOX(summaryview->hbox_l), summaryview->folder_pixmap_eventbox, FALSE, FALSE, 4);
+ gtk_box_reorder_child(GTK_BOX(summaryview->hbox_l), summaryview->folder_pixmap_eventbox, 0); /* search_toggle before */
+ g_signal_connect(G_OBJECT(summaryview->folder_pixmap_eventbox), "button_press_event",
+ G_CALLBACK(summary_folder_eventbox_pressed),
+ summaryview);
+ }
+ if (summaryview->folder_pixmap)
+ gtk_widget_destroy(summaryview->folder_pixmap);
+
+ pixmap = stock_pixmap_widget(summaryview->hbox_l, icon);
+ gtk_container_add(GTK_CONTAINER(summaryview->folder_pixmap_eventbox), pixmap);
+ gtk_widget_show(pixmap);
+ summaryview->folder_pixmap = pixmap;
+}
+
void summary_init(SummaryView *summaryview)
{
GtkWidget *pixmap;
summary_set_fonts(summaryview);
- pixmap = stock_pixmap_widget(summaryview->hbox_l, STOCK_PIXMAP_DIR_OPEN);
- gtk_box_pack_start(GTK_BOX(summaryview->hbox_l), pixmap, FALSE, FALSE, 4);
- gtk_box_reorder_child(GTK_BOX(summaryview->hbox_l), pixmap, 0);
- gtk_widget_show(pixmap);
- summaryview->folder_pixmap = pixmap;
+ summary_set_folder_pixmap(summaryview, STOCK_PIXMAP_DIR_OPEN);
pixmap = stock_pixmap_widget(summaryview->hbox, STOCK_PIXMAP_QUICKSEARCH);
gtk_container_add (GTK_CONTAINER(summaryview->toggle_search), pixmap);
is_refresh = (item == summaryview->folder_item) ? TRUE : FALSE;
- if (!is_refresh)
+ if (!is_refresh) {
main_create_mailing_list_menu (summaryview->mainwin, NULL);
-
+ if (prefs_common.layout_mode == LITTLE_LAYOUT) {
+ if (item) {
+ mainwindow_enter_folder(summaryview->mainwin);
+ gtk_widget_grab_focus(summaryview->ctree);
+ }
+ }
+ }
if (!prefs_common.summary_quicksearch_sticky
&& !prefs_common.summary_quicksearch_recurse
&& !quicksearch_is_running(summaryview->quicksearch)
if (!new_window) {
if (summaryview->displayed == row)
return;
- else
+ else if (summaryview->messageview)
summaryview->messageview->filtered = FALSE;
}
g_return_if_fail(row != NULL);
g_return_if_fail(msginfo);
- if (new_window) {
+ if (new_window && prefs_common.layout_mode != LITTLE_LAYOUT) {
MessageView *msgview;
msgview = messageview_create_with_new_window(summaryview->mainwin);
} else {
MessageView *msgview;
- msgview = summaryview->messageview;
- summaryview->last_displayed = summaryview->displayed;
- summaryview->displayed = row;
- if (!messageview_is_visible(msgview)) {
- main_window_toggle_message_view(summaryview->mainwin);
- GTK_EVENTS_FLUSH();
+ if (prefs_common.layout_mode == LITTLE_LAYOUT) {
+ if (summaryview->ext_messageview == NULL)
+ summaryview->ext_messageview = messageview_create_with_new_window(summaryview->mainwin);
+ else
+ gtkut_window_popup(summaryview->ext_messageview->window);
+ msgview = summaryview->ext_messageview;
+ summaryview->last_displayed = summaryview->displayed;
+ summaryview->displayed = row;
+ val = messageview_show(msgview, msginfo, all_headers);
+ if (GTK_CLIST(msgview->mimeview->ctree)->row_list == NULL)
+ gtk_widget_grab_focus(summaryview->ctree);
+ gtkut_ctree_node_move_if_on_the_edge(ctree, row,
+ GTK_CLIST(summaryview->ctree)->focus_row);
+ } else {
+ msgview = summaryview->messageview;
+ summaryview->last_displayed = summaryview->displayed;
+ summaryview->displayed = row;
+ if (!messageview_is_visible(msgview)) {
+ main_window_toggle_message_view(summaryview->mainwin);
+ GTK_EVENTS_FLUSH();
+ }
+ val = messageview_show(msgview, msginfo, all_headers);
+ if (GTK_CLIST(msgview->mimeview->ctree)->row_list == NULL)
+ gtk_widget_grab_focus(summaryview->ctree);
+ gtkut_ctree_node_move_if_on_the_edge(ctree, row,
+ GTK_CLIST(summaryview->ctree)->focus_row);
}
- val = messageview_show(msgview, msginfo, all_headers);
- if (GTK_CLIST(msgview->mimeview->ctree)->row_list == NULL)
- gtk_widget_grab_focus(summaryview->ctree);
- gtkut_ctree_node_move_if_on_the_edge(ctree, row,
- GTK_CLIST(summaryview->ctree)->focus_row);
}
if (val == 0 && MSG_IS_UNREAD(msginfo->flags)) {
msginfo = gtk_ctree_node_get_row_data(ctree, summaryview->selected);
source_window_show_msg(srcwin, msginfo);
source_window_show(srcwin);
+#ifdef MAEMO
+ maemo_window_full_screen_if_needed(GTK_WINDOW(srcwin->window));
+ maemo_connect_key_press_to_mainwindow(GTK_WINDOW(srcwin->window));
+#endif
}
void summary_reedit(SummaryView *summaryview)
void summary_toggle_view(SummaryView *summaryview)
{
+ if (prefs_common.layout_mode == LITTLE_LAYOUT)
+ return;
if (!messageview_is_visible(summaryview->messageview) &&
summaryview->selected)
summary_display_msg(summaryview,
g_signal_connect(G_OBJECT(ctree), "drag_data_get",
G_CALLBACK(summary_drag_data_get),
summaryview);
+ g_signal_connect(G_OBJECT(ctree), "drag_end",
+ G_CALLBACK(summary_drag_end),
+ summaryview);
gtk_drag_dest_set(ctree, GTK_DEST_DEFAULT_ALL & ~GTK_DEST_DEFAULT_HIGHLIGHT,
summary_drag_types, 2,
/* callback functions */
+static gint summary_folder_eventbox_pressed(GtkWidget *eventbox, GdkEventButton *event,
+ SummaryView *summaryview)
+{
+ if (event) {
+ gtk_widget_grab_focus(summaryview->folderview->ctree);
+ mainwindow_exit_folder(summaryview->mainwin);
+ }
+ return TRUE;
+}
+
static gint summary_toggle_pressed(GtkWidget *eventbox, GdkEventButton *event,
SummaryView *summaryview)
{
/* FALLTHROUGH */
case GDK_Escape:
gtk_widget_grab_focus(summaryview->folderview->ctree);
+ mainwindow_exit_folder(summaryview->mainwin);
return TRUE;
case GDK_Home:
case GDK_End:
if (summary_is_locked(summaryview)
&& !GTK_SCTREE(ctree)->selecting_range
+ && summaryview->messageview
&& summaryview->messageview->mimeview
&& summaryview->messageview->mimeview->type == MIMEVIEW_TEXT
&& summaryview->messageview->mimeview->textview->loading) {
context = gtk_drag_begin(widget, summaryview->target_list,
GDK_ACTION_MOVE|GDK_ACTION_COPY|GDK_ACTION_DEFAULT, button, event);
gtk_drag_set_icon_default(context);
+ if (prefs_common.layout_mode == LITTLE_LAYOUT) {
+ gint min, max, mid;
+ GtkWidget *paned = GTK_WIDGET_PTR(summaryview)->parent;
+ if (paned && GTK_IS_PANED(paned)) {
+ mainwindow_reset_paned(GTK_PANED(paned));
+ }
+ }
+}
+
+static gboolean summary_return_to_list(void *data)
+{
+ SummaryView *summaryview = (SummaryView *)data;
+ mainwindow_enter_folder(summaryview->mainwin);
+ return FALSE;
+}
+
+static void summary_drag_end (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ SummaryView *summaryview)
+{
+ if (prefs_common.layout_mode == LITTLE_LAYOUT) {
+ g_timeout_add(250, summary_return_to_list, summaryview);
+ }
}
static void summary_drag_data_get(GtkWidget *widget,
GtkWidget *ctree = summaryview->ctree;
GtkWidget *pixmap;
- gtk_widget_destroy(summaryview->folder_pixmap);
-
stock_pixmap_gdk(ctree, STOCK_PIXMAP_MARK, &markxpm, &markxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_DELETED, &deletedxpm, &deletedxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_NEW, &newxpm, &newxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_MOVED, &movedxpm, &movedxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_COPIED, &copiedxpm, &copiedxpmmask);
- pixmap = stock_pixmap_widget(summaryview->hbox, STOCK_PIXMAP_DIR_OPEN);
- gtk_box_pack_start(GTK_BOX(summaryview->hbox), pixmap, FALSE, FALSE, 4);
- gtk_box_reorder_child(GTK_BOX(summaryview->hbox), pixmap, 1); /* search_toggle before */
- gtk_widget_show(pixmap);
- summaryview->folder_pixmap = pixmap;
+ summary_set_folder_pixmap(summaryview, STOCK_PIXMAP_DIR_OPEN);
pixmap = stock_pixmap_widget(summaryview->hbox, STOCK_PIXMAP_QUICKSEARCH);
gtk_container_remove (GTK_CONTAINER(summaryview->toggle_search),
return FALSE;
}
-static gboolean summary_update_folder_item_name(gpointer source, gpointer data)
+static void summary_update_unread(SummaryView *summaryview, FolderItem *removed_item)
+{
+ guint new, unread, unreadmarked, marked, total;
+ if (prefs_common.layout_mode != LITTLE_LAYOUT)
+ return;
+ folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total);
+ if (removed_item) {
+ total -= removed_item->total_msgs;
+ new -= removed_item->new_msgs;
+ unread -= removed_item->unread_msgs;
+ }
+
+ if (new > 0 || unread > 0) {
+ summary_set_folder_pixmap(summaryview, STOCK_PIXMAP_DIR_OPEN_HRM);
+ gtk_tooltips_set_tip(GTK_TOOLTIPS(summaryview->tips),
+ summaryview->folder_pixmap_eventbox,
+ _("Go back to the folder list (You have unread messages)"), NULL);
+ } else {
+ summary_set_folder_pixmap(summaryview, STOCK_PIXMAP_DIR_OPEN);
+ gtk_tooltips_set_tip(GTK_TOOLTIPS(summaryview->tips),
+ summaryview->folder_pixmap_eventbox,
+ _("Go back to the folder list"), NULL);
+ }
+}
+
+static gboolean summary_update_folder_item_hook(gpointer source, gpointer data)
{
FolderItemUpdateData *hookdata = (FolderItemUpdateData *)source;
SummaryView *summaryview = (SummaryView *)data;
gtk_label_set_text(GTK_LABEL(summaryview->statlabel_folder), name);
g_free(name);
}
+ summary_update_unread(summaryview, NULL);
+
+ return FALSE;
+}
+
+static gboolean summary_update_folder_hook(gpointer source, gpointer data)
+{
+ FolderUpdateData *hookdata;
+ SummaryView *summaryview = (SummaryView *)data;
+ hookdata = source;
+ if (hookdata->update_flags & FOLDER_REMOVE_FOLDERITEM)
+ summary_update_unread(summaryview, hookdata->item);
+ else
+ summary_update_unread(summaryview, NULL);
return FALSE;
}
GtkWidget *stat_box;
GtkWidget *stat_box2;
GtkWidget *folder_pixmap;
+ GtkWidget *folder_pixmap_eventbox;
GtkWidget *statlabel_folder;
GtkWidget *statlabel_select;
GtkWidget *statlabel_msgs;
FolderView *folderview;
HeaderView *headerview;
MessageView *messageview;
+ MessageView *ext_messageview;
QuickSearch *quicksearch;
FolderItem *folder_item;
/* update folder label when renaming */
gint folder_item_update_callback_id;
+ gint folder_update_callback_id;
GtkTargetList *target_list; /* DnD */
+
+ GtkTooltips *tips;
};
SummaryView *summary_create(void);