Implement Compact Add button, and readjust the Hildon toolbar

Actions AddNewsFeed and AddDesktopShortcut are introduced and the
toolbar layout for Hildon is changed.

Desktop shortcuts are not implemented yet.
This commit is contained in:
Christian Dywan 2009-10-12 22:57:35 +02:00
parent 7e8f6d5633
commit 8fdb284b54
2 changed files with 117 additions and 22 deletions

View file

@ -336,11 +336,21 @@ _midori_browser_update_interface (MidoriBrowser* browser)
action = _action_by_name (browser, "Location");
if (g_object_get_data (G_OBJECT (view), "news-feeds"))
{
midori_location_action_set_secondary_icon (
MIDORI_LOCATION_ACTION (action), STOCK_NEWS_FEED);
#if HAVE_HILDON
gtk_action_set_sensitive (_action_by_name (browser, "AddNewsFeed"), TRUE);
#endif
}
else
{
midori_location_action_set_secondary_icon (
MIDORI_LOCATION_ACTION (action), GTK_STOCK_JUMP_TO);
#if HAVE_HILDON
gtk_action_set_sensitive (_action_by_name (browser, "AddNewsFeed"), FALSE);
#endif
}
}
static void
@ -2125,6 +2135,92 @@ _action_add_speed_dial_activate (GtkAction* action,
midori_browser_add_speed_dial (browser);
}
static void
_action_add_desktop_shortcut_activate (GtkAction* action,
MidoriBrowser* browser)
{
#if defined (GDK_WINDOWING_X11)
/* TODO: Implement */
#elif defined(GDK_WINDOWING_QUARTZ)
/* TODO: Implement */
#elif defined (GDK_WINDOWING_WIN32)
/* TODO: Implement */
#elif HAVE_HILDON
/* TODO: Implement */
#endif
}
static void
_action_add_news_feed_activate (GtkAction* action,
MidoriBrowser* browser)
{
GtkWidget* view;
const gchar* uri;
if (!(view = midori_browser_get_current_tab (browser)))
return;
if (!(uri = g_object_get_data (G_OBJECT (view), "news-feeds")))
return;
if (browser->news_aggregator && *browser->news_aggregator)
sokoke_spawn_program (browser->news_aggregator, uri, TRUE);
else
{
GtkWidget* dialog = gtk_message_dialog_new (
GTK_WINDOW (browser), 0, GTK_MESSAGE_INFO,
GTK_BUTTONS_OK, "%s", _("New feed"));
gtk_message_dialog_format_secondary_text (
GTK_MESSAGE_DIALOG (dialog), "%s", uri);
gtk_widget_show (dialog);
g_signal_connect_swapped (dialog, "response",
G_CALLBACK (gtk_widget_destroy), dialog);
}
}
static void
_action_compact_add_activate (GtkAction* action,
MidoriBrowser* browser)
{
GtkStockItem item;
GtkWidget* dialog;
GtkBox* box;
gchar* label = NULL;
GtkWidget* button;
if (!GTK_WIDGET_VISIBLE (browser))
return;
gtk_stock_lookup (GTK_STOCK_ADD, &item);
dialog = g_object_new (GTK_TYPE_DIALOG,
"transient-for", browser, "title", item.label, NULL); /* Add a new bookmark */
box = GTK_BOX (GTK_DIALOG (dialog)->vbox);
action = _action_by_name (browser, "BookmarkAdd");
katze_assign (label, katze_object_get_string (action, "label"));
button = gtk_button_new_with_mnemonic (label);
gtk_box_pack_start (box, button, TRUE, TRUE, 4);
gtk_action_connect_proxy (action, button);
action = _action_by_name (browser, "AddSpeedDial");
katze_assign (label, katze_object_get_string (action, "label"));
button = gtk_button_new_with_mnemonic (label);
gtk_box_pack_start (box, button, TRUE, TRUE, 4);
gtk_action_connect_proxy (action, button);
action = _action_by_name (browser, "AddDesktopShortcut");
katze_assign (label, katze_object_get_string (action, "label"));
button = gtk_button_new_with_mnemonic (label);
gtk_box_pack_start (box, button, TRUE, TRUE, 4);
gtk_action_connect_proxy (action, button);
action = _action_by_name (browser, "AddNewsFeed");
katze_assign (label, katze_object_get_string (action, "label"));
button = gtk_button_new_with_mnemonic (label);
gtk_box_pack_start (box, button, TRUE, TRUE, 4);
gtk_action_connect_proxy (action, button);
g_free (label);
gtk_dialog_run (GTK_DIALOG (dialog));
}
static void
_action_tab_close_activate (GtkAction* action,
MidoriBrowser* browser)
@ -2821,7 +2917,9 @@ _action_compact_menu_populate_popup (GtkAction* action,
{ "-" },
#endif
{ "ClearPrivateData" },
#if !HAVE_HILDON
{ "Fullscreen" },
#endif
{ "Preferences" },
};
guint i;
@ -3409,21 +3507,7 @@ _action_location_secondary_icon_released (GtkAction* action,
if (gtk_window_get_focus (GTK_WINDOW (browser)) == widget)
_action_location_submit_uri (action, uri, FALSE, browser);
else if ((uri = g_object_get_data (G_OBJECT (view), "news-feeds")))
{
if (browser->news_aggregator && *browser->news_aggregator)
sokoke_spawn_program (browser->news_aggregator, uri, TRUE);
else
{
GtkWidget* dialog = gtk_message_dialog_new (
GTK_WINDOW (browser), 0, GTK_MESSAGE_INFO,
GTK_BUTTONS_OK, "%s", _("New feed"));
gtk_message_dialog_format_secondary_text (
GTK_MESSAGE_DIALOG (dialog), "%s", uri);
gtk_widget_show (dialog);
g_signal_connect_swapped (dialog, "response",
G_CALLBACK (gtk_widget_destroy), dialog);
}
}
_action_add_news_feed_activate (action, browser);
else
_action_location_submit_uri (action, uri, FALSE, browser);
return TRUE;
@ -4469,6 +4553,15 @@ static const GtkActionEntry entries[] = {
{ "AddSpeedDial", NULL,
N_("Add to Speed _dial"), "<Ctrl>h",
N_("Add shortcut to speed dial"), G_CALLBACK (_action_add_speed_dial_activate) },
{ "AddDesktopShortcut", NULL,
N_("Add Shortcut to the _desktop"), "<Ctrl>h",
N_("Add shortcut to the desktop"), G_CALLBACK (_action_add_desktop_shortcut_activate) },
{ "AddNewsFeed", NULL,
N_("Subscribe to News _feed"), NULL,
N_("Subscribe to this news feed"), G_CALLBACK (_action_add_news_feed_activate) },
{ "CompactAdd", GTK_STOCK_ADD,
NULL, NULL,
NULL, G_CALLBACK (_action_compact_add_activate) },
{ "TabClose", GTK_STOCK_CLOSE,
N_("_Close Tab"), "<Ctrl>w",
N_("Close the current tab"), G_CALLBACK (_action_tab_close_activate) },
@ -4777,6 +4870,7 @@ static const gchar* ui_markup =
"<separator/>"
"<menuitem action='SaveAs'/>"
"<menuitem action='AddSpeedDial'/>"
"<menuitem action='AddDesktopShortcut'/>"
"<separator/>"
"<menuitem action='TabClose'/>"
"<menuitem action='WindowClose'/>"
@ -5076,10 +5170,6 @@ midori_browser_init (MidoriBrowser* browser)
GtkWidget* homepage;
GtkWidget* back;
GtkWidget* forward;
#if HAVE_HILDON
GtkWidget* menu;
GList* children;
#endif
GtkSettings* gtk_settings;
GtkWidget* hpaned;
GtkWidget* vpaned;
@ -5302,14 +5392,14 @@ midori_browser_init (MidoriBrowser* browser)
g_object_unref (action);
/* Create the menubar */
browser->menubar = gtk_ui_manager_get_widget (ui_manager, "/menubar");
#if HAVE_HILDON
browser->menubar = gtk_menu_new ();
_action_compact_menu_populate_popup (NULL, browser->menubar, browser);
_action_compact_menu_populate_popup (NULL, GTK_MENU (browser->menubar), browser);
hildon_window_set_menu (HILDON_WINDOW (browser), GTK_MENU (browser->menubar));
hildon_program_add_window (hildon_program_get_instance (),
HILDON_WINDOW (browser));
#else
browser->menubar = gtk_ui_manager_get_widget (ui_manager, "/menubar");
gtk_box_pack_start (GTK_BOX (vbox), browser->menubar, FALSE, FALSE, 0);
gtk_widget_hide (browser->menubar);
g_signal_connect (browser->menubar, "button-press-event",
@ -5354,6 +5444,8 @@ midori_browser_init (MidoriBrowser* browser)
_action_set_sensitive (browser, "EncodingCustom", FALSE);
_action_set_sensitive (browser, "SelectionSourceView", FALSE);
_action_set_sensitive (browser, "LastSession", FALSE);
/* FIXME: Enable once implemented */
_action_set_sensitive (browser, "AddDesktopShortcut", FALSE);
/* Create the navigationbar */
browser->navigationbar = gtk_ui_manager_get_widget (
@ -5683,7 +5775,7 @@ _midori_browser_set_toolbar_items (MidoriBrowser* browser,
GtkWidget* toolitem;
#if HAVE_HILDON
items = "Bookmarks,Window,Back,Forward,ReloadStop,Location,Panel,Trash";
items = "Bookmarks,CompactAdd,ReloadStop,Location,Back,Fullscreen";
#endif
gtk_container_foreach (GTK_CONTAINER (browser->navigationbar),

View file

@ -1932,6 +1932,9 @@ webkit_web_view_populate_popup_cb (WebKitWebView* web_view,
gtk_action_group_get_action (actions, "AddSpeedDial"));
gtk_menu_shell_append (menu_shell, menuitem);
}
menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "AddDesktopShortcut"));
gtk_menu_shell_append (menu_shell, menuitem);
menuitem = sokoke_action_create_popup_menu_item (
gtk_action_group_get_action (actions, "SaveAs"));