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)
This commit is contained in:
Colin Leroy 2007-03-21 17:44:45 +00:00
parent 158a01abda
commit a1f06d5d21
25 changed files with 676 additions and 90 deletions

View File

@ -1,3 +1,33 @@
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

View File

@ -2448,3 +2448,4 @@
( 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

BIN
claws-mail-26x26.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
claws-mail-40x40.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -11,7 +11,7 @@ MINOR_VERSION=8
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
EXTRA_VERSION=31
EXTRA_VERSION=32
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
@ -433,6 +433,18 @@ dnl check if GDB is somewhere
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)],
@ -921,6 +933,7 @@ echo "Libgnomeprint : $ac_cv_enable_gnomeprint"
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"

View File

@ -680,8 +680,12 @@ static void account_edit_create(void)
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);
@ -799,7 +803,7 @@ static void account_edit_create(void)
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,
@ -810,6 +814,9 @@ static void account_edit_create(void)
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)

View File

@ -634,6 +634,10 @@ void addressbook_open(Compose *target)
}
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();

View File

@ -367,7 +367,6 @@ static gboolean attach_button_pressed (GtkWidget *widget,
static gboolean attach_key_pressed (GtkWidget *widget,
GdkEventKey *event,
gpointer data);
static void compose_send_cb (gpointer data,
guint action,
GtkWidget *widget);
@ -6154,6 +6153,7 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode,
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);
@ -6170,11 +6170,12 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode,
}
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);
@ -6310,8 +6311,17 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode,
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);
@ -6503,6 +6513,10 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode,
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;

View File

