gnome-settings-daemon r409 - in trunk: . data plugins/xrandr
- From: ssp svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-settings-daemon r409 - in trunk: . data plugins/xrandr
- Date: Tue, 29 Jul 2008 05:12:36 +0000 (UTC)
Author: ssp
Date: Tue Jul 29 05:12:36 2008
New Revision: 409
URL: http://svn.gnome.org/viewvc/gnome-settings-daemon?rev=409&view=rev
Log:
Tue Jul 29 01:09:46 2008 SÃren Sandmann <sandmann redhat com>
* plugins/xrandr/gsd-xrandr-manager.c (start_or_stop_icon): Make
the display notification icon configurable.
Added:
trunk/data/apps_gnome_settings_daemon_xrandr.schemas.in
Modified:
trunk/ChangeLog
trunk/data/Makefile.am
trunk/plugins/xrandr/gsd-xrandr-manager.c
Modified: trunk/data/Makefile.am
==============================================================================
--- trunk/data/Makefile.am (original)
+++ trunk/data/Makefile.am Tue Jul 29 05:12:36 2008
@@ -8,6 +8,7 @@
apps_gnome_settings_daemon_keybindings.schemas.in \
apps_gnome_settings_daemon_screensaver.schemas.in \
desktop_gnome_font_rendering.schemas.in \
+ apps_gnome_settings_daemon_xrandr.schemas.in \
$(NULL)
schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
Added: trunk/data/apps_gnome_settings_daemon_xrandr.schemas.in
==============================================================================
--- (empty file)
+++ trunk/data/apps_gnome_settings_daemon_xrandr.schemas.in Tue Jul 29 05:12:36 2008
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<gconfschemafile>
+ <schemalist>
+ <schema>
+ <key>/schemas/apps/gnome_settings_daemon/xrandr/show_notification_icon</key>
+ <applyto>/apps/gnome_settings_daemon/xrandr/show_notification_icon</applyto>
+ <owner>gnome</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Show Displays in Notification Area</short>
+ <long>If a notification icon with display related things should be
+ shown in the panel.
+ </long>
+ </locale>
+ </schema>
+ </schemalist>
+</gconfschemafile>
Modified: trunk/plugins/xrandr/gsd-xrandr-manager.c
==============================================================================
--- trunk/plugins/xrandr/gsd-xrandr-manager.c (original)
+++ trunk/plugins/xrandr/gsd-xrandr-manager.c Tue Jul 29 05:12:36 2008
@@ -36,6 +36,7 @@
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
+#include <gconf/gconf-client.h>
#define GNOME_DESKTOP_USE_UNSTABLE_API
@@ -55,6 +56,9 @@
#define GSD_XRANDR_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_XRANDR_MANAGER, GsdXrandrManagerPrivate))
+#define CONF_DIR "/apps/gnome_settings_daemon/xrandr"
+#define CONF_KEY "show_notification_icon"
+
#define VIDEO_KEYSYM "XF86Display"
/* name of the icon files (gsd-xrandr.svg, etc.) */
@@ -71,6 +75,8 @@
gboolean running;
GtkStatusIcon *status_icon;
+ GConfClient *client;
+ int notify_id;
};
enum {
@@ -194,7 +200,7 @@
gtk_widget_show (item);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- item = gtk_menu_item_new_with_mnemonic (_("_Configure Display Settings"));
+ item = gtk_menu_item_new_with_mnemonic (_("_Configure Display Settings ..."));
g_signal_connect (item, "activate",
G_CALLBACK (popup_menu_configure_display_cb), manager);
gtk_widget_show (item);
@@ -237,14 +243,15 @@
* Or ideally, we should detect if we are on a tablet and only display
* the icon in that case.
*/
-
- priv->status_icon = gtk_status_icon_new_from_icon_name (GSD_XRANDR_ICON_NAME);
- gtk_status_icon_set_tooltip (priv->status_icon, _("Configure display settings"));
-
- g_signal_connect (priv->status_icon, "activate",
- G_CALLBACK (status_icon_activate_cb), manager);
- g_signal_connect (priv->status_icon, "popup-menu",
- G_CALLBACK (status_icon_popup_menu_cb), manager);
+ if (!priv->status_icon) {
+ priv->status_icon = gtk_status_icon_new_from_icon_name (GSD_XRANDR_ICON_NAME);
+ gtk_status_icon_set_tooltip (priv->status_icon, _("Configure display settings"));
+
+ g_signal_connect (priv->status_icon, "activate",
+ G_CALLBACK (status_icon_activate_cb), manager);
+ g_signal_connect (priv->status_icon, "popup-menu",
+ G_CALLBACK (status_icon_popup_menu_cb), manager);
+ }
}
static void
@@ -252,8 +259,35 @@
{
struct GsdXrandrManagerPrivate *priv = manager->priv;
- g_object_unref (priv->status_icon);
- priv->status_icon = NULL;
+ if (priv->status_icon) {
+ g_signal_handlers_disconnect_by_func (
+ priv->status_icon, G_CALLBACK (status_icon_activate_cb), manager);
+ g_signal_handlers_disconnect_by_func (
+ priv->status_icon, G_CALLBACK (status_icon_popup_menu_cb), manager);
+
+ g_object_unref (priv->status_icon);
+ priv->status_icon = NULL;
+ }
+}
+
+static void
+start_or_stop_icon (GsdXrandrManager *manager)
+{
+ if (gconf_client_get_bool (manager->priv->client, CONF_DIR "/" CONF_KEY, NULL)) {
+ status_icon_start (manager);
+ }
+ else {
+ status_icon_stop (manager);
+ }
+}
+
+static void
+on_config_changed (GConfClient *client,
+ guint cnxn_id,
+ GConfEntry *entry,
+ GsdXrandrManager *manager)
+{
+ start_or_stop_icon (manager);
}
gboolean
@@ -263,6 +297,20 @@
g_debug ("Starting xrandr manager");
manager->priv->running = TRUE;
+ manager->priv->client = gconf_client_get_default ();
+
+ g_assert (manager->priv->notify_id == 0);
+
+ g_warning ("adding dir %s\n", CONF_DIR);
+ gconf_client_add_dir (manager->priv->client, CONF_DIR,
+ GCONF_CLIENT_PRELOAD_NONE,
+ NULL);
+
+ manager->priv->notify_id =
+ gconf_client_notify_add (
+ manager->priv->client, CONF_DIR,
+ (GConfClientNotifyFunc)on_config_changed,
+ manager, NULL, NULL);
if (manager->priv->keycode) {
gdk_error_trap_push ();
@@ -286,7 +334,7 @@
on_client_message,
manager->priv->rw_screen);
- status_icon_start (manager);
+ start_or_stop_icon (manager);
return TRUE;
}
@@ -297,7 +345,7 @@
g_debug ("Stopping xrandr manager");
manager->priv->running = FALSE;
-
+
gdk_error_trap_push ();
XUngrabKey (gdk_x11_get_default_xdisplay(),
@@ -306,6 +354,19 @@
gdk_error_trap_pop ();
+ if (manager->priv->notify_id != 0) {
+ gconf_client_remove_dir (manager->priv->client,
+ CONF_DIR, NULL);
+ gconf_client_notify_remove (manager->priv->client,
+ manager->priv->notify_id);
+ manager->priv->notify_id = 0;
+ }
+
+ if (manager->priv->client != NULL) {
+ g_object_unref (manager->priv->client);
+ manager->priv->client = NULL;
+ }
+
status_icon_stop (manager);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]