Implement and optimize for portrait mode support for Fremantle

Listen to accelerometer movement.
Hide tool items in portrait mode.
Omit Homepage and View Source from app menu.
Include Compact Add, View Source and Fullscreen in context menu.
Hide buttons in portrait mode in preferences.
This commit is contained in:
Christian Dywan 2009-11-27 23:42:07 +01:00
parent 11de65af92
commit 1d68dc9fb7
4 changed files with 123 additions and 15 deletions

View file

@ -66,6 +66,19 @@ katze_preferences_response_cb (KatzePreferences* preferences,
gtk_widget_destroy (GTK_WIDGET (preferences));
}
#ifdef HAVE_HILDON_2_2
static void
katze_preferences_size_request_cb (KatzePreferences* preferences,
GtkRequisition* requisition)
{
GdkScreen* screen = gtk_widget_get_screen (GTK_WIDGET (preferences));
if (gdk_screen_get_height (screen) > gdk_screen_get_width (screen))
gtk_widget_hide (gtk_dialog_get_action_area (GTK_DIALOG (preferences)));
else
gtk_widget_show (gtk_dialog_get_action_area (GTK_DIALOG (preferences)));
}
#endif
static void
katze_preferences_init (KatzePreferences* preferences)
{
@ -94,9 +107,17 @@ katze_preferences_init (KatzePreferences* preferences)
#endif
NULL);
#endif
g_object_connect (preferences,
"signal::response", katze_preferences_response_cb, NULL,
NULL);
#ifdef HAVE_HILDON_2_2
katze_preferences_size_request_cb (preferences, NULL);
g_object_connect (preferences,
"signal::size-request", katze_preferences_size_request_cb, NULL,
NULL);
#endif
}
static void
@ -168,7 +189,8 @@ katze_preferences_prepare (KatzePreferences* preferences)
priv->sizegroup = NULL;
priv->sizegroup2 = NULL;
g_signal_connect (priv->scrolled, "destroy", G_CALLBACK (gtk_widget_destroyed), &priv->scrolled);
g_signal_connect (priv->scrolled, "destroy",
G_CALLBACK (gtk_widget_destroyed), &priv->scrolled);
#else
priv->notebook = gtk_notebook_new ();
gtk_container_set_border_width (GTK_CONTAINER (priv->notebook), 6);
@ -195,7 +217,8 @@ katze_preferences_prepare (KatzePreferences* preferences)
priv->box = NULL;
priv->hbox = NULL;
g_signal_connect (priv->notebook, "destroy", G_CALLBACK (gtk_widget_destroyed), &priv->notebook);
g_signal_connect (priv->notebook, "destroy",
G_CALLBACK (gtk_widget_destroyed), &priv->notebook);
#endif
#if HAVE_OSX
@ -206,8 +229,7 @@ katze_preferences_prepare (KatzePreferences* preferences)
gtk_button_set_image (GTK_BUTTON (button), icon);
g_signal_connect (button, "clicked",
G_CALLBACK (katze_preferences_help_clicked_cb), preferences);
gtk_box_pack_end (GTK_BOX (hbox),
button, FALSE, FALSE, 4);
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 4);
gtk_box_pack_end (GTK_BOX (GTK_DIALOG (preferences)->action_area),
hbox, FALSE, FALSE, 0);
#endif

View file

@ -22,6 +22,11 @@
#if HAVE_HILDON
#include <libosso.h>
#ifdef HAVE_HILDON_2_2
#include <dbus/dbus.h>
#include <mce/mode-names.h>
#include <mce/dbus-names.h>
#endif
typedef osso_context_t* MidoriAppInstance;
#define MidoriAppInstanceNull NULL
#elif HAVE_UNIQUE
@ -642,6 +647,12 @@ midori_app_create_instance (MidoriApp* app,
osso_deinitialize (instance);
return NULL;
}
#ifdef HAVE_HILDON_2_2
if (OSSO_OK == osso_rpc_run_system (instance, MCE_SERVICE, MCE_REQUEST_PATH,
MCE_REQUEST_IF, MCE_ACCELEROMETER_ENABLE_REQ, NULL, DBUS_TYPE_INVALID))
/* Accelerometer enabled */;
#endif
#else
GdkDisplay* display;
gchar* display_name;

View file

