From: Sergio Villar Senin Date: Fri, 13 Apr 2007 13:12:06 +0000 (+0000) Subject: * Added show toolbar application wide code X-Git-Tag: git_migration_finished~3895 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=8790badc52054c9d03d55037b10599bf828008d4 * Added show toolbar application wide code * Added show toolbar code to main window (msgview and msgeditor pending) pmo-trunk-r1557 --- diff --git a/src/maemo/modest-main-window-ui.h b/src/maemo/modest-main-window-ui.h index e543c7b..6412cdf 100644 --- a/src/maemo/modest-main-window-ui.h +++ b/src/maemo/modest-main-window-ui.h @@ -126,8 +126,8 @@ static const GtkActionEntry modest_action_entries [] = { static const GtkToggleActionEntry modest_toggle_action_entries [] = { { "ViewToggleFolders", NULL, N_("mcen_me_inbox_hidefolders"), NULL, NULL, G_CALLBACK (modest_ui_actions_toggle_folders_view), TRUE }, { "ViewToggleFullscreen", GTK_STOCK_FULLSCREEN, N_("mcen_me_inbox_fullscreen"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_toggle_fullscreen), FALSE }, - { "ViewShowToolbarNormalScreen", NULL, N_("mcen_me_inbox_normalview"), NULL, NULL, NULL, TRUE }, - { "ViewShowToolbarFullScreen", NULL, N_("mcen_me_inbox_optimizedview"), NULL, NULL, NULL, TRUE }, + { "ViewShowToolbarNormalScreen", NULL, N_("mcen_me_inbox_normalview"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_toggle_toolbar), TRUE }, + { "ViewShowToolbarFullScreen", NULL, N_("mcen_me_inbox_optimizedview"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_toggle_toolbar), TRUE }, }; G_END_DECLS diff --git a/src/maemo/modest-main-window.c b/src/maemo/modest-main-window.c index 74e8542..5affeff 100644 --- a/src/maemo/modest-main-window.c +++ b/src/maemo/modest-main-window.c @@ -64,6 +64,10 @@ static void connect_signals (ModestMainWindow *self); static void restore_sizes (ModestMainWindow *self); static void save_sizes (ModestMainWindow *self); +static void modest_main_window_create_toolbar (ModestWindow *window); +static void modest_main_window_show_toolbar (ModestWindow *window, + gboolean show_toolbar); + /* list my signals */ enum { /* MY_SIGNAL_1, */ @@ -132,10 +136,16 @@ modest_main_window_class_init (ModestMainWindowClass *klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass*) klass; + ModestWindowClass *modest_window_class; + + modest_window_class = (ModestWindowClass *) klass; parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = modest_main_window_finalize; + modest_window_class->create_toolbar_func = modest_main_window_create_toolbar; + modest_window_class->show_toolbar_func = modest_main_window_show_toolbar; + g_type_class_add_private (gobject_class, sizeof(ModestMainWindowPrivate)); } @@ -285,36 +295,6 @@ on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMainWindow *self) } static void -set_homogeneous (GtkWidget *widget, - gpointer data) -{ - gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), TRUE); - gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), TRUE); -} - -static GtkWidget* -get_toolbar (ModestMainWindow *self) -{ - GtkWidget *toolbar, *reply_button, *menu; - ModestWindowPrivate *parent_priv; - - parent_priv = MODEST_WINDOW_GET_PRIVATE(self); - - /* Toolbar */ - toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar"); - - /* Set homogeneous toolbar */ - gtk_container_foreach (GTK_CONTAINER (toolbar), set_homogeneous, NULL); - - /* Set reply message tap and hold menu */ - reply_button = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply"); - menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolbarReplyContextMenu"); - gtk_widget_tap_and_hold_setup (GTK_WIDGET (reply_button), menu, NULL, 0); - - return toolbar; -} - -static void connect_signals (ModestMainWindow *self) { ModestWindowPrivate *parent_priv; @@ -415,11 +395,6 @@ modest_main_window_new (void) gtk_window_add_accel_group (GTK_WINDOW (self), gtk_ui_manager_get_accel_group (parent_priv->ui_manager)); - /* add the toolbar */ - parent_priv->toolbar = get_toolbar(self); - hildon_window_add_toolbar (HILDON_WINDOW (self), GTK_TOOLBAR (parent_priv->toolbar)); - - /* Menubar */ parent_priv->menubar = modest_maemo_utils_menubar_to_menu (parent_priv->ui_manager); hildon_window_set_menu (HILDON_WINDOW (self), GTK_MENU (parent_priv->menubar)); @@ -462,10 +437,6 @@ modest_main_window_new (void) window_icon = modest_platform_get_icon (MODEST_APP_ICON); gtk_window_set_icon (GTK_WINDOW (self), window_icon); -/* /\* should we hide the toolbar? *\/ */ -/* if (!modest_conf_get_bool (modest_runtime_get_conf (), MODEST_CONF_SHOW_TOOLBAR, NULL)) */ -/* gtk_widget_hide (parent_priv->toolbar); */ - /* Connect signals */ connect_signals (self); @@ -477,9 +448,6 @@ modest_main_window_new (void) g_message ("online? %s", tny_device_is_online (modest_runtime_get_device()) ? "yes" : "no"); - - /* Needed to show the contents of the toolbar */ - gtk_widget_show_all (GTK_WIDGET (self)); return MODEST_WINDOW(self); } @@ -587,3 +555,57 @@ modest_main_window_window_state_event (GtkWidget *widget, GdkEventWindowState *e return FALSE; } + +static void +set_homogeneous (GtkWidget *widget, + gpointer data) +{ + gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), TRUE); + gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), TRUE); +} + +static void +modest_main_window_create_toolbar (ModestWindow *self) +{ + GtkWidget *reply_button, *menu; + ModestWindowPrivate *parent_priv; + + parent_priv = MODEST_WINDOW_GET_PRIVATE(self); + + /* Toolbar */ + parent_priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, + "/ToolBar"); + + /* Set homogeneous toolbar */ + gtk_container_foreach (GTK_CONTAINER (parent_priv->toolbar), + set_homogeneous, NULL); + + /* Set reply message tap and hold menu */ + reply_button = gtk_ui_manager_get_widget (parent_priv->ui_manager, + "/ToolBar/ToolbarMessageReply"); + + menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolbarReplyContextMenu"); + gtk_widget_tap_and_hold_setup (GTK_WIDGET (reply_button), menu, NULL, 0); +} + +static void +modest_main_window_show_toolbar (ModestWindow *self, + gboolean show_toolbar) +{ + ModestWindowPrivate *parent_priv; + + parent_priv = MODEST_WINDOW_GET_PRIVATE(self); + + if (!parent_priv->toolbar) + return; + + if (show_toolbar) + hildon_window_add_toolbar (HILDON_WINDOW (self), + GTK_TOOLBAR (parent_priv->toolbar)); + else + hildon_window_remove_toolbar (HILDON_WINDOW (self), + GTK_TOOLBAR (parent_priv->toolbar)); + + /* Needed to show the contents of the toolbar */ + gtk_widget_show_all (GTK_WIDGET (self)); +} diff --git a/src/modest-defs.h b/src/modest-defs.h index 7bd305b..1f4b7c0 100644 --- a/src/modest-defs.h +++ b/src/modest-defs.h @@ -62,10 +62,10 @@ #define MODEST_CONF_CONNECT_AT_STARTUP MODEST_CONF_NAMESPACE "/connect_at_startup" -#define MODEST_CONF_SHOW_TOOLBAR MODEST_CONF_NAMESPACE "/show_toolbar" #define MODEST_CONF_SHOW_CC MODEST_CONF_NAMESPACE "/show_cc" #define MODEST_CONF_SHOW_BCC MODEST_CONF_NAMESPACE "/show_bcc" - +#define MODEST_CONF_SHOW_TOOLBAR MODEST_CONF_NAMESPACE "/show_toolbar" +#define MODEST_CONF_SHOW_TOOLBAR_FULLSCREEN MODEST_CONF_NAMESPACE "/show_toolbar_fullscreen" /* * in the maemo case, we try to replace this diff --git a/src/modest-main.c b/src/modest-main.c index 1b8a440..2021504 100644 --- a/src/modest-main.c +++ b/src/modest-main.c @@ -227,7 +227,7 @@ start_ui (const gchar *account_name, const gchar* mailto, const gchar *cc, const modest_window_mgr_register_window (mgr, win); } - gtk_widget_show (GTK_WIDGET (win)); + gtk_widget_show_all (GTK_WIDGET (win)); gtk_main(); return MODEST_ERR_NONE; diff --git a/src/modest-runtime.c b/src/modest-runtime.c index 3121f4e..06ac537 100644 --- a/src/modest-runtime.c +++ b/src/modest-runtime.c @@ -683,6 +683,9 @@ init_default_settings (ModestConf *conf) { if (!modest_conf_key_exists (conf, MODEST_CONF_SHOW_TOOLBAR, NULL)) modest_conf_set_bool (conf, MODEST_CONF_SHOW_TOOLBAR, TRUE, NULL); + + if (!modest_conf_key_exists (conf, MODEST_CONF_SHOW_TOOLBAR_FULLSCREEN, NULL)) + modest_conf_set_bool (conf, MODEST_CONF_SHOW_TOOLBAR_FULLSCREEN, TRUE, NULL); if (!modest_conf_key_exists (conf, MODEST_CONF_SHOW_CC, NULL)) modest_conf_set_bool (conf, MODEST_CONF_SHOW_CC, TRUE, NULL); diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index d524a25..d24e0d4 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -1533,7 +1533,7 @@ modest_ui_actions_on_toggle_fullscreen (GtkToggleAction *toggle, mgr = modest_runtime_get_window_mgr (); active = (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (toggle)))?1:0; - fullscreen = (modest_window_mgr_get_fullscreen_mode (mgr))?1:0; + fullscreen = modest_window_mgr_get_fullscreen_mode (mgr); if (active != fullscreen) { modest_window_mgr_set_fullscreen_mode (mgr, active); @@ -1643,3 +1643,24 @@ modest_ui_actions_toggle_folders_view (GtkAction *action, else modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SPLIT); } + +void +modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle, + ModestWindow *window) +{ + gboolean active, fullscreen = FALSE; + ModestWindowMgr *mgr; + + active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (toggle)); + + /* Check if we want to toggle the toolbar vuew in fullscreen + or normal mode */ + if (!strcmp (gtk_action_get_name (GTK_ACTION (toggle)), + "ViewShowToolbarFullScreen")) { + fullscreen = TRUE; + } + + /* Toggle toolbar */ + mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_show_toolbars (mgr, active, fullscreen); +} diff --git a/src/modest-ui-actions.h b/src/modest-ui-actions.h index 9cfe252..6ac3ba6 100644 --- a/src/modest-ui-actions.h +++ b/src/modest-ui-actions.h @@ -208,9 +208,15 @@ void modest_ui_actions_on_change_zoom (GtkRadioAction *action, GtkRadioAction *selected, ModestWindow *window); - - - +/** + * modest_ui_actions_on_toggle_toolbar: + * @toggle: + * @window: + * + * Hides/Shows the toolbars of the #ModestWindow instances + **/ +void modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle, + ModestWindow *window); G_END_DECLS #endif /* __MODEST_UI_ACTIONS_H__ */ diff --git a/src/widgets/modest-window-mgr.c b/src/widgets/modest-window-mgr.c index 07e3e25..7758ca5 100644 --- a/src/widgets/modest-window-mgr.c +++ b/src/widgets/modest-window-mgr.c @@ -29,6 +29,7 @@ #include #include "modest-window-mgr.h" +#include "modest-runtime.h" #include "widgets/modest-main-window.h" #include "widgets/modest-msg-edit-window.h" #include "widgets/modest-msg-view-window.h" @@ -53,6 +54,8 @@ typedef struct _ModestWindowMgrPrivate ModestWindowMgrPrivate; struct _ModestWindowMgrPrivate { GList *window_list; gboolean fullscreen_mode; + gboolean show_toolbars; + gboolean show_toolbars_fullscreen; }; #define MODEST_WINDOW_MGR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_WINDOW_MGR, \ @@ -102,10 +105,16 @@ modest_window_mgr_class_init (ModestWindowMgrClass *klass) static void modest_window_mgr_init (ModestWindowMgr *obj) { - ModestWindowMgrPrivate *priv = MODEST_WINDOW_MGR_GET_PRIVATE(obj); + ModestWindowMgrPrivate *priv; + priv = MODEST_WINDOW_MGR_GET_PRIVATE(obj); priv->window_list = NULL; priv->fullscreen_mode = FALSE; + + /* Could not initialize it from gconf, singletons are not + ready yet */ + priv->show_toolbars = FALSE; + priv->show_toolbars_fullscreen = FALSE; } static void @@ -138,7 +147,9 @@ void modest_window_mgr_register_window (ModestWindowMgr *self, ModestWindow *window) { + static gboolean first_time = TRUE; GList *win; + gboolean show; ModestWindowMgrPrivate *priv; g_return_if_fail (MODEST_IS_WINDOW_MGR (self)); @@ -162,6 +173,23 @@ modest_window_mgr_register_window (ModestWindowMgr *self, /* Put into fullscreen if needed */ if (priv->fullscreen_mode) gtk_window_fullscreen (GTK_WINDOW (window)); + + /* Fill caches */ + if (first_time) { + ModestConf *conf = modest_runtime_get_conf (); + priv->show_toolbars = + modest_conf_get_bool (conf, MODEST_CONF_SHOW_TOOLBAR, NULL); + priv->show_toolbars_fullscreen = + modest_conf_get_bool (conf, MODEST_CONF_SHOW_TOOLBAR_FULLSCREEN, NULL); + first_time = FALSE; + } + + /* Show/hide toolbar */ + if (priv->fullscreen_mode) + show = priv->show_toolbars_fullscreen; + else + show = priv->show_toolbars; + modest_window_view_toolbar (window, show); } static void @@ -224,8 +252,18 @@ modest_window_mgr_unregister_window (ModestWindowMgr *self, priv->window_list = g_list_remove_link (priv->window_list, win); /* If there are no more windows registered then exit program */ - if (priv->window_list == NULL) + if (priv->window_list == NULL) { + ModestConf *conf = modest_runtime_get_conf (); + + /* Save show toolbar status */ + modest_conf_set_bool (conf, MODEST_CONF_SHOW_TOOLBAR_FULLSCREEN, + priv->show_toolbars_fullscreen, NULL); + modest_conf_set_bool (conf, MODEST_CONF_SHOW_TOOLBAR, + priv->show_toolbars, NULL); + + /* Quit main loop */ gtk_main_quit (); + } } static gint @@ -289,10 +327,15 @@ modest_window_mgr_set_fullscreen_mode (ModestWindowMgr *self, /* Update windows */ win = priv->window_list; while (win) { - if (on) + if (on) { gtk_window_fullscreen (GTK_WINDOW (win->data)); - else + modest_window_view_toolbar (MODEST_WINDOW (win->data), + priv->show_toolbars_fullscreen); + } else { gtk_window_unfullscreen (GTK_WINDOW (win->data)); + modest_window_view_toolbar (MODEST_WINDOW (win->data), + priv->show_toolbars); + } win = g_list_next (win); } } @@ -308,3 +351,44 @@ modest_window_mgr_get_fullscreen_mode (ModestWindowMgr *self) return priv->fullscreen_mode; } + +void +modest_window_mgr_show_toolbars (ModestWindowMgr *self, + gboolean show_toolbars, + gboolean fullscreen) +{ + ModestWindowMgrPrivate *priv; + + g_return_if_fail (MODEST_IS_WINDOW_MGR (self)); + + priv = MODEST_WINDOW_MGR_GET_PRIVATE (self); + + /* If nothing changes then return. Otherwise cache it, do not + save to GConf for the moment, it will be done when all + windows become unregistered in order to avoid unnecessary + ModestConf calls */ + if (fullscreen) { + if (priv->show_toolbars_fullscreen == show_toolbars) + return; + else + priv->show_toolbars_fullscreen = show_toolbars; + } else { + if (priv->show_toolbars == show_toolbars) + return; + else + priv->show_toolbars = show_toolbars; + } + + /* Apply now if the view mode is the right one */ + if ((fullscreen && priv->fullscreen_mode) || + (!fullscreen && !priv->fullscreen_mode)) { + + GList *win = priv->window_list; + + while (win) { + modest_window_view_toolbar (MODEST_WINDOW (win->data), + show_toolbars); + win = g_list_next (win); + } + } +} diff --git a/src/widgets/modest-window-mgr.h b/src/widgets/modest-window-mgr.h index 5598f98..43c636c 100644 --- a/src/widgets/modest-window-mgr.h +++ b/src/widgets/modest-window-mgr.h @@ -111,14 +111,32 @@ void modest_window_mgr_set_fullscreen_mode (ModestWindowMgr *self, gboolean on); /** - * modest_window_mgr_set_fullscreen_mode: + * modest_window_mgr_get_fullscreen_mode: * @self: a #ModestWindowMgr * - * gets the current fullscreen mode of the windows in the application. + * gets the application current fullscreen mode * - * Returns: %TRUE if fullscreen mode is enabled, %FALSE if not. + * Return value: TRUE is the application is in fullscrenn mode, + * otherwise FALSE **/ gboolean modest_window_mgr_get_fullscreen_mode (ModestWindowMgr *self); + + +/** + * modest_window_mgr_show_toolbars: + * @self: a #ModestWindowMgr + * @show_toolbar: whether or not the toolbars should be shown + * @fullscreen: TRUE/FALSE for show/hide in fullscreen mode, otherwise + * it applies to normal mode + * + * shows or hides the toolbars of the registered windows. Note that if + * the #fullscreen attribute is TRUE and the application is in normal + * mode, you will not see the changes until the application switches + * to fullscreen mode and viceversa + **/ +void modest_window_mgr_show_toolbars (ModestWindowMgr *self, + gboolean show_toolbars, + gboolean fullscreen); G_END_DECLS #endif /* __MODEST_WINDOW_MGR_H__ */ diff --git a/src/widgets/modest-window.c b/src/widgets/modest-window.c index 2aed604..18296bc 100644 --- a/src/widgets/modest-window.c +++ b/src/widgets/modest-window.c @@ -36,12 +36,14 @@ static void modest_window_class_init (ModestWindowClass *klass); static void modest_window_init (ModestWindow *obj); static void modest_window_finalize (GObject *obj); -static void modest_window_set_zoom_default (ModestWindow *window, - gdouble zoom); -static gdouble modest_window_get_zoom_default (ModestWindow *window); -static gboolean modest_window_zoom_plus_default (ModestWindow *window); -static gboolean modest_window_zoom_minus_default (ModestWindow *window); - +static void modest_window_set_zoom_default (ModestWindow *window, + gdouble zoom); +static gdouble modest_window_get_zoom_default (ModestWindow *window); +static gboolean modest_window_zoom_plus_default (ModestWindow *window); +static gboolean modest_window_zoom_minus_default (ModestWindow *window); +static void modest_window_create_toolbar_default (ModestWindow *window); +static void modest_window_show_toolbar_default (ModestWindow *window, + gboolean show_toolbar); /* list my signals */ enum { @@ -98,6 +100,8 @@ modest_window_class_init (ModestWindowClass *klass) klass->get_zoom_func = modest_window_get_zoom_default; klass->zoom_plus_func = modest_window_zoom_plus_default; klass->zoom_minus_func = modest_window_zoom_minus_default; + klass->create_toolbar_func = modest_window_create_toolbar_default; + klass->show_toolbar_func = modest_window_show_toolbar_default; g_type_class_add_private (gobject_class, sizeof(ModestWindowPrivate)); } @@ -184,27 +188,78 @@ modest_window_zoom_minus (ModestWindow *window) return MODEST_WINDOW_GET_CLASS (window)->zoom_minus_func (window); } +static void +modest_window_create_toolbar (ModestWindow *window) +{ + MODEST_WINDOW_GET_CLASS (window)->create_toolbar_func (window); +} + +static void +modest_window_show_toolbar (ModestWindow *window, + gboolean show_toolbar) +{ + MODEST_WINDOW_GET_CLASS (window)->show_toolbar_func (window, + show_toolbar); +} + +void +modest_window_view_toolbar (ModestWindow *window, + gboolean show_toolbar) +{ + ModestWindowPrivate *priv; + + priv = MODEST_WINDOW_GET_PRIVATE(window); + + /* Lazy strategy, we create the toolbar just when there is no + toolbar and we want to show it */ + if (!priv->toolbar && show_toolbar) + modest_window_create_toolbar (window); + + if (priv->toolbar) + modest_window_show_toolbar (window, show_toolbar); +} + + +/* Default implementations */ + static void modest_window_set_zoom_default (ModestWindow *window, gdouble zoom) { - return; + g_warning ("modest: You should implement %s", __FUNCTION__); + } static gdouble modest_window_get_zoom_default (ModestWindow *window) { + g_warning ("modest: You should implement %s", __FUNCTION__); return 1.0; } static gboolean modest_window_zoom_plus_default (ModestWindow *window) { + g_warning ("modest: You should implement %s", __FUNCTION__); return FALSE; } static gboolean modest_window_zoom_minus_default (ModestWindow *window) { + g_warning ("modest: You should implement %s", __FUNCTION__); return FALSE; } + +static void +modest_window_create_toolbar_default (ModestWindow *window) +{ + g_warning ("modest: You should implement %s", __FUNCTION__); +} + +static void +modest_window_show_toolbar_default (ModestWindow *window, + gboolean show_toolbar) +{ + g_warning ("modest: You should implement %s", __FUNCTION__); +} diff --git a/src/widgets/modest-window.h b/src/widgets/modest-window.h index 2cf0993..1868382 100644 --- a/src/widgets/modest-window.h +++ b/src/widgets/modest-window.h @@ -78,6 +78,9 @@ struct _ModestWindowClass { gdouble (*get_zoom_func) (ModestWindow *self); gboolean (*zoom_plus_func) (ModestWindow *self); gboolean (*zoom_minus_func) (ModestWindow *self); + /* Used by view_toolbar, with no public interface */ + void (*create_toolbar_func) (ModestWindow *self); + void (*show_toolbar_func) (ModestWindow *self, gboolean show_toolbar); }; /** @@ -152,6 +155,17 @@ gboolean modest_window_zoom_plus (ModestWindow *window); */ gboolean modest_window_zoom_minus (ModestWindow *window); + +/** + * modest_window_view_toolbar: + * @window: + * @view_toolbar: whether or not the toolbar should be shown + * + * shows/hides the window toolbar + **/ +void modest_window_view_toolbar (ModestWindow *window, + gboolean view_toolbar); + G_END_DECLS #endif /* __MODEST_WINDOW_H__ */