@ -2014,6 +2014,28 @@ static gboolean postpone_select(void *data)
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)
{
@ -2058,24 +2080,7 @@ static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
/* 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 */

View File

@ -132,5 +132,6 @@ void folderview_finish_dnd (const gchar *data,
GdkDragContext *drag_context,
guint time,
FolderItem *item);
void folderview_close_opened (FolderView *folderview);
#endif /* __FOLDERVIEW_H__ */

View File

@ -9,6 +9,7 @@ static char *TEAM_LIST[] = {
"Paul Mangan <paul@claws-mail.org>",
"Martin Schaaf <mascha1@users.sf.net>",
"Fabien Vantard <fzzzzz@gmail.com>",
"Fabien Vantard <fzzzzz@gmail.com>",
NULL
};
@ -88,6 +89,7 @@ static char *CONTRIBS_LIST[] = {
"Fabio Junior Beneditto",
"M. Benkmann",
"Wilbert Berendsen",
"Jean-Luc Biord",
"Eugene Brevdo",
"André Filipe de Assunção e Brito",
"Henrik Carlqvist",

View File

@ -1569,6 +1569,16 @@ gboolean gtkut_tree_model_get_iter_last(GtkTreeModel *model,
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)
{
@ -1576,3 +1586,4 @@ GtkWidget *gtkut_window_new (GtkWindowType type,
gtk_window_set_role(GTK_WINDOW(window), class);
return window;
}
#endif

View File

@ -40,6 +40,11 @@
# include <wchar.h>
#endif
#ifdef MAEMO
#include <hildon-widgets/hildon-program.h>
#include <gtk/gtkmain.h>
#endif
typedef struct _ComboButton ComboButton;
struct _ComboButton
@ -183,8 +188,13 @@ gboolean gtkut_text_view_search_string_backward (GtkTextView *text, const gchar
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,

View File

@ -251,6 +251,10 @@ void log_window_show(LogWindow *logwin)
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)

View File

@ -35,6 +35,11 @@
#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) ;
@ -42,14 +47,23 @@ GtkWidget *menubar_create(GtkWidget *window, GtkItemFactoryEntry *entries,
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,

View File

@ -432,8 +432,14 @@ void prefswindow_open_full(const gchar *title, GSList *prefs_pages, gpointer dat
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",
@ -450,7 +456,6 @@ void prefswindow_open_full(const gchar *title, GSList *prefs_pages, gpointer dat
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) {
@ -459,6 +464,9 @@ void prefswindow_open_full(const gchar *title, GSList *prefs_pages, gpointer dat
}
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,

View File

@ -114,6 +114,24 @@
#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;
@ -186,6 +204,34 @@ static void exit_claws (MainWindow *mainwin);
}
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
@ -560,6 +606,10 @@ void main_set_show_at_startup(gboolean show)
int main(int argc, char *argv[])
{
#ifdef MAEMO
osso_context_t *osso_context;
osso_return_t result;
#endif
gchar *userrc;
MainWindow *mainwin;
FolderView *folderview;
@ -620,6 +670,13 @@ int main(int argc, char *argv[])
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());
@ -778,7 +835,29 @@ int main(int argc, char *argv[])
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;
@ -989,6 +1068,9 @@ int main(int argc, char *argv[])
gtk_main();
#ifdef MAEMO
osso_deinitialize(osso_context);
#endif
exit_claws(mainwin);
return 0;
@ -1716,3 +1798,10 @@ static void install_basic_sighandlers()
sigprocmask(SIG_UNBLOCK, &mask, 0);
#endif /* !G_OS_WIN32 */
}
#ifdef MAEMO
HildonProgram *hildon_program()
{
return static_hildonprogram;
}
#endif

View File

@ -565,6 +565,7 @@ static GtkItemFactoryEntry mainwin_entries[] =
{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>"},
@ -1052,7 +1053,6 @@ static void mainwindow_colorlabel_menu_create(MainWindow *mainwin, gboolean refr
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;
@ -1471,8 +1471,10 @@ MainWindow *main_window_create()
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);
@ -1913,9 +1915,16 @@ static void main_window_separation_change(MainWindow *mainwin, LayoutType layout
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);
@ -1923,10 +1932,37 @@ static void mainwin_reset_paned(GtkPaned *paned)
"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;
@ -1936,6 +1972,7 @@ void main_window_toggle_message_view(MainWindow *mainwin)
switch (prefs_common.layout_mode) {
case NORMAL_LAYOUT:
case VERTICAL_LAYOUT:
case LITTLE_LAYOUT:
ppaned = mainwin->vpaned;
container = mainwin->hpaned;
if (ppaned->parent != NULL) {
@ -2653,18 +2690,28 @@ static void main_window_set_widgets(MainWindow *mainwin, LayoutType layout_mode)
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;
@ -2677,10 +2724,12 @@ static void main_window_set_widgets(MainWindow *mainwin, LayoutType layout_mode)
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();
@ -2704,6 +2753,9 @@ static void main_window_set_widgets(MainWindow *mainwin, LayoutType layout_mode)
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:
@ -2761,6 +2813,28 @@ static void main_window_set_widgets(MainWindow *mainwin, LayoutType layout_mode)
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);
@ -2817,6 +2891,9 @@ static void main_window_set_widgets(MainWindow *mainwin, LayoutType layout_mode)
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
@ -2908,7 +2985,6 @@ static void main_window_size_allocate_cb(GtkWidget *widget,
gpointer data)
{
MainWindow *mainwin = (MainWindow *)data;
main_window_get_size(mainwin);
}
@ -3066,7 +3142,7 @@ static void set_layout_cb(MainWindow *mainwin, guint action,
GtkWidget *widget)
{
LayoutType layout_mode = action;
LayoutType old_layout_mode = prefs_common.layout_mode;
if (mainwin->menu_lock_count) {
return;
}
@ -3078,12 +3154,20 @@ static void set_layout_cb(MainWindow *mainwin, guint action,
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);
}
@ -3890,6 +3974,15 @@ gboolean mainwindow_key_pressed (GtkWidget *widget, GdkEventKey *event,
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;
}
@ -4034,3 +4127,40 @@ void mainwindow_jump_to(const gchar *target)
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

View File

@ -65,7 +65,8 @@ typedef enum
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
@ -132,6 +133,7 @@ struct _MainWindow
#ifdef HAVE_LIBSM
gpointer smc_conn;
#endif
gboolean in_folder;
};
MainWindow *main_window_create (void);
@ -204,5 +206,15 @@ void mainwindow_learn (MainWindow *mainwin,
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__ */

View File

@ -472,9 +472,12 @@ static MessageView *messageview_create_with_new_window_visible(MainWindow *mainw
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) {
@ -900,6 +903,9 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
}
g_free(file);
#ifdef MAEMO
maemo_window_full_screen_if_needed(GTK_WINDOW(messageview->window));
#endif
return 0;
}
@ -918,6 +924,8 @@ void messageview_reflect_prefs_pixmap_theme(void)
void messageview_clear(MessageView *messageview)
{
if (!messageview)
return;
procmsg_msginfo_free(messageview->msginfo);
messageview->msginfo = NULL;
messageview->filtered = FALSE;
@ -931,6 +939,12 @@ void messageview_destroy(MessageView *messageview)
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);

View File

@ -351,10 +351,15 @@ static PrefParam param[] = {
&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},

View File

@ -101,7 +101,6 @@ static PrefParam param_os_specific[] = {
&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},
@ -162,7 +161,7 @@ static PrefParam param[] = {
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},
@ -178,7 +177,7 @@ static PrefParam param[] = {
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},
@ -296,6 +295,7 @@ static PrefParam param[] = {
&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",
@ -306,7 +306,18 @@ static PrefParam param[] = {
&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},
@ -400,22 +411,29 @@ static PrefParam param[] = {
{"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",
@ -424,6 +442,8 @@ static PrefParam param[] = {
&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",
@ -462,12 +482,22 @@ static PrefParam param[] = {
&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",
@ -509,6 +539,7 @@ static PrefParam param[] = {
{"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",
@ -517,7 +548,16 @@ static PrefParam param[] = {
&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,
@ -546,6 +586,7 @@ static PrefParam param[] = {
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,
@ -562,6 +603,24 @@ static PrefParam param[] = {
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,
@ -638,9 +697,13 @@ static PrefParam param[] = {
&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",
@ -700,8 +763,13 @@ static PrefParam param[] = {
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},

View File

@ -232,8 +232,12 @@ static void summary_search_create(void)
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);
@ -482,6 +486,9 @@ static void summary_search_create(void)
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)

View File

@ -256,6 +256,10 @@ static GtkWidget *summary_ctree_create (SummaryView *summaryview);
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);
@ -351,7 +355,9 @@ static gboolean summary_drag_motion_cb(GtkWidget *widget,
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,
@ -404,7 +410,8 @@ static void summary_find_answers (SummaryView *summaryview,
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] =
{
@ -562,7 +569,6 @@ SummaryView *summary_create(void)
GtkWidget *toggle_arrow;
GtkWidget *popupmenu;
GtkWidget *toggle_search;
GtkTooltips *search_tip;
GtkItemFactory *popupfactory;
gint n_entries;
QuickSearch *quicksearch;
@ -570,6 +576,7 @@ SummaryView *summary_create(void)
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);
@ -586,13 +593,12 @@ SummaryView *summary_create(void)
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);
@ -693,7 +699,11 @@ SummaryView *summary_create(void)
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);
@ -713,7 +723,8 @@ SummaryView *summary_create(void)
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;
@ -737,17 +748,23 @@ void summary_relayout(SummaryView *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);
@ -793,6 +810,27 @@ static void summary_set_fonts(SummaryView *summaryview)
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;
@ -833,11 +871,7 @@ void summary_init(SummaryView *summaryview)
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);
@ -994,9 +1028,15 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
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)
@ -3002,7 +3042,7 @@ static void summary_display_msg_full(SummaryView *summaryview,
if (!new_window) {
if (summaryview->displayed == row)
return;
else
else if (summaryview->messageview)
summaryview->messageview->filtered = FALSE;
}
g_return_if_fail(row != NULL);
@ -3017,7 +3057,7 @@ static void summary_display_msg_full(SummaryView *summaryview,
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);
@ -3025,18 +3065,33 @@ static void summary_display_msg_full(SummaryView *summaryview,
} 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)) {
@ -3101,6 +3156,10 @@ void summary_view_source(SummaryView * summaryview)
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)
@ -3171,6 +3230,8 @@ gboolean summary_step(SummaryView *summaryview, GtkScrollType type)
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,
@ -5229,6 +5290,9 @@ static GtkWidget *summary_ctree_create(SummaryView *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,
@ -5283,6 +5347,16 @@ void summary_set_column_order(SummaryView *summaryview)
/* 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)
{
@ -5402,6 +5476,7 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
/* FALLTHROUGH */
case GDK_Escape:
gtk_widget_grab_focus(summaryview->folderview->ctree);
mainwindow_exit_folder(summaryview->mainwin);
return TRUE;
case GDK_Home:
case GDK_End:
@ -5539,6 +5614,7 @@ static void summary_selected(GtkCTree *ctree, GtkCTreeNode *row,
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) {
@ -5823,6 +5899,29 @@ static void summary_start_drag(GtkWidget *widget, gint button, GdkEvent *event,
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,
@ -6207,8 +6306,6 @@ void summary_reflect_prefs_pixmap_theme(SummaryView *summaryview)
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);
@ -6226,11 +6323,7 @@ void summary_reflect_prefs_pixmap_theme(SummaryView *summaryview)
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),
@ -6369,7 +6462,32 @@ static gboolean summary_update_msg(gpointer source, gpointer data)
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;
@ -6383,6 +6501,20 @@ static gboolean summary_update_folder_item_name(gpointer source, gpointer 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;
}

View File

@ -95,6 +95,7 @@ struct _SummaryView
GtkWidget *stat_box;
GtkWidget *stat_box2;
GtkWidget *folder_pixmap;
GtkWidget *folder_pixmap_eventbox;
GtkWidget *statlabel_folder;
GtkWidget *statlabel_select;
GtkWidget *statlabel_msgs;
@ -128,6 +129,7 @@ struct _SummaryView
FolderView *folderview;
HeaderView *headerview;
MessageView *messageview;
MessageView *ext_messageview;
QuickSearch *quicksearch;
FolderItem *folder_item;
@ -162,8 +164,11 @@ private:
/* 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);