@ -38,6 +38,16 @@
#include <unistd.h>
#endif
#ifdef HAVE_HILDON_2_2
#include <dbus/dbus.h>
#include <mce/mode-names.h>
#include <mce/dbus-names.h>
#define MCE_SIGNAL_MATCH "type='signal'," \
"sender='" MCE_SERVICE "'," \
"path='" MCE_SIGNAL_PATH "'," \
"interface='" MCE_SIGNAL_IF "'"
#endif
struct _MidoriBrowser
{
#if HAVE_HILDON
@ -3029,8 +3039,6 @@ _action_compact_menu_populate_popup (GtkAction* action,
{ "Open" },
#if HAVE_HILDON
{ "Find" },
{ "Homepage" },
{ "SourceView" },
#else
{ "Print" },
{ "About" },
@ -3057,12 +3065,7 @@ _action_compact_menu_populate_popup (GtkAction* action,
for (i = 0; i < G_N_ELEMENTS (actions); i++)
{
#if HAVE_HILDON
#if HILDON_CHECK_VERSION (2, 2, 0)
#define HAVE_APP_MENU 1
#endif
#endif
#ifdef HAVE_APP_MENU
#ifdef HAVE_HILDON_2_2
GtkAction* _action;
gchar* label;
GtkWidget* button;
@ -5474,6 +5477,58 @@ midori_browser_ui_manager_disconnect_proxy_cb (GtkUIManager* ui_manager,
}
}
#ifdef HAVE_HILDON_2_2
static void
midori_browser_set_portrait_mode (MidoriBrowser* browser,
gboolean portrait)
{
if (portrait)
hildon_gtk_window_set_portrait_flags (GTK_WINDOW (browser),
HILDON_PORTRAIT_MODE_REQUEST);
else
hildon_gtk_window_set_portrait_flags (GTK_WINDOW (browser),
~HILDON_PORTRAIT_MODE_REQUEST);
_action_set_visible (browser, "Bookmarks", !portrait);
_action_set_visible (browser, "CompactAdd", !portrait);
_action_set_visible (browser, "Back", !portrait);
_action_set_visible (browser, "SourceView", !portrait);
_action_set_visible (browser, "Fullscreen", !portrait);
}
static DBusHandlerResult
midori_browser_mce_filter_cb (DBusConnection* connection,
DBusMessage* message,
gpointer data)
{
if (dbus_message_is_signal (message, MCE_SIGNAL_IF, MCE_DEVICE_ORIENTATION_SIG))
{
DBusError error;
char *rotation, *stand, *face;
int x, y, z;
dbus_error_init (&error);
if (dbus_message_get_args (message,
&error,
DBUS_TYPE_STRING, &rotation,
DBUS_TYPE_STRING, &stand,
DBUS_TYPE_STRING, &face,
DBUS_TYPE_INT32, &x,
DBUS_TYPE_INT32, &y,
DBUS_TYPE_INT32, &z, DBUS_TYPE_INVALID))
{
gboolean portrait = !strcmp (rotation, MCE_ORIENTATION_PORTRAIT);
midori_browser_set_portrait_mode (MIDORI_BROWSER (data), portrait);
}
else
{
g_warning ("%s: %s\n", error.name, error.message);
dbus_error_free (&error);
}
}
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
#endif
static void
midori_browser_init (MidoriBrowser* browser)
{
@ -5792,6 +5847,18 @@ midori_browser_init (MidoriBrowser* browser)
gtk_box_pack_start (GTK_BOX (vbox), browser->navigationbar, FALSE, FALSE, 0);
#endif
#ifdef HAVE_HILDON_2_2
DBusConnection* system_bus = dbus_bus_get (DBUS_BUS_SYSTEM, NULL);
if (system_bus)
{
dbus_bus_add_match (system_bus, MCE_SIGNAL_MATCH, NULL);
dbus_connection_add_filter (system_bus,
midori_browser_mce_filter_cb, browser, NULL);
hildon_gtk_window_set_portrait_flags (GTK_WINDOW (browser),
HILDON_PORTRAIT_MODE_SUPPORT);
}
#endif
/* Bookmarkbar */
browser->bookmarkbar = gtk_toolbar_new ();
gtk_widget_set_name (browser->bookmarkbar, "MidoriBookmarkbar");

View file

@ -1977,12 +1977,14 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
gtk_menu_shell_append (menu_shell, menuitem);
}
#if !HAVE_HILDON
menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "ZoomIn"));
gtk_menu_shell_append (menu_shell, menuitem);
menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "ZoomOut"));
gtk_menu_shell_append (menu_shell, menuitem);
#endif
menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "Encoding"));
@ -2012,7 +2014,15 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
}
}
#if !HAVE_HILDON
#if HAVE_HILDON
gtk_menu_shell_append (menu_shell, gtk_separator_menu_item_new ());
menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "CompactAdd"));
gtk_menu_shell_append (menu_shell, menuitem);
menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "Fullscreen"));
gtk_menu_shell_append (menu_shell, menuitem);
#else
gtk_menu_shell_append (menu_shell, gtk_separator_menu_item_new ());
menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "BookmarkAdd"));
@ -2033,7 +2043,6 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "SaveAs"));
gtk_menu_shell_append (menu_shell, menuitem);
#if !HAVE_HILDON
/* Currently views that don't support source, don't support
saving either. If that changes, we need to think of something. */
if (!midori_view_can_view_source (view))
@ -2041,7 +2050,6 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "SourceView"));
gtk_menu_shell_append (menu_shell, menuitem);
#endif
}
gtk_widget_show_all (menu);