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
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, */
{
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));
}
}
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;
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));
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);
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);
}
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));
+}
#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
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;
{
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);
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);
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);
+}
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__ */
#include <string.h>
#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"
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, \
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
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));
/* 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
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
/* 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);
}
}
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);
+ }
+ }
+}
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__ */
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 {
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));
}
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__);
+}
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);
};
/**
*/
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__ */