Detect MeeGo, and propagate settings variously.

Adapt widget naming on MeeGo for theming etc.
This commit is contained in:
Michael Meeks
2010-04-12 14:50:44 +01:00
parent dae9d2e575
commit 2593383aec
4 changed files with 179 additions and 1 deletions
+28 -1
View File
@@ -324,9 +324,15 @@ shell_window_finalize (GObject *object)
static void
shell_window_constructed (GObject *object)
{
e_shell_window_private_constructed (E_SHELL_WINDOW (object));
EShellWindow *shell_window = E_SHELL_WINDOW (object);
e_shell_window_private_constructed (shell_window);
e_extensible_load_extensions (E_EXTENSIBLE (object));
if (e_shell_get_meego_mode (shell_window->priv->shell) &&
e_shell_get_small_screen_mode (shell_window->priv->shell))
gtk_window_set_decorated (GTK_WINDOW (object), FALSE);
}
static GtkWidget *
@@ -365,6 +371,9 @@ shell_window_construct_toolbar (EShellWindow *shell_window)
toolbar = e_shell_window_get_managed_widget (
shell_window, "/main-toolbar");
if (e_shell_get_meego_mode (shell_window->priv->shell))
gtk_widget_set_name (GTK_WIDGET (toolbar), "MeeGoToolbar");
/* XXX Having this separator in the UI definition doesn't work
* because GtkUIManager is unaware of the "New" button, so
* it makes the separator invisible. One possibility is to
@@ -604,10 +613,24 @@ shell_window_create_shell_view (EShellWindow *shell_window,
return shell_view;
}
static void
shell_window_realize (GtkWidget *widget)
{
EShellWindow *shell_window;
shell_window = E_SHELL_WINDOW (widget);
e_shell_adapt_window_size (shell_window->priv->shell,
GTK_WINDOW (widget));
/* Chain up to parent's dispose() method. */
GTK_WIDGET_CLASS (e_shell_window_parent_class)->realize (widget);
}
static void
e_shell_window_class_init (EShellWindowClass *class)
{
GObjectClass *object_class;
GtkWidgetClass *widget_class;
g_type_class_add_private (class, sizeof (EShellWindowPrivate));
@@ -618,6 +641,9 @@ e_shell_window_class_init (EShellWindowClass *class)
object_class->finalize = shell_window_finalize;
object_class->constructed = shell_window_constructed;
widget_class = GTK_WIDGET_CLASS (class);
widget_class->realize = shell_window_realize;
class->construct_menubar = shell_window_construct_menubar;
class->construct_toolbar = shell_window_construct_toolbar;
class->construct_sidebar = shell_window_construct_sidebar;
@@ -625,6 +651,7 @@ e_shell_window_class_init (EShellWindowClass *class)
class->construct_taskbar = shell_window_construct_taskbar;
class->create_shell_view = shell_window_create_shell_view;
/**
* EShellWindow:active-view
*
+139
View File
@@ -68,11 +68,15 @@ struct _EShellPrivate {
guint quit_cancelled : 1;
guint safe_mode : 1;
guint express_mode : 1;
guint meego_mode : 1;
guint small_screen_mode : 1;
};
enum {
PROP_0,
PROP_EXPRESS_MODE,
PROP_MEEGO_MODE,
PROP_SMALL_SCREEN_MODE,
PROP_GEOMETRY,
PROP_MODULE_DIRECTORY,
PROP_NETWORK_AVAILABLE,
@@ -470,6 +474,18 @@ shell_set_express_mode (EShell *shell,
shell->priv->express_mode = express_mode;
}
static void
shell_set_meego_mode (EShell *shell, gboolean is_meego)
{
shell->priv->meego_mode = is_meego;
}
static void
shell_set_small_screen_mode (EShell *shell, gboolean small_screen)
{
shell->priv->small_screen_mode = small_screen;
}
static void
shell_set_geometry (EShell *shell,
const gchar *geometry)
@@ -501,6 +517,18 @@ shell_set_property (GObject *object,
g_value_get_boolean (value));
return;
case PROP_MEEGO_MODE:
shell_set_meego_mode (
E_SHELL (object),
g_value_get_boolean (value));
return;
case PROP_SMALL_SCREEN_MODE:
shell_set_small_screen_mode (
E_SHELL (object),
g_value_get_boolean (value));
return;
case PROP_GEOMETRY:
shell_set_geometry (
E_SHELL (object),
@@ -542,6 +570,18 @@ shell_get_property (GObject *object,
E_SHELL (object)));
return;
case PROP_MEEGO_MODE:
g_value_set_boolean (
value, e_shell_get_meego_mode (
E_SHELL (object)));
return;
case PROP_SMALL_SCREEN_MODE:
g_value_set_boolean (
value, e_shell_get_small_screen_mode (
E_SHELL (object)));
return;
case PROP_MODULE_DIRECTORY:
g_value_set_string (
value, e_shell_get_module_directory (
@@ -788,6 +828,40 @@ e_shell_class_init (EShellClass *class)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* EShell:meego
*
* Are we running under meego - if so, adapt ourselves
* to fit in well with their theming.
**/
g_object_class_install_property (
object_class,
PROP_MEEGO_MODE,
g_param_spec_boolean (
"meego-mode",
"Meego Mode",
"Whether meego mode is enabled",
FALSE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* EShell:small-screen
*
* Are we running with a small (1024x600) screen - if so, start
* throwing the babies overboard to fit onto that screen size.
**/
g_object_class_install_property (
object_class,
PROP_SMALL_SCREEN_MODE,
g_param_spec_boolean (
"small-screen-mode",
"Small Screen Mode",
"Whether we run on a rather small screen",
FALSE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* EShell:geometry
*
@@ -1579,6 +1653,38 @@ e_shell_get_express_mode (EShell *shell)
return shell->priv->express_mode;
}
/**
* e_shell_get_meego_mode:
* @shell: an #EShell
*
* Returns %TRUE if Evolution is in MeeGo mode.
*
* Returns: %TRUE if Evolution is in MeeGo mode
**/
gboolean
e_shell_get_meego_mode (EShell *shell)
{
g_return_val_if_fail (E_IS_SHELL (shell), FALSE);
return shell->priv->meego_mode;
}
/**
* e_shell_get_small_screen_mode:
* @shell: an #EShell
*
* Returns %TRUE if Evolution is in small (netbook) screen mode.
*
* Returns: %TRUE if Evolution is in small screen mode
**/
gboolean
e_shell_get_small_screen_mode (EShell *shell)
{
g_return_val_if_fail (E_IS_SHELL (shell), FALSE);
return shell->priv->small_screen_mode;
}
/**
* e_shell_get_module_directory:
* @shell: an #EShell
@@ -1797,3 +1903,36 @@ e_shell_cancel_quit (EShell *shell)
g_signal_stop_emission (shell, signals[QUIT_REQUESTED], 0);
}
/**
* e_shell_adapt_window_size:
* @shell: an #EShell
* @window: a #GtkWindow to adapt to full-screen
*
* This is used to adapt to window's size to be optimal for
* the platform. The shell settings are used to determine if
* a window should be set to full screen etc.
*
* This method is best called when the widget is realized on
* a given screen.
**/
void
e_shell_adapt_window_size (EShell *shell,
GtkWindow *window)
{
gint monitor;
GdkScreen *scr;
GdkRectangle rect;
if (!e_shell_get_meego_mode (shell) ||
!e_shell_get_small_screen_mode (shell))
return;
scr = gdk_screen_get_default ();
monitor = gdk_screen_get_monitor_at_window (scr, GTK_WIDGET (window)->window);
gdk_screen_get_monitor_geometry (scr, monitor, &rect);
gtk_window_set_default_size (window, rect.width, rect.height);
gtk_window_set_decorated (window, FALSE);
gtk_window_maximize (window);
}
+5
View File
@@ -108,7 +108,9 @@ GList * e_shell_get_watched_windows (EShell *shell);
GtkWindow * e_shell_get_active_window (EShell *shell);
void e_shell_send_receive (EShell *shell,
GtkWindow *parent);
gboolean e_shell_get_meego_mode (EShell *shell);
gboolean e_shell_get_express_mode (EShell *shell);
gboolean e_shell_get_small_screen_mode (EShell *shell);
const gchar * e_shell_get_module_directory (EShell *shell);
gboolean e_shell_get_network_available (EShell *shell);
void e_shell_set_network_available (EShell *shell,
@@ -123,6 +125,9 @@ void e_shell_event (EShell *shell,
gboolean e_shell_quit (EShell *shell);
void e_shell_cancel_quit (EShell *shell);
void e_shell_adapt_window_size (EShell *shell,
GtkWindow *window);
G_END_DECLS
#endif /* E_SHELL_H */
+7
View File
@@ -49,6 +49,7 @@
#include "e-shell.h"
#include "e-shell-migrate.h"
#include "e-shell-meego.h"
#include "e-config-upgrade.h"
#include "es-event.h"
@@ -371,6 +372,7 @@ create_default_shell (void)
gboolean online = TRUE;
const gchar *key;
GError *error = NULL;
gboolean is_meego = FALSE, small_screen = FALSE;
client = gconf_client_get_default ();
@@ -405,6 +407,9 @@ create_default_shell (void)
if (!express_mode)
express_mode = gconf_client_get_bool (client, key, &error);
if (express_mode)
e_shell_detect_meego (&is_meego, &small_screen);
if (error != NULL) {
g_warning ("%s", error->message);
g_clear_error (&error);
@@ -415,7 +420,9 @@ create_default_shell (void)
"name", "org.gnome.Evolution",
"geometry", geometry,
"module-directory", EVOLUTION_MODULEDIR,
"meego-mode", is_meego,
"express-mode", express_mode,
"small-screen-mode", small_screen,
"online", online,
NULL);