Working on the interface
This commit is contained in:
parent
7fb95ee8bc
commit
19d477fbe3
|
@ -100,6 +100,20 @@ void account_delete(Account * account)
|
|||
|
||||
|
||||
/* accessors */
|
||||
/* account_get_enabled */
|
||||
int account_get_enabled(Account * account)
|
||||
{
|
||||
return account->enabled;
|
||||
}
|
||||
|
||||
|
||||
/* account_set_disabled */
|
||||
void account_set_enabled(Account * account, int enabled)
|
||||
{
|
||||
account->enabled = enabled ? 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
/* account_get_store */
|
||||
GtkListStore * account_get_store(Account * account, AccountFolder * folder)
|
||||
{
|
||||
|
@ -220,19 +234,3 @@ int account_init(Account * account, GtkTreeStore * store, GtkTreeIter * parent)
|
|||
return 0;
|
||||
return account->plugin->init(store, parent);
|
||||
}
|
||||
|
||||
|
||||
/* account_disable */
|
||||
int account_disable(Account * account)
|
||||
{
|
||||
account->enabled = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* account_enable */
|
||||
int account_enable(Account * account)
|
||||
{
|
||||
account->enabled = 1;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -100,7 +100,11 @@ Account * account_new(char const * type, char const * name);
|
|||
void account_delete(Account * account);
|
||||
|
||||
/* accessors */
|
||||
int account_get_enabled(Account * account);
|
||||
void account_set_enabled(Account * account, int enabled);
|
||||
|
||||
GtkListStore * account_get_store(Account * account, AccountFolder * folder);
|
||||
|
||||
char const * account_get_title(Account * account);
|
||||
int account_set_title(Account * account, char const * title);
|
||||
|
||||
|
@ -110,7 +114,4 @@ int account_config_save(Account * account, Config * config);
|
|||
int account_init(Account * account, GtkTreeStore * store, GtkTreeIter * parent);
|
||||
int account_quit(Account * account);
|
||||
|
||||
int account_disable(Account * account);
|
||||
int account_enable(Account * account);
|
||||
|
||||
#endif /* !MAILER_ACCOUNT_H */
|
||||
|
|
|
@ -262,7 +262,7 @@ static void _preferences_set(Mailer * mailer)
|
|||
{
|
||||
char * p;
|
||||
|
||||
if((p = config_get(mailer->config, "", "message_font")) == NULL)
|
||||
if((p = mailer_get_config(mailer, "messages_font")) == NULL)
|
||||
p = MAILER_MESSAGES_FONT;
|
||||
gtk_font_button_set_font_name(GTK_FONT_BUTTON(mailer->pr_messages_font),
|
||||
p);
|
||||
|
@ -497,9 +497,11 @@ static int _preferences_ok_accounts(Mailer * mailer)
|
|||
{
|
||||
if(enabled)
|
||||
continue;
|
||||
#if 0 /* FIXME API+behaviour change here */
|
||||
if(mailer_account_disable(mailer, account) == 0)
|
||||
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
|
||||
AC_ACTIVE, FALSE, -1);
|
||||
#endif
|
||||
}
|
||||
else if(enabled && mailer_account_add(mailer, account) == 0)
|
||||
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
|
||||
|
@ -1232,19 +1234,41 @@ void on_compose_send(GtkWidget * widget, gpointer data)
|
|||
}
|
||||
|
||||
|
||||
/* compose file menu */
|
||||
void on_compose_file_send(GtkWidget * widget, gpointer data)
|
||||
void on_compose_attach(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
/* compose file menu */
|
||||
void on_compose_file_new(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
Compose * c = data;
|
||||
|
||||
compose_new(c->mailer);
|
||||
}
|
||||
|
||||
|
||||
void on_compose_file_send(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
Compose * c = data;
|
||||
|
||||
compose_send(c);
|
||||
}
|
||||
|
||||
|
||||
void on_compose_file_save(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
void on_compose_file_save_as(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
void on_compose_file_close(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
Compose * c = data;
|
||||
|
@ -1253,6 +1277,37 @@ void on_compose_file_close(GtkWidget * widget, gpointer data)
|
|||
}
|
||||
|
||||
|
||||
/* compose_edit_menu */
|
||||
void on_compose_edit_undo(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
void on_compose_edit_redo(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
void on_compose_edit_cut(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
void on_compose_edit_copy(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
void on_compose_edit_paste(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
/* compose view menu */
|
||||
void on_compose_view_cc(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
|
|
|
@ -73,12 +73,22 @@ void on_account_delete(GtkWidget * widget, gpointer data);
|
|||
gboolean on_compose_closex(GtkWidget * widget, GdkEvent * event, gpointer data);
|
||||
void on_compose_save(GtkWidget * widget, gpointer data);
|
||||
void on_compose_send(GtkWidget * widget, gpointer data);
|
||||
void on_compose_attach(GtkWidget * widget, gpointer data);
|
||||
|
||||
/* file menu */
|
||||
void on_compose_file_send(GtkWidget * widget, gpointer data);
|
||||
void on_compose_file_new(GtkWidget * widget, gpointer data);
|
||||
void on_compose_file_save(GtkWidget * widget, gpointer data);
|
||||
void on_compose_file_save_as(GtkWidget * widget, gpointer data);
|
||||
void on_compose_file_send(GtkWidget * widget, gpointer data);
|
||||
void on_compose_file_close(GtkWidget * widget, gpointer data);
|
||||
|
||||
/* edit menu */
|
||||
void on_compose_edit_undo(GtkWidget * widget, gpointer data);
|
||||
void on_compose_edit_redo(GtkWidget * widget, gpointer data);
|
||||
void on_compose_edit_cut(GtkWidget * widget, gpointer data);
|
||||
void on_compose_edit_copy(GtkWidget * widget, gpointer data);
|
||||
void on_compose_edit_paste(GtkWidget * widget, gpointer data);
|
||||
|
||||
/* view menu */
|
||||
void on_compose_view_cc(GtkWidget * widget, gpointer data);
|
||||
void on_compose_view_bcc(GtkWidget * widget, gpointer data);
|
||||
|
|
|
@ -28,17 +28,34 @@
|
|||
#include "compose.h"
|
||||
|
||||
|
||||
/* private */
|
||||
/* constants */
|
||||
static struct _menu _menu_file[] =
|
||||
{
|
||||
{ "_Send", G_CALLBACK(on_compose_file_send), "stock_mail-send", 0 },
|
||||
{ "_New message", G_CALLBACK(on_compose_file_new), "stock_mail-compose",
|
||||
GDK_N },
|
||||
{ "", NULL, NULL, 0 },
|
||||
{ "_Save", G_CALLBACK(on_compose_file_save), GTK_STOCK_SAVE, GDK_S },
|
||||
{ "Save _as...", G_CALLBACK(on_compose_file_save_as), GTK_STOCK_SAVE_AS,
|
||||
0 },
|
||||
{ "", NULL, NULL, 0 },
|
||||
{ "_Send", G_CALLBACK(on_compose_file_send), "stock_mail-send", 0 },
|
||||
{ "", NULL, NULL, 0 },
|
||||
{ "_Close", G_CALLBACK(on_compose_file_close), GTK_STOCK_CLOSE, GDK_W },
|
||||
{ NULL, NULL, NULL, 0 }
|
||||
};
|
||||
|
||||
static struct _menu _menu_edit[] =
|
||||
{
|
||||
{ "_Undo", G_CALLBACK(on_compose_edit_undo), "stock_undo", GDK_Z },
|
||||
{ "_Redo", G_CALLBACK(on_compose_edit_redo), "stock_redo", GDK_Y },
|
||||
{ "", NULL, NULL, 0 },
|
||||
{ "_Cut", G_CALLBACK(on_compose_edit_cut), GTK_STOCK_CUT, GDK_X },
|
||||
{ "_Copy", G_CALLBACK(on_compose_edit_copy), GTK_STOCK_COPY, GDK_C },
|
||||
{ "_Paste", G_CALLBACK(on_compose_edit_paste), GTK_STOCK_PASTE, GDK_P },
|
||||
{ NULL, NULL, NULL, 0 }
|
||||
};
|
||||
|
||||
static struct _menu _menu_view[] =
|
||||
{
|
||||
/* FIXME CC and BCC should be toggle menu entries */
|
||||
|
@ -60,6 +77,7 @@ static struct _menu _menu_help[] =
|
|||
static struct _menubar _compose_menubar[] =
|
||||
{
|
||||
{ "_File", _menu_file },
|
||||
{ "_Edit", _menu_edit },
|
||||
{ "_View", _menu_view },
|
||||
{ "_Help", _menu_help },
|
||||
{ NULL, NULL }
|
||||
|
@ -70,11 +88,16 @@ static struct _toolbar _compose_toolbar[] =
|
|||
{ "Send", G_CALLBACK(on_compose_send), "stock_mail-send" },
|
||||
{ "", NULL, NULL },
|
||||
{ "Save", G_CALLBACK(on_compose_save), GTK_STOCK_SAVE },
|
||||
{ "", NULL, NULL },
|
||||
{ "Attach", G_CALLBACK(on_compose_attach), "stock_attach" },
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
/* public */
|
||||
/* compose_new */
|
||||
static GtkWidget * _new_text_view(Mailer * mailer);
|
||||
|
||||
Compose * compose_new(Mailer * mailer)
|
||||
{
|
||||
Compose * compose;
|
||||
|
@ -83,7 +106,6 @@ Compose * compose_new(Mailer * mailer)
|
|||
GtkToolItem * toolitem;
|
||||
GtkSizeGroup * group;
|
||||
GtkWidget * widget;
|
||||
PangoFontDescription * desc;
|
||||
|
||||
if((compose = malloc(sizeof(*compose))) == NULL)
|
||||
{
|
||||
|
@ -169,11 +191,8 @@ Compose * compose_new(Mailer * mailer)
|
|||
gtk_container_add(GTK_CONTAINER(toolitem), compose->subject);
|
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), toolitem, -1);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
|
||||
compose->view = gtk_text_view_new();
|
||||
desc = pango_font_description_new();
|
||||
pango_font_description_set_family(desc, "monospace");
|
||||
gtk_widget_modify_font(compose->view, desc);
|
||||
pango_font_description_free(desc);
|
||||
/* view */
|
||||
compose->view = _new_text_view(mailer);
|
||||
widget = gtk_scrolled_window_new(NULL, NULL);
|
||||
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget),
|
||||
GTK_SHADOW_ETCHED_IN);
|
||||
|
@ -192,6 +211,42 @@ Compose * compose_new(Mailer * mailer)
|
|||
return compose;
|
||||
}
|
||||
|
||||
static GtkWidget * _new_text_view(Mailer * mailer)
|
||||
{
|
||||
GtkWidget * textview;
|
||||
PangoFontDescription * desc;
|
||||
char const * homedir;
|
||||
char * filename;
|
||||
gchar * buf;
|
||||
size_t cnt;
|
||||
GtkTextBuffer * buffer;
|
||||
static char const signature[] = "/.signature";
|
||||
static char const prefix[] = "\n-- \n";
|
||||
|
||||
textview = gtk_text_view_new();
|
||||
/* font */
|
||||
desc = pango_font_description_from_string(mailer_get_config(mailer,
|
||||
"messages_font"));
|
||||
gtk_widget_modify_font(textview, desc);
|
||||
pango_font_description_free(desc);
|
||||
/* signature */
|
||||
if((homedir = getenv("HOME")) == NULL)
|
||||
return textview;
|
||||
if((filename = malloc(strlen(homedir) + sizeof(signature))) == NULL)
|
||||
return textview;
|
||||
sprintf(filename, "%s%s", homedir, signature);
|
||||
if(g_file_get_contents(filename, &buf, &cnt, NULL) != TRUE)
|
||||
{
|
||||
free(filename);
|
||||
return textview;
|
||||
}
|
||||
free(filename);
|
||||
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
|
||||
gtk_text_buffer_set_text(buffer, prefix, sizeof(prefix) - 1);
|
||||
gtk_text_buffer_insert_at_cursor(buffer, buf, cnt);
|
||||
return textview;
|
||||
}
|
||||
|
||||
|
||||
/* compose_delete */
|
||||
void compose_delete(Compose * compose)
|
||||
|
@ -201,6 +256,13 @@ void compose_delete(Compose * compose)
|
|||
}
|
||||
|
||||
|
||||
/* accessors */
|
||||
Mailer * compose_get_mailer(Compose * compose)
|
||||
{
|
||||
return compose->mailer;
|
||||
}
|
||||
|
||||
|
||||
/* useful */
|
||||
/* compose_save */
|
||||
void compose_save(Compose * compose)
|
||||
|
|
|
@ -55,6 +55,9 @@ typedef struct _Compose
|
|||
Compose * compose_new(Mailer * mailer);
|
||||
void compose_delete(Compose * compose);
|
||||
|
||||
/* accessors */
|
||||
Mailer * compose_get_mailer(Compose * compose); /* XXX ugly */
|
||||
|
||||
/* useful */
|
||||
void compose_save(Compose * compose);
|
||||
void compose_send(Compose * compose);
|
||||
|
|
33
src/mailer.c
33
src/mailer.c
|
@ -309,8 +309,9 @@ static GtkWidget * _new_folders_view(Mailer * mailer)
|
|||
GtkCellRenderer * renderer;
|
||||
GtkTreeSelection * treesel;
|
||||
|
||||
model = gtk_tree_store_new(MF_COL_COUNT, G_TYPE_POINTER, G_TYPE_POINTER,
|
||||
GDK_TYPE_PIXBUF, G_TYPE_STRING);
|
||||
model = gtk_tree_store_new(MF_COL_COUNT, G_TYPE_POINTER, G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN, G_TYPE_POINTER, GDK_TYPE_PIXBUF,
|
||||
G_TYPE_STRING);
|
||||
widget = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
|
||||
g_object_unref(model);
|
||||
renderer = gtk_cell_renderer_pixbuf_new();
|
||||
|
@ -453,16 +454,23 @@ void mailer_delete(Mailer * mailer)
|
|||
|
||||
|
||||
/* accessors */
|
||||
/* mailer_get_config */
|
||||
char const * mailer_get_config(Mailer * mailer, char const * variable)
|
||||
{
|
||||
return config_get(mailer->config, "", variable);
|
||||
}
|
||||
|
||||
|
||||
/* mailer_get_config_filename */
|
||||
char * mailer_get_config_filename(Mailer * mailer)
|
||||
/* FIXME consider replacing with mailer_save_config() */
|
||||
{
|
||||
char * homedir;
|
||||
char const * homedir;
|
||||
char * filename;
|
||||
|
||||
if((homedir = getenv("HOME")) == NULL)
|
||||
return NULL;
|
||||
if((filename = malloc(strlen(homedir) + strlen(MAILER_CONFIG_FILE) + 2))
|
||||
if((filename = malloc(strlen(homedir) + sizeof(MAILER_CONFIG_FILE) + 1))
|
||||
== NULL)
|
||||
return NULL;
|
||||
sprintf(filename, "%s/%s", homedir, MAILER_CONFIG_FILE);
|
||||
|
@ -502,8 +510,8 @@ int mailer_account_add(Mailer * mailer, Account * account)
|
|||
#ifdef DEBUG
|
||||
fprintf(stderr, "DEBUG: mailer_account_add(%p)\n", account);
|
||||
#endif
|
||||
if((p = realloc(mailer->account, sizeof(*p) * (mailer->account_cnt + 1)))
|
||||
== NULL)
|
||||
if((p = realloc(mailer->account, sizeof(*p) * (mailer->account_cnt
|
||||
+ 1))) == NULL)
|
||||
return mailer_error(mailer, "realloc", FALSE);
|
||||
mailer->account = p;
|
||||
mailer->account[mailer->account_cnt] = account;
|
||||
|
@ -513,14 +521,16 @@ int mailer_account_add(Mailer * mailer, Account * account)
|
|||
pixbuf = gtk_icon_theme_load_icon(theme, "stock_mail-accounts", 16, 0,
|
||||
NULL);
|
||||
gtk_tree_store_set(GTK_TREE_STORE(model), &iter, MF_COL_ACCOUNT,
|
||||
account, MF_COL_FOLDER, NULL, MF_COL_ICON, pixbuf,
|
||||
MF_COL_NAME, account->title, -1);
|
||||
account, MF_COL_ENABLED, account_get_enabled(account),
|
||||
MF_COL_DELETE, FALSE, MF_COL_FOLDER, NULL, MF_COL_ICON,
|
||||
pixbuf, MF_COL_NAME, account->title, -1);
|
||||
account_init(account, GTK_TREE_STORE(model), &iter);
|
||||
mailer->account_cnt++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
#if 0 /* FIXME deprecate? */
|
||||
/* mailer_account_disable */
|
||||
int mailer_account_disable(Mailer * mailer, Account * account)
|
||||
{
|
||||
|
@ -531,7 +541,8 @@ int mailer_account_disable(Mailer * mailer, Account * account)
|
|||
break;
|
||||
if(i == mailer->account_cnt)
|
||||
return 1;
|
||||
return account_disable(account);
|
||||
account_set_enabled(account, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -545,5 +556,7 @@ int mailer_account_enable(Mailer * mailer, Account * account)
|
|||
break;
|
||||
if(i == mailer->account_cnt)
|
||||
return 1;
|
||||
return account_enable(account);
|
||||
account_set_enabled(account, 1);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -43,7 +43,8 @@
|
|||
/* types */
|
||||
enum
|
||||
{
|
||||
MF_COL_ACCOUNT = 0, MF_COL_FOLDER, MF_COL_ICON, MF_COL_NAME
|
||||
MF_COL_ACCOUNT = 0, MF_COL_ENABLED, MF_COL_DELETE, MF_COL_FOLDER,
|
||||
MF_COL_ICON, MF_COL_NAME
|
||||
};
|
||||
# define MF_COL_LAST MF_COL_NAME
|
||||
# define MF_COL_COUNT (MF_COL_LAST + 1)
|
||||
|
@ -92,14 +93,17 @@ Mailer * mailer_new(void);
|
|||
void mailer_delete(Mailer * mailer);
|
||||
|
||||
/* accessors */
|
||||
char const * mailer_get_config(Mailer * mailer, char const * variable);
|
||||
char * mailer_get_config_filename(Mailer * mailer);
|
||||
|
||||
/* useful */
|
||||
int mailer_error(Mailer * mailer, char const * message, int ret);
|
||||
|
||||
int mailer_account_add(Mailer * mailer, Account * account);
|
||||
#if 0 /* FIXME deprecate? */
|
||||
int mailer_account_disable(Mailer * mailer, Account * account);
|
||||
int mailer_account_enable(Mailer * mailer, Account * account);
|
||||
#endif
|
||||
/* FIXME implement
|
||||
int mailer_account_remove(Mailer * mailer, Account * account); */
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user