From ffe54f8d774671aff5f81b23aa38ac086ba99492 Mon Sep 17 00:00:00 2001 From: Nils Faerber Date: Mon, 12 Jun 2006 15:24:24 +0000 Subject: [PATCH] * started work on modest-viewer-window * started filling modest-ui-message-viewer pmo-trunk-r236 --- src/Makefile.am | 2 + src/gtk-glade/modest-ui-message-editor.c | 11 ++- src/gtk-glade/modest-ui-message-viewer.c | 37 +++++++- src/modest-editor-window.h | 2 +- src/modest-ui.h | 2 + src/modest-viewer-window.c | 139 ++++++++++++++++++++++++++++++ src/modest-viewer-window.h | 50 +++++++++++ 7 files changed, 238 insertions(+), 5 deletions(-) create mode 100644 src/modest-viewer-window.c create mode 100644 src/modest-viewer-window.h diff --git a/src/Makefile.am b/src/Makefile.am index e0343af..7c47629 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -52,6 +52,8 @@ modest_SOURCES=\ modest-tny-store-actions.h\ modest-editor-window.c\ modest-editor-window.h\ + modest-viewer-window.c\ + modest-viewer-window.h\ modest-ui.h modest_LDADD = \ diff --git a/src/gtk-glade/modest-ui-message-editor.c b/src/gtk-glade/modest-ui-message-editor.c index 1458614..a4e9591 100644 --- a/src/gtk-glade/modest-ui-message-editor.c +++ b/src/gtk-glade/modest-ui-message-editor.c @@ -90,6 +90,11 @@ close_edit_window (GtkWidget *win, GdkEvent *event, gpointer data) } else { g_message("not closing window"); } + } else { + gtk_widget_hide (GTK_WIDGET(edit_win)); + modest_window_mgr_unregister(priv->modest_window_mgr, G_OBJECT(edit_win)); + gtk_widget_destroy(GTK_WIDGET(edit_win)); + g_message("closing window"); } } @@ -98,7 +103,6 @@ GtkContainer *modest_ui_new_editor_window (ModestUI *modest_ui, gpointer *user_data) { GtkWidget *top_container; - GladeXML *glade_xml; EditWinData *win_data; @@ -109,6 +113,8 @@ GtkContainer win_data = g_malloc(sizeof(EditWinData)); win_data->modest_ui = modest_ui; win_data->glade_xml = glade_xml; + win_data->attachments = NULL; + *user_data = win_data; top_container = glade_xml_get_widget(glade_xml, "new_mail_top_container"); @@ -117,8 +123,6 @@ GtkContainer return NULL; } - win_data->attachments = NULL; /* redundant */ - return GTK_CONTAINER(top_container); } @@ -299,6 +303,7 @@ new_editor_with_presets (ModestUI *modest_ui, const gchar *to_header, gtk_window_set_title (GTK_WINDOW(edit_win), subject_header); else gtk_window_set_title (GTK_WINDOW(edit_win), _("Untitled")); + modest_window_mgr_register(priv->modest_window_mgr, G_OBJECT(edit_win), MODEST_EDIT_WINDOW, 0); modest_editor_window_set_to_header(MODEST_EDITOR_WINDOW(edit_win), to_header); diff --git a/src/gtk-glade/modest-ui-message-viewer.c b/src/gtk-glade/modest-ui-message-viewer.c index 7a19b73..7906f18 100644 --- a/src/gtk-glade/modest-ui-message-viewer.c +++ b/src/gtk-glade/modest-ui-message-viewer.c @@ -27,7 +27,42 @@ #include "../modest-text-utils.h" #include "../modest-tny-msg-actions.h" -#include "../modest-editor-window.h" +#include "../modest-viewer-window.h" #include "modest-ui-glade.h" #include "modest-ui-wizard.h" + + +typedef struct { + ModestUI *modest_ui; + ModestViewerWindow *viewer_win; + GladeXML *glade_xml; +} ViewerWinData; + + +GtkContainer +*modest_ui_new_viewer_window (ModestUI *modest_ui, gpointer *user_data) +{ + GtkWidget *top_container; + GladeXML *glade_xml; + ViewerWinData *win_data; + + glade_xml = glade_xml_new(MODEST_GLADE, "viewer_top_container", NULL); + if (!glade_xml) + return NULL; + + win_data = g_malloc(sizeof(ViewerWinData)); + win_data->modest_ui = modest_ui; + win_data->glade_xml = glade_xml; + + *user_data = win_data; + + top_container = glade_xml_get_widget(glade_xml, "viewer_top_container"); + if (!top_container) { + g_object_unref(G_OBJECT(glade_xml)); + return NULL; + } + + return GTK_CONTAINER(top_container); +} + diff --git a/src/modest-editor-window.h b/src/modest-editor-window.h index b47a351..252b8a2 100644 --- a/src/modest-editor-window.h +++ b/src/modest-editor-window.h @@ -81,7 +81,7 @@ gboolean modest_editor_window_set_modified(ModestEditorWindow *edit_win, gboolea * * Gets the state of the modified-flag of this instance. This flag can be used to store * information whether the contents of the editor window was modified by the - * user or not. If it was modified (see also modest_editor_window_get_modified()) + * user or not. If it was modified (see also modest_editor_window_set_modified()) * a dialog can be presented to ask the user for confirmation. * * Returns: gboolean the new state of the modified flag diff --git a/src/modest-ui.h b/src/modest-ui.h index 9ef6cb1..584d11c 100644 --- a/src/modest-ui.h +++ b/src/modest-ui.h @@ -95,6 +95,8 @@ gboolean modest_ui_editor_window_set_subject_header(const gchar *subject, gpoint gboolean modest_ui_editor_window_set_body(const gchar *body, gpointer window_data); gboolean modest_ui_editor_window_update_attachments(gpointer window_data); +GtkContainer *modest_ui_new_viewer_window (ModestUI *modest_ui, gpointer *user_data); + G_END_DECLS #endif /* __MODEST_UI_H__ */ diff --git a/src/modest-viewer-window.c b/src/modest-viewer-window.c new file mode 100644 index 0000000..9e16e20 --- /dev/null +++ b/src/modest-viewer-window.c @@ -0,0 +1,139 @@ +/* modest-viewer-window.c */ + +/* insert (c)/licensing information) */ + +#include "modest-ui.h" +#include "modest-viewer-window.h" +/* include other impl specific header files */ + +/* 'private'/'protected' functions */ +static void modest_viewer_window_class_init (ModestViewerWindowClass *klass); +static void modest_viewer_window_init (ModestViewerWindow *obj); +static void modest_viewer_window_finalize (GObject *obj); + +/* list my signals */ +enum { + LAST_SIGNAL +}; + +typedef struct _ModestViewerWindowPrivate ModestViewerWindowPrivate; +struct _ModestViewerWindowPrivate { + gpointer user_data; +}; +#define MODEST_VIEWER_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ + MODEST_TYPE_VIEWER_WINDOW, \ + ModestViewerWindowPrivate)) +/* globals */ +static GtkWindowClass *parent_class = NULL; + +/* uncomment the following if you have defined any signals */ +/* static guint signals[LAST_SIGNAL] = {0}; */ + +GType +modest_viewer_window_get_type (void) +{ + static GType my_type = 0; + if (!my_type) { + static const GTypeInfo my_info = { + sizeof(ModestViewerWindowClass), + NULL, /* base init */ + NULL, /* base finalize */ + (GClassInitFunc) modest_viewer_window_class_init, + NULL, /* class finalize */ + NULL, /* class data */ + sizeof(ModestViewerWindow), + 1, /* n_preallocs */ + (GInstanceInitFunc) modest_viewer_window_init, + }; + my_type = g_type_register_static (GTK_TYPE_WINDOW, + "ModestViewerWindow", + &my_info, 0); + } + return my_type; +} + +static void +modest_viewer_window_class_init (ModestViewerWindowClass *klass) +{ + GObjectClass *gobject_class; + gobject_class = (GObjectClass*) klass; + + parent_class = g_type_class_peek_parent (klass); + gobject_class->finalize = modest_viewer_window_finalize; + + g_type_class_add_private (gobject_class, sizeof(ModestViewerWindowPrivate)); + + /* signal definitions go here, e.g.: */ +/* signals[MY_SIGNAL_1] = */ +/* g_signal_new ("my_signal_1",....); */ +/* signals[MY_SIGNAL_2] = */ +/* g_signal_new ("my_signal_2",....); */ +/* etc. */ +} + + +static void +modest_viewer_window_init (ModestViewerWindow *obj) +{ + ModestViewerWindowPrivate *priv = MODEST_VIEWER_WINDOW_GET_PRIVATE(obj); + + priv->user_data = NULL; +} + + +static void +modest_viewer_window_finalize (GObject *obj) +{ + ModestViewerWindowPrivate *priv; + + priv = MODEST_VIEWER_WINDOW_GET_PRIVATE(obj); + + if (priv->user_data) + g_free(priv->user_data); + + G_OBJECT_CLASS(parent_class)->finalize (obj); +} + + +GtkWidget* +modest_viewer_window_new (ModestUI *ui) +{ + GObject *self; + ModestViewerWindowPrivate *priv; + GtkWidget *w; + gpointer data; + + self = G_OBJECT(g_object_new(MODEST_TYPE_VIEWER_WINDOW, NULL)); + priv = MODEST_VIEWER_WINDOW_GET_PRIVATE(self); + + data = NULL; + w = GTK_WIDGET(modest_ui_new_viewer_window(ui, &data)); + if (!w) + return NULL; + if (!data) + g_message("viewer window user data is emtpy"); + + gtk_container_add(GTK_CONTAINER(self), w); + priv->user_data = data; + + return GTK_WIDGET(self); +} + + +/* + * return user defined data from a ModestViewerWindow instance + * like e.g. a refernce to a GladeXML* + */ +gpointer modest_viewer_window_get_data(ModestViewerWindow *viewer_win) +{ + ModestViewerWindowPrivate *priv; + + if (!viewer_win) { + return NULL; + } + priv = MODEST_VIEWER_WINDOW_GET_PRIVATE(viewer_win); + + // g_message("get priv->data = %p", priv->user_data); + + return priv->user_data; +} diff --git a/src/modest-viewer-window.h b/src/modest-viewer-window.h new file mode 100644 index 0000000..3f2f876 --- /dev/null +++ b/src/modest-viewer-window.h @@ -0,0 +1,50 @@ +/* modest-viewer-window.h */ +/* insert (c)/licensing information) */ + +#ifndef __MODEST_VIEWER_WINDOW_H__ +#define __MODEST_VIEWER_WINDOW_H__ + +#include +/* other include files */ + +G_BEGIN_DECLS + +/* convenience macros */ +#define MODEST_TYPE_VIEWER_WINDOW (modest_viewer_window_get_type()) +#define MODEST_VIEWER_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_VIEWER_WINDOW,ModestViewerWindow)) +#define MODEST_VIEWER_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_VIEWER_WINDOW,GtkWindow)) +#define MODEST_IS_VIEWER_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_VIEWER_WINDOW)) +#define MODEST_IS_VIEWER_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_VIEWER_WINDOW)) +#define MODEST_VIEWER_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_VIEWER_WINDOW,ModestViewerWindowClass)) + +typedef struct _ModestViewerWindow ModestViewerWindow; +typedef struct _ModestViewerWindowClass ModestViewerWindowClass; + +struct _ModestViewerWindow { + GtkWindow parent; + /* insert public members, if any */ +}; + +struct _ModestViewerWindowClass { + GtkWindowClass parent_class; + /* insert signal callback declarations, eg. */ + /* void (* my_event) (ModestViewerWindow* obj); */ +}; + +/* member functions */ +GType modest_viewer_window_get_type (void) G_GNUC_CONST; + +/* typical parameter-less _new function */ +/* if this is a kind of GtkWidget, it should probably return at GtkWidget*, */ +/* otherwise probably a GObject*. */ +GtkWidget* modest_viewer_window_new (ModestUI *ui); + +/* fill in other public functions, eg.: */ +/* void modest_viewer_window_do_something (ModestViewerWindow *self, const gchar* param); */ +/* gboolean modest_viewer_window_has_foo (ModestViewerWindow *self, gint value); */ + + +G_END_DECLS + +#endif /* __MODEST_VIEWER_WINDOW_H__ */ + -- 1.7.9.5