From 52a008791b654dab104ca88ea10b771c86dbf23e Mon Sep 17 00:00:00 2001 From: Nick Schermer <nick@xfce.org> Date: Thu, 3 Jun 2010 20:47:49 +0200 Subject: [PATCH] Make the systray takeover selection. This instead of ignoring the startup. Since your plugin is unique now, it won't give problems when one panel is running. It also makes the systray restart after a crash work better, since most of the time is takes a while (in cpu cycles) before the selection is released of the crashing plugin. --- plugins/systray/systray-manager.c | 2 ++ plugins/systray/systray-manager.h | 2 ++ plugins/systray/systray.c | 50 ++++++++++++------------------ plugins/systray/systray.desktop.in | 1 + 4 files changed, 24 insertions(+), 31 deletions(-) diff --git a/plugins/systray/systray-manager.c b/plugins/systray/systray-manager.c index 85819709d..11731b181 100644 --- a/plugins/systray/systray-manager.c +++ b/plugins/systray/systray-manager.c @@ -266,6 +266,7 @@ systray_manager_new (void) +#if 0 gboolean systray_manager_check_running (GdkScreen *screen) { @@ -291,6 +292,7 @@ systray_manager_check_running (GdkScreen *screen) /* return result */ return (XGetSelectionOwner (GDK_DISPLAY_XDISPLAY (display), selection_atom) != None); } +#endif diff --git a/plugins/systray/systray-manager.h b/plugins/systray/systray-manager.h index d4c1cdbdb..892c8ee19 100644 --- a/plugins/systray/systray-manager.h +++ b/plugins/systray/systray-manager.h @@ -54,7 +54,9 @@ GQuark systray_manager_error_quark (void); SystrayManager *systray_manager_new (void) G_GNUC_MALLOC; +#if 0 gboolean systray_manager_check_running (GdkScreen *screen); +#endif gboolean systray_manager_register (SystrayManager *manager, GdkScreen *screen, diff --git a/plugins/systray/systray.c b/plugins/systray/systray.c index 9825759e6..8283c7008 100644 --- a/plugins/systray/systray.c +++ b/plugins/systray/systray.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2005-2007 Jasper Huijsmans <jasper@xfce.org> - * Copyright (c) 2007-2009 Nick Schermer <nick@xfce.org> + * Copyright (c) 2007-2010 Nick Schermer <nick@xfce.org> * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free @@ -260,38 +260,27 @@ systray_plugin_screen_changed (GtkWidget *widget, plugin->manager = NULL; } - /* check if not another systray is running on this screen */ + /* create a new manager and register this screen */ + plugin->manager = systray_manager_new (); + g_signal_connect (G_OBJECT (plugin->manager), "icon-added", + G_CALLBACK (systray_plugin_icon_added), plugin); + g_signal_connect (G_OBJECT (plugin->manager), "icon-removed", + G_CALLBACK (systray_plugin_icon_removed), plugin); + g_signal_connect (G_OBJECT (plugin->manager), "lost-selection", + G_CALLBACK (systray_plugin_lost_selection), plugin); + + /* try to register the systray */ screen = gtk_widget_get_screen (widget); - if (G_LIKELY (!systray_manager_check_running (screen))) + if (systray_manager_register (plugin->manager, screen, &error)) { - /* create a new manager and register this screen */ - plugin->manager = systray_manager_new (); - - /* hookup signals */ - g_signal_connect (G_OBJECT (plugin->manager), "icon-added", - G_CALLBACK (systray_plugin_icon_added), plugin); - g_signal_connect (G_OBJECT (plugin->manager), "icon-removed", - G_CALLBACK (systray_plugin_icon_removed), plugin); - g_signal_connect (G_OBJECT (plugin->manager), "lost-selection", - G_CALLBACK (systray_plugin_lost_selection), plugin); - - if (systray_manager_register (plugin->manager, screen, &error)) - { - /* send the plugin orientation */ - systray_plugin_orientation_changed (XFCE_PANEL_PLUGIN (plugin), - xfce_panel_plugin_get_orientation (XFCE_PANEL_PLUGIN (plugin))); - } - else - { - /* TODO handle error and leave the plugin */ - g_message ("Failed to register the systray manager %s", error->message); - g_error_free (error); - } + /* send the plugin orientation */ + systray_plugin_orientation_changed (XFCE_PANEL_PLUGIN (plugin), + xfce_panel_plugin_get_orientation (XFCE_PANEL_PLUGIN (plugin))); } else { - /* TODO, error and leave the plugin */ - g_message ("already a notification area running"); + xfce_dialog_show_error (NULL, error, _("Unable the start the notification area")); + g_error_free (error); } } @@ -549,9 +538,8 @@ systray_plugin_lost_selection (SystrayManager *manager, /* create fake error and show it */ error.message = _("Most likely another widget took over the function " - "of a notification area. This plugin will close."); - xfce_dialog_show_error (NULL, &error, - _("The notification area lost selection")); + "of a notification area. This area will be unused."); + xfce_dialog_show_error (NULL, &error, _("The notification area lost selection")); } diff --git a/plugins/systray/systray.desktop.in b/plugins/systray/systray.desktop.in index 2be7df253..eca9aab61 100644 --- a/plugins/systray/systray.desktop.in +++ b/plugins/systray/systray.desktop.in @@ -6,3 +6,4 @@ _Comment=Area where notification icons appear Icon=applications-system X-XFCE-Module=systray X-XFCE-Internal=FALSE +X-XFCE-Unique=SCREEN -- GitLab