Implement 'Run as web application' option on bookmarks
If enabled, the bookmark will run as a standalone process by default.
This commit is contained in:
parent
d3526d5897
commit
18526f2ac6
2 changed files with 105 additions and 39 deletions
|
@ -657,6 +657,7 @@ midori_browser_edit_bookmark_dialog_new (MidoriBrowser* browser,
|
||||||
GtkWidget* entry_desc;
|
GtkWidget* entry_desc;
|
||||||
GtkWidget* entry_uri;
|
GtkWidget* entry_uri;
|
||||||
GtkWidget* combo_folder;
|
GtkWidget* combo_folder;
|
||||||
|
GtkWidget* check_app;
|
||||||
|
|
||||||
if (!browser->bookmarks || !GTK_WIDGET_VISIBLE (browser))
|
if (!browser->bookmarks || !GTK_WIDGET_VISIBLE (browser))
|
||||||
return;
|
return;
|
||||||
|
@ -777,6 +778,22 @@ midori_browser_edit_bookmark_dialog_new (MidoriBrowser* browser,
|
||||||
gtk_widget_show_all (hbox);
|
gtk_widget_show_all (hbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_app = NULL;
|
||||||
|
if (!KATZE_IS_ARRAY (bookmark))
|
||||||
|
{
|
||||||
|
hbox = gtk_hbox_new (FALSE, 8);
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
|
||||||
|
label = gtk_label_new (NULL);
|
||||||
|
gtk_size_group_add_widget (sizegroup, label);
|
||||||
|
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
|
||||||
|
check_app = gtk_check_button_new_with_mnemonic (_("Run as _web application"));
|
||||||
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_app),
|
||||||
|
katze_item_get_meta_integer (bookmark, "app") != -1);
|
||||||
|
gtk_box_pack_start (GTK_BOX (hbox), check_app, TRUE, TRUE, 0);
|
||||||
|
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
|
||||||
|
gtk_widget_show_all (hbox);
|
||||||
|
}
|
||||||
|
|
||||||
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
|
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
|
||||||
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
|
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
|
||||||
{
|
{
|
||||||
|
@ -788,30 +805,32 @@ midori_browser_edit_bookmark_dialog_new (MidoriBrowser* browser,
|
||||||
katze_item_set_text (bookmark,
|
katze_item_set_text (bookmark,
|
||||||
gtk_entry_get_text (GTK_ENTRY (entry_desc)));
|
gtk_entry_get_text (GTK_ENTRY (entry_desc)));
|
||||||
if (!KATZE_IS_ARRAY (bookmark))
|
if (!KATZE_IS_ARRAY (bookmark))
|
||||||
|
{
|
||||||
katze_item_set_uri (bookmark,
|
katze_item_set_uri (bookmark,
|
||||||
gtk_entry_get_text (GTK_ENTRY (entry_uri)));
|
gtk_entry_get_text (GTK_ENTRY (entry_uri)));
|
||||||
|
katze_item_set_meta_integer (bookmark, "app",
|
||||||
|
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_app))
|
||||||
|
? 1 : -1);
|
||||||
|
}
|
||||||
|
|
||||||
folder = browser->bookmarks;
|
folder = browser->bookmarks;
|
||||||
if (1)
|
selected = gtk_combo_box_get_active_text (GTK_COMBO_BOX (combo_folder));
|
||||||
|
if (g_strcmp0 (selected, _("Toplevel folder")))
|
||||||
{
|
{
|
||||||
selected = gtk_combo_box_get_active_text (GTK_COMBO_BOX (combo_folder));
|
guint i = 0;
|
||||||
if (g_strcmp0 (selected, _("Toplevel folder")))
|
KatzeItem* item;
|
||||||
{
|
while ((item = katze_array_get_nth_item (browser->bookmarks, i++)))
|
||||||
guint i = 0;
|
if (KATZE_IS_ARRAY (item))
|
||||||
KatzeItem* item;
|
if (!g_strcmp0 (katze_item_get_name (item), selected))
|
||||||
while ((item = katze_array_get_nth_item (browser->bookmarks, i++)))
|
{
|
||||||
if (KATZE_IS_ARRAY (item))
|
folder = KATZE_ARRAY (item);
|
||||||
if (!g_strcmp0 (katze_item_get_name (item), selected))
|
break;
|
||||||
{
|
}
|
||||||
folder = KATZE_ARRAY (item);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
g_free (selected);
|
|
||||||
if (!new_bookmark)
|
|
||||||
katze_array_remove_item (katze_item_get_parent (bookmark), bookmark);
|
|
||||||
katze_array_add_item (folder, bookmark);
|
|
||||||
}
|
}
|
||||||
|
g_free (selected);
|
||||||
|
if (!new_bookmark)
|
||||||
|
katze_array_remove_item (katze_item_get_parent (bookmark), bookmark);
|
||||||
|
katze_array_add_item (folder, bookmark);
|
||||||
}
|
}
|
||||||
gtk_widget_destroy (dialog);
|
gtk_widget_destroy (dialog);
|
||||||
}
|
}
|
||||||
|
@ -2812,13 +2831,26 @@ _action_bookmarks_populate_popup (GtkAction* action,
|
||||||
gtk_widget_show (menuitem);
|
gtk_widget_show (menuitem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
midori_browser_open_bookmark (MidoriBrowser* browser,
|
||||||
|
KatzeItem* item)
|
||||||
|
{
|
||||||
|
/* FIXME: Use the same binary that is running right now */
|
||||||
|
if (katze_item_get_meta_integer (item, "app") != -1)
|
||||||
|
sokoke_spawn_program ("midori -a", katze_item_get_uri (item), FALSE);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
midori_browser_set_current_uri (browser, katze_item_get_uri (item));
|
||||||
|
gtk_widget_grab_focus (midori_browser_get_current_tab (browser));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_action_bookmarks_activate_item (GtkAction* action,
|
_action_bookmarks_activate_item (GtkAction* action,
|
||||||
KatzeItem* item,
|
KatzeItem* item,
|
||||||
MidoriBrowser* browser)
|
MidoriBrowser* browser)
|
||||||
{
|
{
|
||||||
midori_browser_set_current_uri (browser, katze_item_get_uri (item));
|
midori_browser_open_bookmark (browser, item);
|
||||||
gtk_widget_grab_focus (midori_browser_get_current_tab (browser));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -3867,8 +3899,7 @@ midori_browser_menu_bookmarks_item_activate_cb (GtkWidget* widget,
|
||||||
KatzeItem* item;
|
KatzeItem* item;
|
||||||
|
|
||||||
item = (KatzeItem*)g_object_get_data (G_OBJECT (widget), "KatzeItem");
|
item = (KatzeItem*)g_object_get_data (G_OBJECT (widget), "KatzeItem");
|
||||||
midori_browser_set_current_uri (browser, katze_item_get_uri (item));
|
midori_browser_open_bookmark (browser, item);
|
||||||
gtk_widget_grab_focus (midori_browser_get_current_tab (browser));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
|
@ -149,34 +149,69 @@ sokoke_show_uri (GdkScreen* screen,
|
||||||
gboolean
|
gboolean
|
||||||
sokoke_spawn_program (const gchar* command,
|
sokoke_spawn_program (const gchar* command,
|
||||||
const gchar* argument,
|
const gchar* argument,
|
||||||
gboolean quote)
|
gboolean filename)
|
||||||
{
|
{
|
||||||
GAppInfo* info;
|
|
||||||
GFile* file;
|
|
||||||
GList* files;
|
|
||||||
GError* error;
|
GError* error;
|
||||||
|
|
||||||
g_return_val_if_fail (command != NULL, FALSE);
|
g_return_val_if_fail (command != NULL, FALSE);
|
||||||
g_return_val_if_fail (argument != NULL, FALSE);
|
g_return_val_if_fail (argument != NULL, FALSE);
|
||||||
/* quote is ignored */
|
|
||||||
|
|
||||||
info = g_app_info_create_from_commandline (command,
|
if (filename)
|
||||||
NULL, G_APP_INFO_CREATE_NONE, NULL);
|
|
||||||
file = g_file_new_for_commandline_arg (argument);
|
|
||||||
files = g_list_append (NULL, file);
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
if (!g_app_info_launch (info, files, NULL, &error))
|
|
||||||
{
|
{
|
||||||
error_dialog (_("Could not run external program."), error->message);
|
GAppInfo* info;
|
||||||
g_error_free (error);
|
GFile* file;
|
||||||
|
GList* files;
|
||||||
|
|
||||||
|
info = g_app_info_create_from_commandline (command,
|
||||||
|
NULL, G_APP_INFO_CREATE_NONE, NULL);
|
||||||
|
file = g_file_new_for_commandline_arg (argument);
|
||||||
|
files = g_list_append (NULL, file);
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
if (!g_app_info_launch (info, files, NULL, &error))
|
||||||
|
{
|
||||||
|
error_dialog (_("Could not run external program."), error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
g_object_unref (file);
|
||||||
|
g_list_free (files);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
g_object_unref (file);
|
g_object_unref (file);
|
||||||
g_list_free (files);
|
g_list_free (files);
|
||||||
return FALSE;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gchar* command_ready;
|
||||||
|
gchar** argv;
|
||||||
|
|
||||||
|
if (strstr (command, "%s"))
|
||||||
|
command_ready = g_strdup_printf (command, argument);
|
||||||
|
else
|
||||||
|
command_ready = g_strconcat (command, " ", argument, NULL);
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
if (!g_shell_parse_argv (command_ready, NULL, &argv, &error))
|
||||||
|
{
|
||||||
|
error_dialog (_("Could not run external program."), error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
g_free (command_ready);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
g_free (command_ready);
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
if (!g_spawn_async (NULL, argv, NULL,
|
||||||
|
(GSpawnFlags)G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
|
||||||
|
NULL, NULL, NULL, &error))
|
||||||
|
{
|
||||||
|
error_dialog (_("Could not run external program."), error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_strfreev (argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_unref (file);
|
|
||||||
g_list_free (files);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue