Implement transfer completion notification via libnotify
This commit is contained in:
parent
d7b33085db
commit
d328d2afab
5 changed files with 62 additions and 6 deletions
|
@ -900,6 +900,9 @@ midori_browser_download_notify_status_cb (WebKitDownload* download,
|
||||||
switch (webkit_download_get_status (download))
|
switch (webkit_download_get_status (download))
|
||||||
{
|
{
|
||||||
case WEBKIT_DOWNLOAD_STATUS_FINISHED:
|
case WEBKIT_DOWNLOAD_STATUS_FINISHED:
|
||||||
|
{
|
||||||
|
MidoriBrowser* browser = midori_browser_get_for_widget (button);
|
||||||
|
|
||||||
icon = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
|
icon = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
|
||||||
gtk_button_set_image (GTK_BUTTON (button), icon);
|
gtk_button_set_image (GTK_BUTTON (button), icon);
|
||||||
if (g_object_get_data (G_OBJECT (download), "open-download"))
|
if (g_object_get_data (G_OBJECT (download), "open-download"))
|
||||||
|
@ -907,6 +910,28 @@ midori_browser_download_notify_status_cb (WebKitDownload* download,
|
||||||
else
|
else
|
||||||
g_object_set_data (G_OBJECT (gtk_widget_get_parent (button)),
|
g_object_set_data (G_OBJECT (gtk_widget_get_parent (button)),
|
||||||
"done", (void*)1);
|
"done", (void*)1);
|
||||||
|
|
||||||
|
if (browser->settings && katze_object_get_boolean (
|
||||||
|
browser->settings, "notify-transfer-completed"))
|
||||||
|
{
|
||||||
|
gchar* program = g_find_program_in_path ("notify-send");
|
||||||
|
if (program != NULL)
|
||||||
|
{
|
||||||
|
gchar* msg = g_strdup_printf (
|
||||||
|
_("The file <b>%s</b> has been downloaded."),
|
||||||
|
webkit_download_get_suggested_filename (download));
|
||||||
|
gchar* msgq = g_shell_quote (msg);
|
||||||
|
gchar* titleq = g_shell_quote (_("Transfer completed"));
|
||||||
|
gchar* command = g_strconcat (titleq, " ", msgq, NULL);
|
||||||
|
g_free (msg);
|
||||||
|
g_free (titleq);
|
||||||
|
g_free (msgq);
|
||||||
|
sokoke_spawn_program ("notify-send -i midori %s", command, FALSE);
|
||||||
|
g_free (command);
|
||||||
|
g_free (program);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case WEBKIT_DOWNLOAD_STATUS_CANCELLED:
|
case WEBKIT_DOWNLOAD_STATUS_CANCELLED:
|
||||||
case WEBKIT_DOWNLOAD_STATUS_ERROR:
|
case WEBKIT_DOWNLOAD_STATUS_ERROR:
|
||||||
|
@ -2428,7 +2453,7 @@ midori_browser_source_transfer_cb (KatzeNetRequest* request,
|
||||||
g_object_get (browser->settings,
|
g_object_get (browser->settings,
|
||||||
"text-editor", &text_editor, NULL);
|
"text-editor", &text_editor, NULL);
|
||||||
if (text_editor && *text_editor)
|
if (text_editor && *text_editor)
|
||||||
sokoke_spawn_program (text_editor, unique_filename);
|
sokoke_spawn_program (text_editor, unique_filename, TRUE);
|
||||||
else
|
else
|
||||||
sokoke_show_uri (NULL, unique_filename,
|
sokoke_show_uri (NULL, unique_filename,
|
||||||
gtk_get_current_event_time (), NULL);
|
gtk_get_current_event_time (), NULL);
|
||||||
|
@ -2621,7 +2646,7 @@ _action_location_secondary_icon_released (GtkAction* action,
|
||||||
{
|
{
|
||||||
const gchar* uri = midori_view_get_display_uri (MIDORI_VIEW (view));
|
const gchar* uri = midori_view_get_display_uri (MIDORI_VIEW (view));
|
||||||
if (browser->news_aggregator && *browser->news_aggregator)
|
if (browser->news_aggregator && *browser->news_aggregator)
|
||||||
sokoke_spawn_program (browser->news_aggregator, uri);
|
sokoke_spawn_program (browser->news_aggregator, uri, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -926,7 +926,7 @@ static void
|
||||||
midori_web_view_menu_download_activate_cb (GtkWidget* widget,
|
midori_web_view_menu_download_activate_cb (GtkWidget* widget,
|
||||||
MidoriView* view)
|
MidoriView* view)
|
||||||
{
|
{
|
||||||
sokoke_spawn_program (view->download_manager, view->link_uri);
|
sokoke_spawn_program (view->download_manager, view->link_uri, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -50,6 +50,7 @@ struct _MidoriWebSettings
|
||||||
gchar* homepage;
|
gchar* homepage;
|
||||||
gboolean show_crash_dialog;
|
gboolean show_crash_dialog;
|
||||||
gchar* download_folder;
|
gchar* download_folder;
|
||||||
|
gboolean notify_transfer_completed;
|
||||||
gchar* download_manager;
|
gchar* download_manager;
|
||||||
gchar* text_editor;
|
gchar* text_editor;
|
||||||
gchar* news_aggregator;
|
gchar* news_aggregator;
|
||||||
|
@ -120,6 +121,7 @@ enum
|
||||||
PROP_HOMEPAGE,
|
PROP_HOMEPAGE,
|
||||||
PROP_SHOW_CRASH_DIALOG,
|
PROP_SHOW_CRASH_DIALOG,
|
||||||
PROP_DOWNLOAD_FOLDER,
|
PROP_DOWNLOAD_FOLDER,
|
||||||
|
PROP_NOTIFY_TRANSFER_COMPLETED,
|
||||||
PROP_DOWNLOAD_MANAGER,
|
PROP_DOWNLOAD_MANAGER,
|
||||||
PROP_TEXT_EDITOR,
|
PROP_TEXT_EDITOR,
|
||||||
PROP_NEWS_AGGREGATOR,
|
PROP_NEWS_AGGREGATOR,
|
||||||
|
@ -580,6 +582,26 @@ midori_web_settings_class_init (MidoriWebSettingsClass* class)
|
||||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MidoriWebSettings:notify-transfer-completed:
|
||||||
|
*
|
||||||
|
* Whether to show a notification when a transfer has been completed.
|
||||||
|
*
|
||||||
|
* Since: 0.1.7
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (gobject_class,
|
||||||
|
PROP_NOTIFY_TRANSFER_COMPLETED,
|
||||||
|
g_param_spec_boolean (
|
||||||
|
"notify-transfer-completed",
|
||||||
|
_("Notify when a transfer has been completed"),
|
||||||
|
_("Whether to show a notification when a transfer has been completed"),
|
||||||
|
TRUE,
|
||||||
|
#if WEBKIT_CHECK_VERSION (1, 1, 3)
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
#else
|
||||||
|
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
#endif
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class,
|
g_object_class_install_property (gobject_class,
|
||||||
PROP_DOWNLOAD_MANAGER,
|
PROP_DOWNLOAD_MANAGER,
|
||||||
g_param_spec_string (
|
g_param_spec_string (
|
||||||
|
@ -912,6 +934,7 @@ notify_default_encoding_cb (GObject* object,
|
||||||
static void
|
static void
|
||||||
midori_web_settings_init (MidoriWebSettings* web_settings)
|
midori_web_settings_init (MidoriWebSettings* web_settings)
|
||||||
{
|
{
|
||||||
|
web_settings->notify_transfer_completed = TRUE;
|
||||||
web_settings->download_folder = g_strdup (midori_get_download_dir ());
|
web_settings->download_folder = g_strdup (midori_get_download_dir ());
|
||||||
web_settings->http_proxy = NULL;
|
web_settings->http_proxy = NULL;
|
||||||
web_settings->open_popups_in_tabs = TRUE;
|
web_settings->open_popups_in_tabs = TRUE;
|
||||||
|
@ -1077,6 +1100,9 @@ midori_web_settings_set_property (GObject* object,
|
||||||
case PROP_DOWNLOAD_FOLDER:
|
case PROP_DOWNLOAD_FOLDER:
|
||||||
katze_assign (web_settings->download_folder, g_value_dup_string (value));
|
katze_assign (web_settings->download_folder, g_value_dup_string (value));
|
||||||
break;
|
break;
|
||||||
|
case PROP_NOTIFY_TRANSFER_COMPLETED:
|
||||||
|
web_settings->notify_transfer_completed = g_value_get_boolean (value);
|
||||||
|
break;
|
||||||
case PROP_DOWNLOAD_MANAGER:
|
case PROP_DOWNLOAD_MANAGER:
|
||||||
katze_assign (web_settings->download_manager, g_value_dup_string (value));
|
katze_assign (web_settings->download_manager, g_value_dup_string (value));
|
||||||
break;
|
break;
|
||||||
|
@ -1276,6 +1302,9 @@ midori_web_settings_get_property (GObject* object,
|
||||||
case PROP_DOWNLOAD_FOLDER:
|
case PROP_DOWNLOAD_FOLDER:
|
||||||
g_value_set_string (value, web_settings->download_folder);
|
g_value_set_string (value, web_settings->download_folder);
|
||||||
break;
|
break;
|
||||||
|
case PROP_NOTIFY_TRANSFER_COMPLETED:
|
||||||
|
g_value_set_boolean (value, web_settings->notify_transfer_completed);
|
||||||
|
break;
|
||||||
case PROP_DOWNLOAD_MANAGER:
|
case PROP_DOWNLOAD_MANAGER:
|
||||||
g_value_set_string (value, web_settings->download_manager);
|
g_value_set_string (value, web_settings->download_manager);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -139,7 +139,8 @@ 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)
|
||||||
{
|
{
|
||||||
gchar* argument_escaped;
|
gchar* argument_escaped;
|
||||||
gchar* command_ready;
|
gchar* command_ready;
|
||||||
|
@ -149,7 +150,7 @@ sokoke_spawn_program (const gchar* command,
|
||||||
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);
|
||||||
|
|
||||||
argument_escaped = g_shell_quote (argument);
|
argument_escaped = quote ? g_shell_quote (argument) : g_strdup (argument);
|
||||||
if (strstr (command, "%s"))
|
if (strstr (command, "%s"))
|
||||||
command_ready = g_strdup_printf (command, argument_escaped);
|
command_ready = g_strdup_printf (command, argument_escaped);
|
||||||
else
|
else
|
||||||
|
|
|
@ -35,7 +35,8 @@ 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);
|
||||||
|
|
||||||
gchar* sokoke_search_uri (const gchar* uri,
|
gchar* sokoke_search_uri (const gchar* uri,
|
||||||
const gchar* keywords);
|
const gchar* keywords);
|
||||||
|
|
Loading…
Reference in a new issue